我尝试使用$Share.Name
按每个共享的名称过滤。但是,当我尝试在下面的if
语句中使用-contains
时,没有得到任何结果。
我想要的结果应该是ADMIN$ - C:\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
}
}
}
5条答案
按热度按时间kx7yvsdv1#
Contains用于数组。请考虑以下示例
如果你想知道一个 string 是否包含一个文本模式,那么你有几个选择,前两个是
-match
操作符或者.Contains()
字符串方法-match
是在and If语句中使用的较简单的示例之一。* 注意:*-Match
支持.Net正则表达式,因此请确保不要输入任何特殊字符,否则可能无法获得预期的结果。-match
在默认情况下不区分大小写,因此上面的第一个示例返回True。第二个示例查找匹配 any 字符,这是.
在regex中表示的内容,这也是它返回True的原因。.Contains()
:-match
非常棒,但是对于简单的字符串,您可以......请注意,
.Contains()
区分大小写yv5phkfx2#
您可以在一行中完成此操作:
不要忘记where语句中的星号,它会查找这种情况下的确切值。
如果你想把它写出来,这做同样的事情:
n9vozmp43#
如果您正在测试
$name
是否确实为“admin”,则可以使用-eq
比较器。该比较器将检查$name的内容是否等于指定字符串“admin”的内容wooyq4lh4#
奇怪的是,.contains()在数组中的作用就像-contains:
1szpjjfi5#
用法不区分大小写
区分大小写
不区分大小写-全部大写
不需要,但可以将内容全部大写以进行比较。