PowerShell匹配,包含不适用于网络共享路径

时间:2019-02-08 13:58:41

标签: powershell

我试图用

标识与Root映射的网络共享的驱动器名称
  

\\ SERVER05 \ DIR $

这根本行不通:

$user->profession = $request('profession')

尝试了Get-PSDrive | Where-Object {$_.Root -like "SERVER05" } -match而没有

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这里的问题是这些PowerShell陷阱之一。 PSDrives返回的默认属性是“名称”,“描述”,“提供程序”,“根”和“当前位置”。让我们以我的M盘为例

Get-PSDrive -Name M

Name           Used (GB)     Free (GB) Provider      Root                                                                               CurrentLocation
----           ---------     --------- --------      ----                                                                               ---------------
M                 769.66        112.47 FileSystem    \\s5000\Computer Srv\Matt                                                                         

您遇到的问题是,当您将Root的名称发送到默认输出流时,实际上是在查看DisplayRoot的值。这具有误导性,但您想要的信息仍然存在。

Get-PSDrive -Name M | Format-List *

Used            : 826416230400
Free            : 120764563456
CurrentLocation : 
Name            : M
Provider        : Microsoft.PowerShell.Core\FileSystem
Root            : M:\
Description     : 
Credential      : System.Management.Automation.PSCredential
DisplayRoot     : \\s5000\Computer Srv\Matt

这是使用PowerShell格式化xml文件在后台处理的事情。具体来说,这来自PowerShellCore.format.ps1xml中的一行,该行将Root的值定义为DisplayRoot(如果它具有值),否则为Root

<TableColumnItem>
    <ScriptBlock>if($_.DisplayRoot -ne $null) { $_.DisplayRoot } else { $_.Root }</ScriptBlock>
</TableColumnItem>

如果您到目前为止一直跟着我。.

它试图通过显示您想要的内容来帮您一个忙。知道了...尝试对DisplayRoot进行过滤。

Get-PSDrive | Where-Object {$_.DisplayRoot -like "*SERVER05*" }

在尝试进行部分匹配时,使用-like时不要忘记使用星号。如有疑问,请使用cmdlet列表Format-ListGet-MemberSelect-Object检查对象以查看更多信息。