从UNC路径获取ShareName

时间:2018-08-28 09:13:27

标签: powershell

我正在执行一项任务,需要从UNC路径获取服务器上的本地路径。

基本上\\server\MyShare\Somewhere\Bla应该是D:\foo\bar\somewhere\bla

我从[system.Uri]$Path知道服务器主机,所以我知道在哪个服务器中寻找本地路径

我可以使用Get-SmbShare来获取服务器上的共享。

我现在唯一需要比较两者的就是拆分UNC路径并获取共享名。

有一种简单的方法吗? -split '\'不起作用。

我希望最后有一个数组,我可以选择[1]。任何其他方法也都非常受欢迎。

2 个答案:

答案 0 :(得分:0)

对于$list类型的值[System.URI],您可以:

   $result=@()
    Foreach ($uri in $list)
    {
    $object =""|select URI,Hostname,Localpath 
        $object.uri=$uri.LocalPath
        $object.hostname=$uri.Authority
        $object.LocalPath= Invoke-Command -ComputerName $($uri.Authority) -ScriptBlock {param ($uri) (Get-SmbShare ($uri.AbsolutePath -split '/')[1]).path} -ArgumentList $uri
    $result+=$object
    }
$result

答案 1 :(得分:0)

您可以这样分割unc路径:

$uncPath = '\\server\MyShare\Somewhere\Bla'
$server, $share, $remainingPath = ($uncPath -replace '^\\+', '').Split("\", 3)

然后,使用WMI获取共享的本地路径:

$localShare = Get-WmiObject win32_share -ComputerName $server | Where-Object {$_.Name -eq $share} | Select-Object -ExpandProperty Path

或使用Get-SmbShare cmdlet:

$localShare = Get-SmbShare -Name $server | Where-Object {$_.Name -eq $share} | Select-Object -ExpandProperty Path

将此$ localShare与您从拆分中获得的$ remainingPath合并,您将获得完整的本地路径

$localPath = Join-Path $localShare $remainingPath