- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我试图在 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。
顺便说一句,差异的一个原因是当你通过 $group
至ContainsValue
, 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/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!