我正在执行一项任务,需要从UNC路径获取服务器上的本地路径。
基本上\\server\MyShare\Somewhere\Bla
应该是D:\foo\bar\somewhere\bla
我从[system.Uri]$Path
知道服务器主机,所以我知道在哪个服务器中寻找本地路径
我可以使用Get-SmbShare
来获取服务器上的共享。
我现在唯一需要比较两者的就是拆分UNC路径并获取共享名。
有一种简单的方法吗? -split '\'
不起作用。
我希望最后有一个数组,我可以选择[1]
。任何其他方法也都非常受欢迎。
答案 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