Sam*_*abu 15 powershell powershell-2.0
我有一个哈希表,根据值使用Keys.
对于前者
$ComponentTobeBuild=@{"ComponentNameX"="True";
"ComponentNameXyz"="False";
"SomeComponent"="False"}
Run Code Online (Sandbox Code Playgroud)
我想得到值为True的键.(我会将密钥传递给其他一些脚本作为参数).
我是这样尝试的,但我认为我错过了一些因为它没有列出键.
$($ComponentToBuild.Keys) | Where-Object { $_.Value -eq "True" }
Run Code Online (Sandbox Code Playgroud)
如何获得表示为True的组件名称?此外,我想知道哈希表是否是这种工作的明智选择.因为我认为哈希表主要用于处理值.
Dav*_*ant 19
$ComponentTobeBuild.GetEnumerator() | ? { $_.Value -eq "True" }
Run Code Online (Sandbox Code Playgroud)
jus*_*inf 10
嗨这应该适合你想要的.
$ComponentTobeBuild=@{"ComponentNameX"="Test";
"ComponentNameXyz"="False";
"SomeComponent"="False"}
Foreach ($Key in ($ComponentTobeBuild.GetEnumerator() | Where-Object {$_.Value -eq "Test"}))
{$Key.name}
Run Code Online (Sandbox Code Playgroud)
小智 9
我知道这是旧的,但我在寻找其他问题时看到了这一点,并想知道为什么你要打扰调查员.只需用真实语言构建完全相同的代码:
给我所有键,值为'True'.
$ComponentTobeBuild.Keys | ? { $ComponentTobeBuild[$_] -eq 'True' }
Run Code Online (Sandbox Code Playgroud)
为了保持一致性,@()即使只有一个或没有结果,我也会将其封装成一个数组.
至于提问者的解决方案,问题是它$_是一个字符串,.Value而不是密钥的值.它根本不存在于String中.您必须使用$_Key 获取哈希表的值才能进行比较.
在PowerShell中过滤Hashtables的问题是您无法迭代键值对.
假设你有一些收藏:
$collection = @{
a = 'A';
b = 'B';
c = 'C';
d = 'D';
e = 'E';
...
}
Run Code Online (Sandbox Code Playgroud)
你希望能够使用
$results = $collection | Where-Object { $_.Key -in ('a', 'b', 'd') }
Run Code Online (Sandbox Code Playgroud)
在PowerShell中,但这是不可能的.
因此,您可以回退使用枚举器:
$results = $collection.GetEnumerator() | Where-Object { $_.Key -in ('a', 'b', 'd') }
$results
Name Value
---- -----
d D
b B
a A
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65014 次 |
| 最近记录: |