我有一个问题,搜索用查询会话在终端服务器的命令由数组的索引。
这是有问题的脚本:
---中的终端服务器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"
但似乎不是阵列工作。
谢谢。
由于$ 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
}
希望帮助!