在PowerShell中,是否可以使IndexOf不区分大小写?

3

我需要搜索一个由终端服务器查询会话命令创建的数组中的索引,涉及it技术。

以下是有问题的脚本:

# Array of logged users in terminal servers 
$a=Get-RDUsersession -CollectionName "BLABLA" -ConnectionBroker BLABLA.BLA.BL

# Array of all users with two columns from active directory
$b=Get-ADUser -filter * -properties TelephoneNumber,SamAccountName

现在想象一下,使用帐户名TEST而不是test登录终端服务器。

如果我这样做:

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

那么我就得不到电话号码了。

我想这是因为大小写敏感导致的,对吗?如果我在搜索命令中键入TEST,我会得到正确的号码。

有没有简单的方法来解决这个问题并使索引搜索不区分大小写? 我已经阅读了使用[StringComparison]"CurrentCultureIgnoreCase"方法的资料,但它似乎无法在数组中正常工作。

谢谢。


您可能也会对以下内容感兴趣:https://dev59.com/C2ox5IYBdhLWcg3w1X2- - lit
2个回答

4
由于$b是Object[]类型,因此您可能希望使用Where-Object。"最初的回答"
$b | Where-Object -FilterScript {$_.Samaccountname -like '*Smith*'} | Select-Object -ExpandProperty 'telephoneNumber'

话虽如此,在Powershell中,如果将数组转换为[集合.泛型.列表[对象]]类型,则可以对其进行不区分大小写的索引。

最初的回答:An array in Powershell can be indexed case-insensitively if it is converted to a [Collections.Generic.List[Object]] type.

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

请注意,从AD中拉取每个用户对象并使用where-object或索引匹配进行过滤可能非常缓慢。您可以根据需要使用Get-ADUser或使用仅拉取$a返回的用户的筛选器来获取所有AD用户。
如果您坚持要在一个地方一次性获取所有ADUsers,请考虑循环遍历列表以进行哈希查找,以便轻松索引哈希值。"最初的回答"
#Create account lookup hash
$accountlookup = @{}
foreach ($element in $accounts) {
  $accountlookup[$element.SamAccountName] = $element 
}

最初的回答:希望对您有所帮助!

1

在indexOf之前尝试在字符串上使用.ToLower()方法

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接