PowerShell比较字典的值

时间:2016-03-13 15:41:39

标签: powershell dictionary

我需要比较两个词典。这背后的逻辑是,如果在第一个字典的值之间找到第二个字典中的键,则第一个字典中的值需要被第二个字典中的值替换。

所以在这个例子中,值' MemberOf'在FIRST字典中,应该用SECOND字典中的键值替换。我想改变这个值,而不是创建一个新的字典/列表。

解决方案应该能够在PowerShell v2中运行。

$base_properties = `
    @{
        'user' = `
            ('CN', 'MemberOf')
    }

$expression_properties = `
    @{
        'MemberOf' = @{name='MemberOf';expression={$_.MemberOf -join ';'}}
    }

最终解决方案:

foreach ($prop_key in $base_properties.Keys) {
    foreach ($prop_name in $base_properties[$prop_key]) {
        if ($expression_properties.ContainsKey($prop_name)) {
            $index = $base_properties[$prop_key].IndexOf($prop_name)
            $base_properties[$prop_key][$index] = $expression_properties[$prop_name]
        }
    }
}

1 个答案:

答案 0 :(得分:2)

只需使用Keys循环遍历第一个字典的foreach,然后使用ContainsKey()方法在第二个字典中查找值名称:

# New hashtable to hold the original and substituted expressions
$modified_properties = @{}

# iterate over the base properties
foreach($prop_key in $base_properties.Keys)
{
    # iterate over each property in the entry and assign the result to the new hashtable
    $modified_properties[$prop_key] = foreach($prop_name in $base_properties[$prop_key]){
        if($expression_properties.ContainsKey($prop_name))
        {
            # second dictionary contains an expression for the current name
            $expression_properties[$prop_name]
        }
        else
        {
            # no expression found, use original string
            $prop_name
        }
    }    
}