符号链接不能在 Powershell 5.1 中创建,但可以通过 Powershell 7 和命令提示符创建

Symlinks cannot be created in Powershell 5.1 but can be created by Powershell 7 and Command Prompt

Windows Developer Mode已启用,以下均为non admin shells。 在下面详述的所有场景中,当前目录中存在一个名为 target 的文件。

通过 Powershell 5.1 下面给出一个 ERROR

PS C:\Users\user\repos\tmp> Get-Host | Select-Object Version
Version
5.1.19041.610
PS C:\Users\user\repos\tmp> New-Item -Path link -ItemType SymbolicLink -Target target
New-Item : Administrator privilege required for this operation.
At line:1 char:1
+ New-Item -Path link -ItemType SymbolicLink -Target target
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\Users\user\repos\tmp\target:String) [New-Item], UnauthorizedAccessException
    + FullyQualifiedErrorId : NewItemSymbolicLinkElevationRequired,Microsoft.PowerShell.Commands.NewItemCommand

通过Powershell 7.1以下作品

PS C:\Users\user\repos\tmp> Get-Host | Select-Object Version
Version
7.0.2
PS C:\Users\user\repos\tmp> New-Item -Path link -ItemType SymbolicLink -Target target
la---           3/13/2021  1:55 AM              0 link -> target

通过 Powershell 5.1Powershell 7 以下作品

PS C:\Users\user\repos\tmp> cmd /c mklink link .\target
symbolic link created for link <<===>> .\target

通过Command Prompt以下作品

C:\Users\user\repos\tmp>mklink link target
symbolic link created for link <<===>> target

有谁知道为什么只有 Powershell 5.1 会出现这个错误,有没有办法解决这个问题?

当 Microsoft 启用非管理员符号 link 创建(启用开发人员模式)时,他们以所有未编码使用它的程序都无法使用它的方式进行,并更新了 mklink 才能使用它。

明显的解决方法:通过您已经发现的 cmd /c 从 Powershell 调用 mklink