PowerShell 删除连接

PowerShell Remove Junction

从 Windows 10 开始,PowerShell 终于能够在本地创建连接和链接。

然而,Remove-Item 函数似乎没有意识到连接并尝试删除要求确认的目录,以及是否应该递归地删除其中的项目。

所以,问题是: 有没有办法使用 PowerShell 本机 Cmdlet 删除联结? (即不调用 cmd)

试试这个 "command-let":

cmd /c rmdir .\Target

来源:Powershell Remove-Item and symbolic links

Is there a way to remove a junction using PowerShell?

目前,至少在 PowerShell v5 中,this is considered "fixed"。您可以做的是使用 -Force 开关,否则您将收到错误消息,称该路径为 NTFS 连接。我至少在 fixed 上使用引号的原因是使用开关仍会显示目录中有关子项的消息。选择 Y 仍然只会删除我使用 PSv5 进行的测试中的连接。

Remove-Item "C:\temp\junction" -Force -Confirm:$False

如果这对您不起作用或者您没有 v5,您可以使用 .Net 方法删除目录。这似乎也能正常工作。

[io.directory]::Delete("C:\temp\junction")

Google找了半天,找到答案:

function Remove-Any-File-Force ($Target) {
    if ( Test-Path -Path "$Target" ){
        & $env:SystemRoot\System32\ATTRIB.exe -S -H -R "$Target" >$null 2>$null
    } else {
        return
    }
    $TargetAttributes = (Get-Item -Path $Target -Force).Attributes.ToString()
    if ($TargetAttributes -match "ReparsePoint") {
        if ($TargetAttributes -match "Archive") {
            Remove-Item -Path "$Target" -Force
        } else {
            try {
                & $env:SystemRoot\System32\cmd.exe /c rmdir /Q "$Target" >$null 2>$null
            } catch {
                try {
                    [io.directory]::Delete("$Target")
                } catch {
                    Remove-Item -Path "$Target" -Force
                }
            }
        }    
    } else {
        if ($TargetAttributes -match "Directory") {
            Remove-Item -Path "$Target" -Force -Recurse
        } else {
            Remove-Item -Path "$Target" -Force
        }
    }
}

简单命令-

rm [path of file] -Force