我正在尝试使用 $Share.Name
按每个共享的名称进行过滤.但是,当我尝试使用 -contains
时在 if
下面的语句,我没有得到任何结果。
我想要的结果应该是ADMIN$ - C:\ADMIN$
我正在努力获得一个变量,例如:$ExcludeShares = "ADMIN$"
并根据 $String.Name
进行过滤在 $ExcludeShares
我对其他过滤方法的想法持开放态度。
提前致谢!
function GetAllUsedShares{
[psobject]$Shares = Get-WmiObject -Class win32_share
Foreach($Share in $Shares){
$name = [string]$Share.Name
if ($name -contains 'admin'){
Write-Host $Share.Name - $Share.Path
}
}
}
最佳答案
包含旨在针对数组工作。考虑以下示例
PS C:\Users\Cameron> 1,2,3 -contains 1
True
PS C:\Users\Cameron> "123" -contains 1
False
PS C:\Users\Cameron> "123" -contains 123
True
如果您想查看字符串是否包含文本模式,那么您有几个选择。前 2 个将是
-match
运算符或 .Contains()
字符串方法-match
将是在和 If 语句中使用的更简单的示例之一。注:-Match
支持 .Net 正则表达式,因此请确保不要输入任何特殊字符,因为您可能无法获得预期的结果。PS C:\Users\Cameron> "Matt" -match "m"
True
PS C:\Users\Cameron> "Matt" -match "."
True
-match
默认情况下不区分大小写,因此上面的第一个示例返回 True。第二个示例希望匹配任何字符,即 .
用正则表达式表示,这就是它也返回 True 的原因。 .Contains()
:-match
很棒,但是对于简单的字符串,您可以......"123".Contains("2")
True
"123".Contains(".")
False
请注意
.Contains()
区分大小写"asdf".Contains('F')
False
"asdf".Contains('f')
True
关于powershell 包含不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436764/