Powershell 无法将对象转换为哈希表
我有一个如下所示的哈希表:Powershell 无法将对象转换为哈希表,powershell,Powershell,我有一个如下所示的哈希表: $hashtable = @{ "fruit" = "apple" "vegetable" = "carrot" "foo" = "bar" "test01" = "test" "test02" = "test" "test03" = "test" "test04" = "test" } 现在我想删除像“Test”这样的条目,并创建一个新的哈希表: [hashtable]$newHashTable = $has
$hashtable = @{
"fruit" = "apple"
"vegetable" = "carrot"
"foo" = "bar"
"test01" = "test"
"test02" = "test"
"test03" = "test"
"test04" = "test"
}
现在我想删除像“Test”这样的条目,并创建一个新的哈希表:
[hashtable]$newHashTable = $hashtable.GetEnumerator() | `
Where-Object {$_.Name -notlike "test*"}
$hashtable = @{
"fruit" = "apple"
"vegetable" = "carrot"
"foo" = "bar"
"test01" = "test"
"test02" = "test"
"test03" = "test"
"test04" = "test"
}
$newHashtable = $hashtable.Clone()
$RemoveKeys = $newHashtable.keys | Where-Object { $_ -like 'test*' }
ForEach ($Key in $RemoveKeys) { $newHashtable.Remove($Key)}
这返回错误:无法将类型为“System.Object[]”的“System.Object[]”值转换为类型为“System.Collections.Hashtable”。
如何从过滤后的输出中创建新的哈希表?可能有一种更聪明的方法,但以下方法可行:
$newhashtable = @{}
$hashtable.GetEnumerator() | Where-Object {$_.Name -notlike "test*"} | ForEach-Object { $newhashtable[$_.name] = $_.value }
您可以看到,$newhashtable
被保留为hasttable:
PS> $newhashtable.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
您可以使用
Remove
方法获得要从哈希表中删除的键的列表:
[hashtable]$newHashTable = $hashtable.GetEnumerator() | `
Where-Object {$_.Name -notlike "test*"}
$hashtable = @{
"fruit" = "apple"
"vegetable" = "carrot"
"foo" = "bar"
"test01" = "test"
"test02" = "test"
"test03" = "test"
"test04" = "test"
}
$newHashtable = $hashtable.Clone()
$RemoveKeys = $newHashtable.keys | Where-Object { $_ -like 'test*' }
ForEach ($Key in $RemoveKeys) { $newHashtable.Remove($Key)}
请注意,如果要创建要修改的哈希表副本,需要使用Clone()
,就像使用=
创建引用一样,原始的$hashtable
对象也会被修改一样