如何在Powershell中获取已断开连接的网络驱动器?

3

我需要获取所有映射的网络驱动器,包括当前未连接的驱动器。我尝试使用Get-PSDrive,但它只显示当前连接的。可以使用net use获取所有映射的网络驱动器,但我无法重复使用输出(我需要保存盘符和路径)。


1
断开的网络驱动器显示在用户注册表中:Get-ChildItem hkcu:\network - henrycarteruk
2个回答

3

虽然James C.发布的HKCU路径解决方案可能是更好的解决方案,但您可以将net use的输出转换为对象。看看...

net use |
    Select-Object -SkipLast 2 |
    Select-Object -Skip 6 |
    ForEach-Object {$_ -replace '\s{2,}', ', '} |
    ConvertFrom-Csv -Header Status, DriveLetter, UNC_Path, Network |
    Select-Object -Property DriveLetter, UNC_Path

希望这能帮到你, 李

2
不错 +1,更简单:(net use) -replace '\s{2,}', ',' |sls '\\\\'|ConvertFrom-Csv -Header Status, DriveLetter, UNC_Path, Network - user6811411
@LotPings - 我总是忘记 Select-String。匹配双斜杠可能更快,哈哈![咧嘴笑] - Lee_Dailey

2
您可以使用以下命令从“用户注册表”获取网络驱动器的状态:
Get-ChildItem hkcu:\network

要访问这些注册表项,您需要使用Get-ItemProperty命令,您可以构建一个PSObject来保存属性,以使其更加美观易读:
Get-ChildItem hkcu:\network | %{            
    $obj = New-Object PSObject
    $obj | Add-Member Noteproperty Drive $_.name.Replace('HKEY_CURRENT_USER\network\','')
    $obj | Add-Member NoteProperty Path (Get-ItemProperty (Join-Path hkcu:\network $_.name.split('\')[-1]) | Select-Object -ExpandProperty RemotePath)
    [array]$mapped += $obj
}

示例属性:

PS> $mapped

Drive Path          
----- ----          
Y     \\server1\share
Z     \\server2\hidden$

谢谢您的回答,但我真的不明白这段代码是做什么的...那么我该如何访问只有"Y"或者只有"\server2\hidden$"呢?有没有一种方法可以迭代它?(我对Powershell非常陌生) - Manu
1
是的,您可以遍历该对象,以下是有关此主题的博客:https://www.itprotoday.com/powershell/iterating-through-collections-powershells-foreach-loops - henrycarteruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接