【问题标题】:Powershell Where-Object MatchPowershell Where-Object 匹配
【发布时间】:2017-05-31 10:35:20
【问题描述】:

我想使用Where-ObjectGet-PSDrive 的输出限制为仅网络共享。

Get-PSDrive 显示以下内容:

使用的名称 (GB) 免费 (GB) 提供者根 CurrentLocation ---- --------- --------- -------- ---- ---------------- 文件系统 A:\ 别名 别名 C 16.19 43.47 文件系统 C:\Users\HansB\Documents 证书证书\ D 文件系统 D:\ 环境环境 功能 功能 HKCU 注册 HKEY_CURRENT_USER HKLM 注册表 HKEY_LOCAL_MACHINE V 451.39 159.76 文件系统 \\192.168.71.31\fs_log_target 变量变量 W 197.72 文件系统 \\192.168.71.32\perf200 WSMan WSMan X 197.72 文件系统 \\192.168.71.32\perf100 Y 271.52 34.33 文件系统 \\192.168.71.30\group200 Z 271.52 34.33 文件系统 \\192.168.71.30\group100

然后我想获得\\192.168.71.30\group100 网络共享:

Get-PSDrive | Where-Object  { $_.Root -match "\\\\192.168.71.30\\group100" }

但我什么也没得到,为什么 -match 不起作用?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    使用 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
    

    【讨论】:

    • 最佳答案 - 谢谢!
    【解决方案2】:

    尝试改用-eq

    Get-PSDrive | Where-Object {$_.Root -eq "\\192.168.71.30\group100"}
    

    【讨论】:

    • 测试:-eq 也没有任何结果
    【解决方案3】:

    如果您输入Get-PSDrive | select root,您会注意到对于网络驱动器它不会打印任何内容。所以网络共享根有些奇怪。

    Get-PSDrive | select root | %{write-host $_.Root.GetType()} 会显示它是一个系统字符串,所以不太清楚为什么它对于网络驱动器来说似乎是空的。

    【讨论】:

    • 或者看看 Adam Mnich 的回答 :) .... Get-PSDrive |选择 Displayroot 确实显示了想要的字符串
    猜你喜欢
    • 2022-10-07
    • 2022-10-07
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 2016-01-13
    • 2021-05-21
    相关资源
    最近更新 更多