我非常渴望得到这些提示。这是我的窘境:
首先,我有一个字符串数组,我用这种方式创建(显示数字的子集):
$a = @"
00013120747
00013051436
00013110491
00002100011
"@
$aa = $a.Split("`n")
接下来,我以这种方式生成Active Directory中所有用户的列表(使用ActiveRoles):
$all_u = Get-QADUser -DontUseDefaultIncludedProperties -IncludedProperties Name,LogonName,EmployeeID -SizeLimit 0
现在,为什么我不能匹配$aa
数组的元素?例如,执行以下操作:
$all_u | where {$_.EmployeeID -match "00013110491"}
它有效。但如果我做以下事情:
$all_u | where {$_.EmployeeID -match $aa[2]}
它不起作用。
所以我做了一个更简单的测试:
$aa.GetType().Name
String[]
$aa[2].GetType().Name
String
$aa[2]
00013110491
$aa[2] -eq "00013110491"
False
什么?这里发生了什么???
顺便说一下,我正在使用PowerShell ISE。
答案 0 :(得分:2)
如果仔细检查$ aa的元素,你会发现它们都有尾随空格。这是对"`n"进行拆分的结果。如果在进行拆分后修剪它们,您将获得预期的结果。
$a = @"
00013120747
00013051436
00013110491
00002100011
"@
$aa = $a.Split("`n") |% {$_.trim()}
$aa[2] -eq "00013110491"
True
-match将匹配字符串中的任何位置,因此它甚至会与尾随空格匹配。 -eq要求和完全匹配,字符的字符和尾随空格将导致它返回False。
答案 1 :(得分:1)
$a = @"
00013120747
00013051436
00013110491
00002100011
"@
$aa = $a.Split("`r`n")
答案 2 :(得分:-2)
你正在使用这里的字符串。这样的语法:
$String = @"
entry1
entry2
entry3
"@
$String.Count
>1
您需要首先拆分此字符串,然后才能比较它们。如果你看看你运行时实际得到的东西
$a[2]
> '0'
您要求PowerShell提供第二个索引位置。这意味着这一点。 00 [0] 13120747
这是因为here-string是一个单独的字符串,恰好包含多行。使用PowerShell数组索引,如果只有一个条目,您将从列表中返回该位置。
$string = "0123456"
$string[0..2]
>012