jar*_*low 1 powershell hash key
我正在尝试使用以下代码从我的哈希中删除所有为空的键:
foreach ($key in $OUHash.Keys){
if ($($OUHash.Item($key)) -eq $NULL) {
$OUHash.Remove($key)
}
}
Run Code Online (Sandbox Code Playgroud)
这会删除一个空键,但不是全部,它还给了我以下错误消息:
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
Run Code Online (Sandbox Code Playgroud)
您可以使用该GetEnumerator()方法使用Where-Object(别名?)过滤条目 :
$OuHash.GetEnumerator() | ? Value
Run Code Online (Sandbox Code Playgroud)
虽然 Martin 提供的解决方案确实成功过滤掉了具有空值的项目,但它返回一个 Object 而不是 Hashtable (或 OrderedDictionary 如果您使用[ordered]属性)。
虽然可以通过更改Where-Object(别名?)的条件以仅返回具有空值的项目并将结果对象(因此是括号)传递到ForEach-Object函数(别名%)中来从哈希表本身中删除不必要的项目:
($OuHash.GetEnumerator() | ? { -not $_.Value }) | % { $OuHash.Remove($_.Name) }
Run Code Online (Sandbox Code Playgroud)
另一种非常相似的方法是获取数组 Object 中的所有哈希表键并将其通过管道传递给ForEach-Object:
@($OuHash.keys) | % {
if (-not $OuHash[$_]) { $OuHash.Remove($_) }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2917 次 |
| 最近记录: |