PowerShell遍历哈希表执行Test-Connection无法输出对应服务器名如何解决
问题原因
- 哈希表遍历逻辑错误:PowerShell 中直接对哈希表对象执行foreach循环,不会遍历其中的键值对条目,需要调用
.GetEnumerator()方法才能获取每一组「服务器名(键)-IP地址(值)」的对应关系 - 字符串插值属性展开错误:双引号中直接写
$ip.keys不会被解析为访问对象属性,只会输出对象类型+属性名的组合,需要用$()子表达式包裹属性访问语句才能正确取值 - IP地址取值逻辑冗余:拿到单组键值对后,直接访问
.Value就能得到对应的IPAddress对象,无需额外嵌套取值
修改后完整代码
# 定义服务器名-IP对应哈希表 $server_map = @{ Server = [ipaddress] "192.168.1.1" sws = [ipaddress] "192.168.1.1" } # 遍历哈希表所有键值对 foreach ($entry in $server_map.GetEnumerator()) { $server_name = $entry.Key $server_ip = $entry.Value.ToString() if (-not (Test-Connection -IPAddress $server_ip -Quiet -Count 1)) { Write-Output "$server_name Is offline/unavailable, please troubleshoot connection, script is terminating" | Red } else { $ping = $true Write-Output "$server_name Is online/available" | Green } }
核心修改说明
- 将哈希表变量名从
$ip_array改为更符合语义的$server_map(可选,仅为可读性优化) - 遍历前调用
.GetEnumerator()获取键值对枚举 - 提前取出每一条目的服务器名
$entry.Key和IP字符串$entry.Value.ToString(),避免重复取值 - 字符串直接使用提前赋值的
$server_name变量,无需处理嵌套属性展开问题
内容的提问来源于stack exchange,提问作者user16881248
相关产品推荐
相关产品推荐

