我正在尝试列出来自win32_share的输出名称,并且只包含那些不包含$的输出名称。我编写了以下代码,但它传递了所有内容。如何列出名称中不包含$的股票?
$winshare = Get-WmiObject -computername 127.0.0.1 -class win32_share | Select-Object name
$share = $null
foreach ($i in $winshare.name) {
if ($i -notcontains '$') {$share = $i + ',' + $share}else{}
}
write-host $share
谢谢!
答案 0 :(得分:0)
使用:
if(!$ i.Contains('$'))
-notcontains匹配完整的字符串
答案 1 :(得分:0)
由于您正在查询localmachine,因此可以省略Computername变量。
此外,如果您尝试查询管理共享,最好查找以$字符结尾的共享名称。这可以通过String.EndsWith()测试来完成。
Get-WmiObject -Class win32_share | Where-Object { -not $_.Name.EndsWith('$') }
答案 2 :(得分:0)
另一种方法是使用-notmatch
运算符:
if ($i -notmatch '\$')
如果您只想获得可见的份额,请尝试
Get-WmiObject -Class Win32_Share -Filter "NOT Name like '%$'"
过滤器在获得结果之前运行,结果应该更快,您可以稍后跳过if-test。