我有一个像这样的哈希表:
$Path = @{
"BM" = "\\srv\xy"
"BB4-L" = "\\srv\xy"
"BB4-R" = "\\srv\xy"
"HSB" = "\\srv\xy"
"IB" = "\\srv\xy"
"LM1" = "\\srv\xy"
"LM2" = "\\srv\xy"
"sis" = "\\srv\xy"
}
我的$env:username
是姐姐。为什么.contains()
和-contains
有什么不同?
PS Z:\Powershell-Scripts\Functions> $Path -contains $env:username
False
PS Z:\Powershell-Scripts\Functions> $Path.contains($env:username)
True
如果可能的话,我总是喜欢使用PowerShell语法,但在这种情况下我不能,因为-contains
会返回false。
.contains()
和-contains
有何不同?
从MS文档:
-Contains
Description: Containment operator. Tells whether a collection of reference
values includes a single test value. Always returns a Boolean value. Returns TRUE
only when the test value exactly matches at least one of the reference values.
.Contains()
方法是支持子串的String
对象的方法之一因此当你运行True
时为什么你得到$Path.Contains($env:username)
$Path
是一个System.Collections.Hashtable
。您还可以阅读以下文档:
当测试值是集合时,Contains运算符使用引用相等性。仅当其中一个引用值与测试值对象的实例相同时,它才返回TRUE。
哈希表中的每个项目都是System.Collections.DictionaryEntry
。您正在将它与string
进行比较。由于类型不匹配,引用也不匹配。 Contains(System.Object key)
和ContainsKey(System.Object key)
使用键进行测试。为了在比较中保持一致,你应该写:
$Path.Keys -contains $env:username