致电
Get-PsDrive | Select Name,Root
我可以看到跟随的驱动器:
Name Root
---- ----
Alias
C C:\
Cert \
Env
Function
G \\company.com\EVP\Data\Gen...
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
Variable
WSMan
X \\server\C$
Z \\server\C$
大。现在我只想要网络驱动器,即Root
包含\\
且Provider
为FileSystem
的驱动器。
所以我试过
Get-PSDrive |
where {$_.Provider -match "FileSystem" -and $_.Root -match "\\"}
| Select -ExpandProperty Name
但由于某些原因,这包括C
驱动器。怎么可能?
我也尝试过改为
$_.Root -match "\\\"
但是我得到了
解析" \\" - 模式结束时非法\。
和
$_.Root -match "\\\\"
什么都不返回。
答案 0 :(得分:-1)
-match
在右边使用正则表达式(正则表达式),在正则表达式语言中,反斜杠是一个转义字符,指定反斜杠的方法是用另一个转义它 - 即{{1转换为单个反斜杠,与\\
等驱动器匹配。
您的选择是:
C:\
编辑:
正如我在问题中提到的那样,当我尝试与' \\'匹配时,我没有得到任何回报价值。
运行$_ -match '\\\\' # two escaped backslashes
$_ -match [regex]::Escape('\\') # it returns \\\\ but maybe clearer to a reader what's happening
$_.StartsWith('\\') # don't use a regex, use a .Net string method
并看到类似的内容:
Get-PsDrive Z | Format-List -Property *
并显示属性Used : 89738715136
Free : 29716107264
CurrentLocation :
Name : Z
Provider : Microsoft.PowerShell.Core\FileSystem
Root : Z:\
Description :
MaximumSize :
Credential : System.Management.Automation.PSCredential
DisplayRoot : \\localhost\c$
实际上是驱动器号,UNC路径称为root
。我不知道为什么,但看起来输出格式化系统显示DisplayRoot值并将其显示为Root值。但是,这只是在最后的演示步骤中发生的,您无法在脚本中使用它。
@Lieven Keersmaekers'建议使用DisplayRoot
是好的。