是否有可能在PowerShell中具有的IndexOf INCASESENSITIVE?

问题描述 投票:2回答:1

我有一个问题,搜索用查询会话在终端服务器的命令由数组的索引。

这是有问题的脚本:

---中的终端服务器LOGGED用户ARRAY ---

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

---所有用户的有两列从Active Directory ARRAY ----

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

现在,使用帐户名“TEST”,而不是“测试”想象在终端服务器日志记录。

如果我做:

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

我不明白的电话号码。这是区分大小写的权利造成的?事实上,如果我在搜索命令中键入“TEST”我得到正确的号码。

有没有简单的方法来避免这个问题,使搜索索引不区分大小写的?我读过有关使用此方法[StringComparison]"CurrentCultureIgnoreCase"但似乎不是阵列工作。

谢谢。

arrays powershell indexof case-sensitive case-insensitive
1个回答
0
投票

由于$ B是一个Object []类型,那么你可能会想要做一个位置对象。

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

这就是说,在Powershell的数组可以被索引不区分大小写,如果它被转换成[Collections.Generic.List [对象]]类型。

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

请注意,在拉出AD每一个用户对象并使用其中对象或折射率匹配滤波可能会非常缓慢。您可以根据需要,而不是获取-ADUser便有或使用过滤器只拉了回来的用户在$一个把所有ADusers。

如果你坚持具有一张拉在一个地方所有ADUsers,考虑遍历列表一次,以哈希查找,所以你可以很容易地指数的哈希值。

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

希望帮助!

© www.soinside.com 2019 - 2024. All rights reserved.