从数组中排除包含$ -notcontains不能按预期工作的名称

时间:2014-05-03 17:17:06

标签: powershell scripting

我正在尝试列出来自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

谢谢!

3 个答案:

答案 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。