假设我有一个2级嵌套哈希表,如下所示:
$programs = @{
program1 = @{
DisplayName = "DisplayName1"
Program = "C:\program1.exe"
}
program2 = @{
DisplayName = "DisplayName2"
Program = "C:\program2.exe"
}
}
现在,不需要像下面这样明确地提到每个属性名称:
$programs.program1['program']
我想像这样遍历哈希表:
foreach ($Name in $programs) {
$r = Get-NetFirewallRule -DisplayName $programs.Keys['DisplayName'] 2> $null;
if (-NOT $r) {
New-NetFirewallRule -DisplayName $programs.Keys['DisplayName'] -Program $program.Keys['Program']
}
}
但我不断收到如下错误:
Cannot validate argument on parameter 'DisplayName'. The argument is null. Provide a valid value for the argument, and then try running the command again.
InvalidOperation: untitled:Untitled-2:29:13
我做错了什么?
什么是正确的方法来访问嵌套的哈希表属性,而不需要明确地提到它们的名字?2我想知道它的语法,这样如果我有一个3或4层嵌套的哈希表,我就可以访问它们而不需要指定它们的确切名字。
即使我们忽略foreach循环,如何仅列出所有“DisplayName”属性?如果“DisplayName”属性位于4层嵌套哈希表中,并且我们希望在PowerShell控制台中列出它们,而不指定它前面的项的确切名称,该怎么办?
1条答案
按热度按时间sxissh061#
由于Santiago Squarzon和zett42的注解,下面是访问深度嵌套哈希表属性的语法。
我发现它工作得很好。
另外,在reading foreach之后,正如注解中提到的,我发现上面的代码是不正确的,正确的方法是:
在foreach循环中,我们必须使用在括号中创建的变量。我的错误是我再次使用了集合本身。