【问题标题】:Convert UNC Path to NTFS local path将 UNC 路径转换为 ​​NTFS 本地路径
【发布时间】:2018-02-21 09:07:59
【问题描述】:

我在 Powershell 中将 UNC 位置转换为本地驱动器时遇到问题。因此,我的代码基本上将用户输入作为读取主机作为数据库备份位置的 UNC 路径。位置可能是这样的\\ServerName\m$\SQLBackups\123。

然后它会提示从哪里复制备份。这又是一个 UNC 路径,例如 \\ServerName\g$\SQLRestores\444\Filename.bak。

我需要将两个路径都转换为它们的本地路径,以便读取 m:\sqldbackups\123 和 g:\sqlrestores\444\Filename.bak。

下面是我的代码,我已经添加了我想要的最终输出的注释。

$BackupPath = "\\ServerName\m$\SQLBackups\123"
$Dumps = Split-Path -Path $BackupPath -Leaf
$Drive = Split-Path -Path $BackupPath -Parent
$LastTwo = $Drive.Substring($Drive.get_Length()-2)


$FullNTFS = $LastTwo + "\" + $Dumps
$FullNTFS = $FullNTFS.Replace("$",":")
$FullNTFS 
#This should be M:\SQLBACKUPS\123

$RestorePath = "\\ServerName\g$\SQLRestores\444\Filename.bak"
$Dumps = Split-Path -Path $RestorePath -Leaf
$Drive = Split-Path -Path $RestorePath -Parent
$LastTwo = $Drive.Substring($Drive.get_Length()-2)


$FullNTFS = $LastTwo + "\" + $Dumps
$FullNTFS = $FullNTFS.Replace("$",":")
$FullNTFS 
#This should be read as g:\sqlrestores\444\FileName.bak

【问题讨论】:

    标签: powershell powershell-3.0


    【解决方案1】:

    Split-Path 将不起作用,除非路径指向共享根目录下的目录或文件。

    改用Path.GetPathRoot() 来获取主机和共享名称:

    $Drive = [System.IO.Path]::GetPathRoot($BackupPath)
    $Dumps = $BackupPath.Substring($Drive.Length)
    $Drive = $Drive.Substring($Drive.LastIndexOf('\') + 1).Replace('$',':')
    $NTFSPath = "$Drive$Dumps"
    

    【讨论】:

    • 这是一个非常好的方法!我还会在驱动器号中添加ToUpper(),但这只是虚荣:)
    • 正是我想要的。谢谢你。为了获得文件名,我已经完成了 $FileName = Split-Path $BackupPath -leaf
    【解决方案2】:

    我认为上面的答案是正确的方法,但有时简单的模式匹配可能就足够了:

    "\\server2.net\g$\foo\bar\baz", "\\server1.com\c$\baz\bar\foo" |
    Select-String -Pattern "([A-z])\`$(.*)" |
    %{ "$($_.Matches.Groups[1].value):$($_.Matches.Groups[2].value)" }
    

    【讨论】:

      【解决方案3】:
      # -replace operator with regex does the trick
      PS C:\> '\\ServerName\m$\SQLBackups\123' -replace '(?:.+)\\([a-z])\$\\','$1:\'
      m:\SQLBackups\123
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-22
        • 2011-01-19
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-05
        相关资源
        最近更新 更多