PowerShell遍历数组执行ForEach操作时出现空值问题求助
错误原因
- 核心问题:你仅在
Write-Host语句中调用了virtualM1/virtualM2等函数输出内容,但从未把函数的返回值赋值给$vm01/$vm02等变量,这些变量本身是空值,所以无论怎么给$array赋值,数组元素都是空,遍历自然返回空。 - 条件判断重复:第一个
if分支和第二个elseif分支的判断条件都是$number -eq "3",如果$number值为3,只会走第一个if分支,后面包含3个vm的elseif ($number -eq "3")分支永远不会被触发。 - 缺少兜底分支:如果
$number的值没有匹配到你写的2/3/4任意一个条件,$array变量根本不会被初始化,后续遍历操作自然没有任何输出。
修正示例代码
# 先将函数返回值赋值给对应变量 $vm01 = virtualM1 $vm02 = virtualM2 $vm03 = virtualM3 $vm04 = virtualM4 if ($number -eq "1") { Write-Host "vm01 is $vm01" $array = $vm01 } elseif ($number -eq "2") { Write-Host "vm01 is $vm01" Write-Host "vm02 is $vm02" $array = $vm01,$vm02 } elseif ($number -eq "3") { Write-Host "vm01 is $vm01" Write-Host "vm02 is $vm02" Write-Host "vm03 is $vm03" $array = $vm01,$vm02,$vm03 } elseif ($number -eq "4") { Write-Host "vm01 is $vm01" Write-Host "vm02 is $vm02" Write-Host "vm03 is $vm03" Write-Host "vm04 is $vm04" $array = $vm01,$vm02,$vm03,$vm04 } else { # 兜底分支,避免$array未定义 Write-Host "输入的number值不在1-4范围内" $array = @() } $array | ForEach-Object {$_}
注:如果你的virtualM系列函数本身没有返回值、仅直接打印内容,需要先调整函数逻辑,让它把结果返回才能完成变量赋值。
内容的提问来源于stack exchange,提问作者Norrin Rad
相关产品推荐
相关产品推荐

