我正在编写一个 PowerShell 脚本,在其中创建一个目录连接。
在脚本的开发过程中,我运行了 New-Item 命令,看到连接条目已创建,但没有仔细查看。事实证明,链接/交汇点是同时创建和损坏的,或者看起来是这样。这就是我的意思...
我想创建绝对连接(而不是相对连接),以便链接独立于分配的驱动器号。因此,我使用 mountvol 报告的卷 ID 及其 PS 对应的 Get-Volume 以及一些较小的 PS 体操(仍在学习 PS)。该脚本需要引用当前分配的驱动器号来获取卷 ID。
(Get-Volume | Where-Object {$_.DriveLetter -eq 'c'}).Path
或
(Get-WmiObject win32_volume | Select-Object DriveLetter, DeviceID | Where-Object {$_.DriveLetter -eq 'c:' }).DeviceID
实现所需的体积路径(有细微的差别 - 请注意一个中的冒号,而另一个中缺少冒号)。我相信,所使用的点表示法仅适用于 PS 版本 3 及更高版本。
我可以挖掘的微软文档将这些描述为 “DOS 设备路径”
我真的不知道其中有多少是“DOS”,有多少是“Windows”,以及界限在哪里。我还知道 Windows 有一个带有 \DEVICE\HardDiskX 的磁盘引用架构...但是关于设备 cmdlet 的 PS 文档非常枯燥(尝试 get-help Get-NtDeviceProperty),我认为卷的设备路径将是一个设备属性,所以,无论如何,除了我已经知道它出现的地方(例如事件日志和磁盘部分)之外,我并没有遇到过这种表示法。
因此,继续使用可用的内容,通过上述 cmdlet 接收到 VolumeID 路径,无论您如何运行 New-Item cmdlet、管道、parantethicals 或直接提供volumeID 路径的字符串; New-Item 命令似乎破坏了“目标”或“值”:
\\?\Volume{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}\Some_Path
到
\??\\\?\Volume{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}\Some_Path
不知道发生了什么,也不知道为什么 New-Item 会这样,我尝试了以下操作(据我所知 - 尝试了一些事情):
我还能如何在 PowerShell 中使用或不使用 New-Item 来实现联结创建,这将使用上述可用的卷 ID 路径创建指向卷和该卷中独立于 Windows 分配的驱动器号的路径的绝对联结链接来自 mountvol 或 Get-Volume,甚至 \DEVICE\HARDDISKX\ 样式引用?非常感谢任何正确方向的想法和帮助。
提前致谢。
参见:https://winaero.com/create-symbolic-link-windows-10-powershell/
mklink
是 cmd.exe
中的内置命令,不能直接在 PowerShell 中使用。但是,您可以使用 cmd /c mklink
从 PowerShell 调用它。
Get-ChildItem D:\MainFolder-Copy -Directory | Foreach {Get-ChildItem (Join-Path C:\MainFolder $_.Name) -Directory} | Foreach {cmd /c mklink /j ($_.FullName -replace 'C:\\MainFolder','D:MainFolder-Copy') $_.FullName}
或者在 PowerShell 中您可以使用
New-Item
New-Item -ItemType Junction -Path "Link" -Target "Target"
从 PowerShell 访问卷影复制 (VSS) 快照并使用卷号说明符创建连接:从 powershell 访问卷影复制 (VSS) 快照
$s1 = (Get-WmiObject -List Win32_ShadowCopy).Create ("C:\", "ClientAccessible")
$s2 = Get-WmiObject Win32_ShadowCopy | Where-Object { $_.ID -eq $s1.ShadowID }
$d = $s2.DeviceObject + "\"
cmd /c mklink /d C:shadowcopy "$d"