gpt4 book ai didi

powershell hashtable.containsValue 返回false,但循环值得到匹配?

转载 作者:行者123 更新时间:2023-12-03 01:23:21 24 4
gpt4 key购买 nike

因此,我试图在 powershell 中创建一个函数,该函数将用户所属的所有组嵌套在广告中。我将这些组映射到一个哈希表中,使用 AD 中的通用名称作为值。

这很顺利,该函数返回一个包含我所有组的哈希表。但是当我使用它查询它时$group = "IT-Avd"
$groups.ContainsValue($group)

它返回 false ——但是当我遍历这些值并进行相同的比较时,我确实得到了匹配!这是怎么回事??

function get-groupmemberships ($workDN){
$ADobj = [ADSI]"LDAP://$workDN"
foreach ($currGroup in $ADobj.memberOf.Value){
if (!($currGroup -eq $null)){
#Write-Host "displayN:" $grpDetails.Name " | dn:" $currGroup " | "
if(!$groups.ContainsKey($currGroup)){
$grpDetails = [ADSI]"LDAP://$currGroup"
$groups.Add($currGroup,$grpDetails.Name)
#Write-Host "Adding new pair, " $grpDetails.Name " | " $currGroup
get-groupmembership $currGroup
}
}
}
return $groups
}

function get-DN ($SAMToFetch){
$strFilter = "(samAccountName=$SAMToFetch)"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter
$objPath = $objSearcher.FindOne()
if($objPath){
$objFound = $objPath.GetDirectoryEntry()
$objDN = $objFound.distinguishedName
return $objDN}
else{
return $false
}
}

$groups = @{}
write-host "Start search:",(Get-Date -Format T),",",(get-Date -format fff)
$group = "IT-Avd"
$memberOf = get-GroupMemberships (get-DN jslonsetteig)
$groups.ContainsValue($group)
foreach( $val in $groups.Values){if ($val -eq $group){Write-Host $val "<--It does seem to be there..."}}

write-host "End search:",(Get-Date -Format T),",",(get-Date -format fff)`

最佳答案

使用 ContainsValue正在使用哈希表的线性搜索,因此您失去了哈希表通常提供的 O(1) 搜索的好处。您可以尝试创建另一个以公用名作为键的哈希表。然后你会使用 ContainsKey或者只是尝试按名称访问并查看结果是否不是 $null。

顺便说一句,差异的一个原因是当你通过 $groupContainsValue , PowerShell 在类型强制方面没有做任何事情,因为该方法参数是类型 object .然而,当它执行 $val -eq $group , PowerShell 可能会做很多工作来强制 $group$val的类型。现在虽然看起来 $group已经是一个字符串,这里可能会出现一些 psobject 包装错误(不过只是猜测)。如果你尝试 $groups.ContainsValue('IT-Avd') 会发生什么?

您还可以检查存储在哈希表中的类型,例如:

$groups.Values | Get-Member

关于powershell hashtable.containsValue 返回false,但循环值得到匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5072917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com