Poweshell中可能有IndexOf INCASENSITIVE吗?

时间:2018-11-12 15:18:57

标签: arrays powershell indexof case-sensitive case-insensitive

在终端服务器的查询会话命令组成的数组中搜索索引时遇到问题。

这是有问题的脚本:

---终端服务器中已记录用户的阵列---

$a=Get-RDUsersession -CollectionName "BLABLA" -ConnectionBroker BLABLA.BLA.BL

---来自活动目录的具有两个列的所有用户的阵列----

$b=Get-ADUser -filter * -properties TelephoneNumber,SamAccountName

现在想象一下使用AccountName“ TEST”而不是“ test”登录终端服务器。

如果我这样做:

$c = $b[$b.SamAccountName.indexof("test")].TelephoneNumber

我没有电话号码。 这是由大小写引起的吧?实际上,如果我在搜索命令中键入“ TEST”,我会得到正确的数字。

是否有任何简单的方法来避免此问题并使索引的搜索不区分大小写? 我已经读过有关使用此方法[StringComparison]"CurrentCultureIgnoreCase"的信息,但它似乎不适用于数组。

谢谢。

1 个答案:

答案 0 :(得分:0)

由于$ b是Object []类型,因此您可能想要执行Where-Object。

$b | Where-Object -FilterScript {$_.Samaccountname -like '*Smith*'} | Select-Object -ExpandProperty 'telephoneNumber'

也就是说,如果将Powershell中的数组转换为[Collections.Generic.List [Object]]类型,则可以不区分大小写地对其进行索引。

$b = [Collections.Generic.List[Object]]$b
$b.FindIndex( {$args[0].sAMAccountName -eq 'test'} )

请注意,在AD中提取每个用户对象并使用where-object或index匹配进行过滤可能非常慢。您可以改为根据需要Get-ADUser或使用过滤器仅提取$ a中返回的用户来提取所有ADuser。

如果您坚持一次拉动所有ADUser的位置,请考虑一次遍历列表以进行哈希查找,以便轻松索引哈希值。

#Create account lookup hash
$accountlookup = @{}
foreach ($element in $accounts) {
  $accountlookup[$element.SamAccountName] = $element 
}

希望有帮助!