Powershell Where-Object Match

时间:2017-05-31 10:35:20

标签: powershell

我想使用Where-ObjectGet-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" }

但我什么都没得到,为什么 - 匹配不起作用?

3 个答案:

答案 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()}会显示它是一个系统字符串,所以不太清楚为什么网络驱动器似乎是空的。