我想使用Where-Object
将Get-PSDrive
的输出限制为仅限网络共享。
Get-PSDrive
向我展示了以下内容:
Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- A FileSystem A:\ Alias Alias C 16.19 43.47 FileSystem C:\ Users\HansB\Documents Cert Certificate \ D FileSystem D:\ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE V 451.39 159.76 FileSystem \\192.168.71.31\fs_log_target Variable Variable W 197.72 FileSystem \\192.168.71.32\perf200 WSMan WSMan X 197.72 FileSystem \\192.168.71.32\perf100 Y 271.52 34.33 FileSystem \\192.168.71.30\group200 Z 271.52 34.33 FileSystem \\192.168.71.30\group100
然后我想获得\\192.168.71.30\group100
网络共享:
Get-PSDrive | Where-Object { $_.Root -match "\\\\192.168.71.30\\group100" }
但我什么都没得到,为什么 - 匹配不起作用?
答案 0 :(得分:6)
使用DisplayRoot而不是Root属性
Get-PSDrive | Where-Object { $_.DisplayRoot -match "\\\\192.168.71.30\\group100" }
尝试运行
Get-PSDrive | Where-Object { $_.DisplayRoot -match "\\\\192.168.71.30\\group100" } | select *
Root将是您的映射驱动器号,DisplayRoot是您的UNC路径
编辑:作为旁注。对于转义正则表达式,请使用[regex] :: Escape()方法。PS > [regex]::Escape("\\192.168.71.30\group100")
\\\\192\.168\.71\.30\\group100
答案 1 :(得分:0)
请尝试使用-eq
:
Get-PSDrive | Where-Object {$_.Root -eq "\\192.168.71.30\group100"}
答案 2 :(得分:0)
如果yoy键入Get-PSDrive | select root
,您会注意到对于网络驱动器,它将不会打印任何内容。因此网络共享根源有些奇怪。
Get-PSDrive | select root | %{write-host $_.Root.GetType()}
会显示它是一个系统字符串,所以不太清楚为什么网络驱动器似乎是空的。