【问题标题】:How to get array of object's keys and values in powershell script?如何在powershell脚本中获取对象的键和值数组?
【发布时间】:2026-01-12 17:20:03
【问题描述】:

我有一个以下格式的对象数组

$test = @(2 :{1,3,5}, 3 : {2,4,6})

我想从 $test 数组中提取键和值的对象。

这是我执行上述任务的 powershell 脚本,

$testnumbers = @(2,3)
$testStores = @{}
$testInfo = $null
foreach ($tn in $testnumbers) {
    $testInfo = @{}
    for($i=0;$i -lt $tn;$i = $i+1) {
    $testPrompt = Read-Host -Prompt "Assign the test numbers"
    $testInfo += $testPrompt
    }
$testInfoSet = {$tn = $testInfo}
$testInfoObj = New-Object psobject –Property $testInfoSet
$testStores += $testInfoObj
}

请提供解决方案,提前致谢!

【问题讨论】:

  • 您的 $test 值在语法上无效。您可能打算使用hashtable,它是用@{ ... } 创建的,而不是@(...)

标签: powershell powershell-2.0 powershell-3.0 powercli


【解决方案1】:

我想你可能想像这样设置你的哈希表......

$test = @{2 = (1,3,5); 3 = (2,4,6)}

foreach($item in $test.GetEnumerator()){
    echo $item.key
    echo $item.value
}

【讨论】:

  • 顺便说一句:虽然Write-Output(其内置别名为echo)是输出数据的正确工具,但您通常不需要显式使用它,因为 PowerShell 隐式输出(到成功数据流)任何未被捕获或重定向的表达式或命令;例如,只是 $foo 本身Write-Output $foo / echo $foo 具有相同的效果。虽然使用 Write-Output 并没有什么坏处,但请考虑展示 PowerShell 的隐式输出功能(可能带有解释性注释),以推广 PowerShell 惯用的解决方案。
  • 很高兴听到我们同意,但我建议您使用此信息更新您的答案,以使未来的读者受益。完成此操作后,您可以将我的第一个评论和此评论标记为“不再需要”(或 ping 我,以便我自己删除它们)。
【解决方案2】:

我同意@dno 和 cmets。 我已在输出中添加了此内容,因此您可以看到它按说明工作。

$test = @{2 = (1,3,5);3 = (2,4,6);}

foreach($item in $test.GetEnumerator()){
    $key = $item.key
    $value = $item.value
    Write-Output $key $value
}

【讨论】:

    最近更新 更多