You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:15:03