Powershell密钥/值对匹配问题
我正在检查powershell中的键值对。我尝试过各种方法,但没有一种像我预期的那样有效 在查找Powershell密钥/值对匹配问题,powershell,Powershell,我正在检查powershell中的键值对。我尝试过各种方法,但没有一种像我预期的那样有效 在查找$checked\u group时,我不断得到True响应,即使我可以在写入中看到KeyValue对 if(!($checked_组[$varDomain]-eq“$varName”) 即使keyValue对在$checked\u groups字典中,上述语句也是True。你以前见过这个吗 我无法使用下面的代码片段重现问题,尽管它的逻辑与我的实时代码几乎相同。值的来源是不同的,因为我在实时代码中动态地
$checked\u group
时,我不断得到True
响应,即使我可以在写入中看到KeyValue对
if(!($checked_组[$varDomain]-eq“$varName”)
即使keyValue对在$checked\u groups
字典中,上述语句也是True
。你以前见过这个吗
我无法使用下面的代码片段重现问题,尽管它的逻辑与我的实时代码几乎相同。值的来源是不同的,因为我在实时代码中动态地收集这些值。在循环中对它们进行迭代,我的$checked_groups=@{}
在这个循环之外,以在所有迭代中维护dict键/对,并且我可以确认它们在任何迭代中都被保留
我不明白为什么这个语句总是解析为True
:(
用
$foo-ne$bar
替换!()
,并将值赋给中间变量,以查看在哪一步出错。您的意思是创建一些新变量并创建一个带有($checked\u groups[$varDomain]-neq“$varName”)的语句)
?好的,我想。。。我已经解决了。出于某种原因,这个$checked_groups+=@{$varDomain=$varName}
似乎是喜怒无常的。我将其更改为.Add()
,它似乎正在运行。收集更多数据后将再次更新。不,类似于$foo=$checked\u groups[$varDomain]
和if($foo-ne$varName
),因此您可以通过打印或使用ISE对变量值进行双重检查。在打印语句周围添加字符有助于捕获额外的空白,如在写主机中“foo is/$foo/
我建议您更改访问和更新字典的方式。使用$dictionary[“keyExistsOrNot”]=“value”
。如果存在,它将更新值,否则将创建新值。您不必遍历所有If-else语句
$checked_groups = @{ }
$varDomain = "example.com"
$varName = "Administrator"
if (!($checked_groups[$varDomain] -eq "$varName"))
{
write-host 'Not In There'
}
foreach ($thing in $checked_groups)
{
Write-Host ($thing | Out-String)
}
$checked_groups += @{$varDomain = $varName}
if (($checked_groups[$varDomain] -eq "$varName"))
{
write-host 'In There'
foreach ($thing in $checked_groups)
{
Write-Host ($thing | Out-String)
}
}