使用PowerShell创建硬链接和软链接

Mik*_*e T 215 powershell symlink

PowerShell 1.0可以创建类似于Unix的硬链接和软链接吗?

如果这不是内置的,有人可以指向我有一个模仿这个的ps1脚本的网站吗?

这是任何好壳,恕我直言的必要功能.:)

joc*_*sid 242

Windows 10(以及通常的Powershell 5.0)允许您通过New-Item cmdlet创建符号链接.

用法:

New-Item -Path C:\LinkDir -ItemType SymbolicLink -Value F:\RealDir
Run Code Online (Sandbox Code Playgroud)

或在您的个人资料中:

function make-link ($target, $link) {
    New-Item -Path $link -ItemType SymbolicLink -Value $target
}
Run Code Online (Sandbox Code Playgroud)

启用开发者模式,在与New-Item以下链接建立链接时不需要管理员权限:

在此输入图像描述

  • New-Item 允许文件的“-ItemType”为“HardLink”,目录的“-ItemType”为“Junction”。这些不需要开发人员模式或管理员权限。 (8认同)
  • 从Windows v1703开始,mklink允许创建没有帐户提升的符号链接,如果在"设置"中启用了"开发者"模式,则"新建项目"不会.希望在下次更新. (6认同)
  • New-Item -Path C:\ LinkDir -ItemType SymbolicLink -Value F:\ RealDir (3认同)
  • 由于MS重新安排文档,此链接现已中断.我在https://technet.microsoft.com/en-us/library/hh849795.aspx找到了当前的工作链接 (2认同)
  • 有了[接受的答案](/sf/ask/62610131/#5549583),我能够使用相对路径,这不是“New-Item”命令行开关的情况。 (2认同)

Jas*_*mbs 240

您可以从PowerShell 调用mklink提供的cmd来创建符号链接:

cmd /c mklink c:\path\to\symlink c:\target\file
Run Code Online (Sandbox Code Playgroud)

如果目标是目录/d,mklink则必须传递给目标.

对于硬链接,我建议像Sysinternals Junction这样的东西.

  • 如果你有一个powershell配置文件,你也可以创建一个快速函数`function mklink {cmd/c mklink $ args}` (27认同)
  • 如果你想建立目录链接,命令将类似{cmd/c mklink/D"toDir"fromDir} (14认同)
  • 将/ H参数添加到mklink将创建一个硬链接,而不需要像Sysinternals Junction这样的第三方程序. (9认同)
  • 我认为jocassid有更好的答案.恕我直言,我们应该尝试教如何使用PowerShell,而不是通过cmd.exe使用漏洞和黑客攻击. (3认同)
  • @SergeVoloshenko [当然可以](https://gist.github.com/fa4278b3738c8f0b0680aaf9237b6f47)。没错,使用 `New-Item` [确实检测目标是否是目录](https://gist.github.com/d6b38f78a078afe8c734226d6040b3d7),但是 `New-Item` [如果目标不存在将失败](https ://gist.github.com/3b75396b4fc51f863a9434cec446cd95) 而 [mklink 无论如何都会创建符号链接](https://gist.github.com/9f2ea76f1539163b45c4e033a4f67d2a)。 (3认同)

Kei*_*ill 40

不,它没有内置到PowerShell中,mklinkWindows Vista/Windows 7上的实用程序直接内置cmd.exe.您可以使用PowerShell社区扩展(免费).有几种cmdlet用于各种类型的重新分析点:

  • New-HardLink,
  • New-SymLink,
  • New-Junction,
  • Remove-ReparsePoint
  • 和别的.

  • Windows 10用户请参阅答案http://stackoverflow.com/a/34905638/195755。Windows 10它是*内置的。复制/粘贴:“ New-Item -Type”,然后按Tab键循环浏览选项。“ Hardlink”,“ SymbolicLink”和“ Junction”为我出现。通过Windows Management Framework 5.0+安装了Powershell 5.0的Works Win 10,Server 2016+或更旧的操作系统。 (2认同)

小智 23

在Windows 7中,命令是

fsutil hardlink create new-file existing-file
Run Code Online (Sandbox Code Playgroud)

PowerShell在没有完整路径(c:\ Windows\system32)或扩展名(.exe)的情况下找到它.

  • @mopsled硬链接,根据定义,必须与目标在同一个卷上,这不是特定于`fsutil`(或Windows的限制)的限制 (9认同)

bvi*_*tor 15

新符号链接:

Function New-SymLink ($link, $target)
{
    if (test-path -pathtype container $target)
    {
        $command = "cmd /c mklink /d"
    }
    else
    {
        $command = "cmd /c mklink"
    }

    invoke-expression "$command $link $target"
}
Run Code Online (Sandbox Code Playgroud)

删除 - 符号链接:

Function Remove-SymLink ($link)
{
    if (test-path -pathtype container $link)
    {
        $command = "cmd /c rmdir"
    }
    else
    {
        $command = "cmd /c del"
    }

    invoke-expression "$command $link"
}
Run Code Online (Sandbox Code Playgroud)

用法:

New-Symlink "c:\foo\bar" "c:\foo\baz"
Remove-Symlink "c:\foo\bar"
Run Code Online (Sandbox Code Playgroud)

  • Windows 10用户请参阅http://stackoverflow.com/a/34905638/195755.Windows 10**是*内置的.复制/粘贴:`New-Item -Type`并按Tab键循环选项.`Hardlink`,`SymbolicLink`和`Junction`对我而言.使用Windows Management Framework 5.0+安装Powershell 5.0,实现Win 10,Server 2016+或更旧的操作系统. (2认同)

not*_*ndy 10

Sysinternals 的Junction命令行实用程序可以轻松创建和删除符号(软)链接.Windows中的硬链接和连接.

  • 最好使用Windows附带的`mklink`.*如果*您有一个随附的Windows版本. (3认同)

Che*_*eso 5

您可以使用此实用程序:

c:\Windows\system32\fsutil.exe create hardlink
Run Code Online (Sandbox Code Playgroud)

  • 不过,它需要更高的权限。创建硬链接通常不会。 (2认同)

mhe*_*384 5

我结合了两个答案(@bviktor 和 @jocassid)。它在 Windows 10 和 Windows Server 2012 上进行了测试。

function New-SymLink ($link, $target)
{
    if ($PSVersionTable.PSVersion.Major -ge 5)
    {
        New-Item -Path $link -ItemType SymbolicLink -Value $target
    }
    else
    {
        $command = "cmd /c mklink /d"
        invoke-expression "$command ""$link"" ""$target"""
    }
}
Run Code Online (Sandbox Code Playgroud)