我试图用
标识与Root映射的网络共享的驱动器名称\\ SERVER05 \ DIR $
这根本行不通:
$user->profession = $request('profession')
尝试了Get-PSDrive | Where-Object {$_.Root -like "SERVER05" }
,-match
而没有
有什么想法吗?
答案 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-List
,Get-Member
和Select-Object
检查对象以查看更多信息。