我正在尝试在每个用户主目录中的“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之间究竟有什么区别。
请帮助!!
答案 0 :(得分:2)
在Linux / Unix中使用
ln -s target [linkname]
如果省略linkname
,则默认为target
的基本名称。
但是,在Windows中,参数linkname
和target
的顺序是相反的,并且它们都是必需的:
mklink /d linkname target
此外,mklink
是CMD
内置版,因此它无法在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
}
}