Windows符号链接

时间:2013-12-02 19:25:57

标签: windows powershell symlink

我正在尝试在每个用户主目录中的“reports”文件夹与主服务器中的“reports”文件夹之间创建一个符号链接。

简而言之,我试图用Windows将会理解的语言转换以下内容

for all users
   cd /path/to/firstname.lastname/reports
   ln -s ../masterUsername/reports

我试过

MKLINK /d /path/to/masterUsername/reports /path/to/firstname/lastname/reports

第一个用户很好,但它抱怨第二个用户已经存在该链接。

我也试过

/j

在这种情况下,我不确定Junction和Directory之间究竟有什么区别。

请帮助!!

1 个答案:

答案 0 :(得分:2)

在Linux / Unix中使用

ln -s target [linkname]

如果省略linkname,则默认为target的基本名称。

但是,在Windows中,参数linknametarget的顺序是相反的,并且它们都是必需的:

mklink /d linkname target

此外,mklinkCMD内置版,因此它无法在PowerShell中单独使用。你需要像这样使用它:

cmd /c mklink /d linkname target

如果(例如)您想在所有用户配置文件中创建符号链接,则应执行以下操作:

$target = 'C:\path\to\masterUsername\reports'

Get-ChildItem 'C:\Users' | ? { $_.PSIsContainer } | % {
  cmd /c mklink /d (Join-Path $_.FullName 'reports') $target
}

请注意,您需要使用管理员权限才能使用mklink

编辑:要将每个用户目录中的reports个文件夹链接到一个中央报告目录,您可以执行以下操作:

$userdir = 'C:\Users'
$hub     = 'C:\path\to\masterUsername\reports'

Get-ChildItem $userdir | ? { $_.PSIsContainer } | % {
  $userReports = Join-Path $_.FullName 'Documents\reports'
  if (Test-Path -LiteralPath $userReports) {
    cmd /c mklink /d (Join-Path $hub $_.Name) $userReports
  }
}