powershell - 删除空键 powershell

标签 powershell hash key

我正在尝试使用以下代码从我的哈希中删除所有为空的键:

foreach ($key in $OUHash.Keys){
    if ($($OUHash.Item($key)) -eq $NULL) {
        $OUHash.Remove($key)
    }
}

这会删除一个空键,但不是全部,它还会给我这个错误消息:

Collection was modified; enumeration operation may not execute.
At C:\AD\Shadow group Sync.ps1:31 char:10
+ foreach ($key in $Hash.Keys){
+          ~~~~
    + CategoryInfo          : OperationStopped: (:) [], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException

最佳答案

虽然 Martin 提供的解决方案确实成功地过滤掉了具有空值的项目,但它返回一个 Object 而不是 Hashtable(如果您使用了 [ordered] 属性,则返回 OrderedDictionary)。

尽管可以通过更改 Where-Object(别名 ?)的条件以仅返回具有空值的项目和将生成的对象(因此是括号)通过管道传输到 ForEach-Object 函数(别名 %):

($OuHash.GetEnumerator() | ? { -not $_.Value }) | % { $OuHash.Remove($_.Name) }

另一种非常相似的方法是获取数组对象中的所有哈希表键并将其通过管道传递给 ForEach-Object:

@($OuHash.keys) | % { 
    if (-not $OuHash[$_]) { $OuHash.Remove($_) } 
}

关于powershell - 删除空键 powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35845813/

相关文章:

hash - 为什么将 f64 转换为 u64 然后再转换回 f64 会导致不同的值?

javascript - jQuery 从索引获取关联数组键

c# - 使用 ProjectItems.item

powershell - 如何在 Powershell 中处理包含括号的变量

powershell - 将 ConvertFrom-SecureString 与 Key 一起使用时出现异常

string - PowerShell 字符串连接在函数内部和外部的行为不同

javascript - 散列映射要按时间范围作为键的对象的最有效方法?

iphone - 如何在 iOS 上创建文件的哈希值?

c# - 在按键时激活未聚焦的 C# 程序(例如 F1 将标签设置为 "Hello World")

python:检查重复值上的字典键并分配给新字典