powershell 包含不工作
Posted
技术标签:
【中文标题】powershell 包含不工作【英文标题】:powershell contains not working 【发布时间】:2015-06-08 19:31:44 【问题描述】:我正在尝试使用 $Share.Name
按每个共享的名称进行过滤。但是,当我尝试在下面的 if
语句中使用 -contains
时,我没有得到任何结果。
我想要的结果应该是
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
【问题讨论】:
-contains
用于收藏会员资格。不过,您可以使用-like
或-match
进行此类测试。
@EtanReisner -match
工作,谢谢!!
【参考方案1】:
奇怪的是,.contains() 的作用类似于数组上的 -contains:
$a = 'one','two','three'
$a.contains('one')
True
$a.contains('o')
False
$a.contains
OverloadDefinitions
-------------------
bool IList.Contains(System.Object value)
【讨论】:
【参考方案2】:包含用于处理数组。考虑以下示例
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
如果您要查看 string 是否包含文本模式,那么您有几个选择。前 2 个是 -match
运算符或 .Contains()
字符串方法
-match
将是在 if 语句中使用的更简单的示例之一。 注意:-Match
支持 .Net 正则表达式,因此请确保不要输入任何特殊字符,因为您可能无法获得预期的结果。
PS C:\Users\Cameron> "Matt" -match "m"
True
PS C:\Users\Cameron> "Matt" -match "."
True
-match
默认情况下不区分大小写,因此上面的第一个示例返回 True。第二个例子是寻找匹配 any 字符,这是 .
在正则表达式中所代表的,这也是它返回 True 的原因。
.Contains()
:-match
很棒,但是对于简单的字符串,您可以....
"123".Contains("2")
True
"123".Contains(".")
False
注意.Contains()
区分大小写
"asdf".Contains('F')
False
"asdf".Contains('f')
True
【讨论】:
奇怪的是 .contains() 的工作方式类似于 -contains 在数组上。【参考方案3】:你可以在一行中做到这一点:
Get-WmiObject -Class win32_share | where -Property Name -like "*admin*" | % "$($_.Name) - $($_.Path)"
不要忘记 where 语句中的星号。在这种情况下,它会寻找准确的值。
如果你想把它写出来,这也是一样的:
$shares = Get-WmiObject -Class win32_share
# I pipe the $shares collection into the where-object command to filter on "admin"
$adminshares = $shares | where -property Name -like "*admin*"
# now we can loop with a foreach, which has the "%" operator as it's shorthand in the oneliner
foreach ($share in $adminshares)
# variables in strings are a bit weird in powershell, but you have to wrap them like this
write-host "$($share.Name) - $($share.Path)"
【讨论】:
【参考方案4】:如果您正在测试 $name
的“管理员”,您可以使用 -eq
比较器。这将检查 $name 的内容是否等于您指定的字符串 'admin' 的内容
【讨论】:
以上是关于powershell 包含不工作的主要内容,如果未能解决你的问题,请参考以下文章
PowerShell工作流学习-2-工作流运行Powershell命令