【发布时间】:2017-08-30 17:12:39
【问题描述】:
我正在尝试搜索包含作为键的主机名和作为值的应用程序的哈希表。我正在寻找不包含特定值 AKA 应用程序的主机名(键)。但是,我的代码似乎无法正常工作,因为我总是收到所有的密钥/主机名。
foreach ($global:computer in $global:hash.keys){
if ($global:hash.$global:computer.values -notcontains 'SnagIt'){
$global:computer
}
}
示例数据:
键、值
Host1:FireFox,Chrome,IE
Host2:Snagit、FireFox、Chrome、IE
Host3:Chrome,IE
$global:hash.$global:computer: 的示例值输出:
{Snagit、FireFox、Chrome、IE...}
哈希表构建代码:
$global:Csv = Import-Csv -LiteralPath $global:ConvertedSNWReport
[HashTable]$global:Hash=@{}
For ($i = 0; $i -lt ($global:Csv."Computer name").Count; $i++)
{
If ($global:Hash.ContainsKey($global:Csv[$i].'Computer name'))
{
$global:Hash.($global:Csv[$i].'Computer name').Application += $global:Csv[$i].Application
Continue
}
$global:Hash.($global:Csv[$i].'Computer name') = @{
Application = @($global:Csv[$i].Application)
}
}
【问题讨论】:
-
删除
.values -
这似乎对我不起作用。
-
我不认为你的哈希表看起来像你想象的那样。索引运算符 (
[]) 属于列表变量之后,而不是属性之后,例如$global:Csv[$i].'Computer name'. -
我更改了它,但据我所知,它似乎没有任何区别。
-
啊,我明白了。您需要使用
$Hash.Computer.Application来获取该 PC 的程序数组。
标签: powershell hashtable