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

PowerShell Foreach循环中If语句语法问题求助

PowerShell循环设置注册表值问题解决

问题分析

你当前代码存在三个核心问题:

  • 初始代码硬写了server1,未使用循环变量$item,导致无论哪个服务器连通,都会设置成固定地址
  • 第二个代码的if判断逻辑错误,误将循环变量$_与字符串'True'比较,实际应判断端口测试结果$Result;同时代码未闭合},存在语法缺失
  • 第三个代码的字符串拼接错误,单引号包裹的$_不会被PowerShell解析为变量,无法替换成当前服务器名

修正后的完整代码

$list = @("server1", "server2", "server3")  # 服务器列表

foreach ($item in $list) {
    # 测试当前服务器的1234端口连通性
    $result = Test-NetConnection $item -Port 1234 | Select-Object -ExpandProperty TcpTestSucceeded

    if ($result) {
        # 拼接对应服务器的地址,设置注册表值
        $targetUrl = "http://$item`:1234/bfmirror/downloads/"
        Set-ItemProperty -Path HKLM:\SOFTWARE\WOW6432Node\Client\__site1 -Name Value -Value $targetUrl
        # 可选:输出日志确认操作
        Write-Host "已将注册表值设置为:$targetUrl"
        # 如果找到第一个连通的服务器就停止循环,取消下面的注释
        # break
    }
}

关键修正点说明

  • 变量替换正确写法:使用双引号包裹字符串,变量$item会被自动解析;注意端口号前的冒号需要加反引号`转义,避免被PowerShell当成变量的一部分
  • 条件判断简化:PowerShell中布尔值$true可以直接用if ($result)判断,无需写-eq $true
  • 代码完整性:确保所有代码块的{}都正确闭合,避免语法错误

如果希望找到第一个连通的服务器就停止循环,取消代码中break的注释即可。

内容的提问来源于stack exchange,提问作者Alvin Loo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:45:09