如何规范化和比较 Powershell 中的路径

How to normalize and compare paths in Powershell

我需要测试两个包含路径的字符串,看它们是否指向同一个目录。
例如,在将 C:\WindowsC:\Windows\ 进行比较时,简单地使用字符串比较会失败。

根据 Whosebug-Question 使用 Join-Path 可以解决这个问题,但它仍然遗漏了其他问题:
例如 \server\share 有时可以表示为 UNC\server\share\<ip>\share

是否有不使用变通方法来检查此问题的正确方法?

现在我使用这个作为解决方法:

function Format-Path(){
    [Cmdletbinding()]
    param($Path)

    Write-Verbose "Format-Path: $Path"
    if($Path.StartsWith(".")){
        #Get Absolute path if path starts with "."
        $Path = Resolve-Path -Path $Path
        Write-Verbose "Resolved Path: $Path"
    }
    if($Path -match "^.*::(.*)"){
        $Path = $Path -replace "^.*::(.*)", ''
        Write-Verbose "Replaced Powershell providers: $Path"
    }
    $Path = $Path -replace "/"                      , "\" `
                  -replace "^\\\.\"              , "" `
                  -replace "^\\\?\"              , "" `
                  -replace "^UNC\"                 , "\"
    Write-Verbose "Replaced UNC conventions: $Path"

    if($Path -match "^\\([A-Za-z]+)(@SSL)?"){
        $Path = $Path -replace "^\\([A-Za-z]+)(@SSL)?", "\$((Resolve-DnsName $matches[1] -Type "A").IPAddress)"
        Write-Verbose "Resolve name into IP: $Path"
    }

    return $Path.TrimEnd("\")
}