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

如何在PowerShell foreach循环中遇WinRM问题时跳过当前服务器?

PowerShell脚本优化:WinRM无法访问时跳过后续操作

原脚本从myservers.txt读取服务器列表,依次执行网络共享检查、C:\Temp目录检查/创建、安装包复制、远程脚本执行。需要实现:当遇到WinRM无法访问服务器的问题时,不执行Invoke-Command及后续操作,直接跳转到下一个服务器。

修改后的脚本

foreach ($server in (Get-Content .\myservers.txt)) {
    # 检查网络共享访问权限
    if (Test-Path "\\mynetshare\package"){
         Write-Host "[$server] 可访问网络共享" -ForegroundColor Green
    }
    else {
        Write-Host "[$server] 无法访问网络共享" -ForegroundColor Red
    }

    # 检查并创建C:\Temp目录
    if (Test-Path "\\$server\c$\Temp"){
         Write-Host "[$server] 已存在C:\Temp目录" -ForegroundColor Green
    }
    else {
        Write-Host "[$server] 不存在C:\Temp目录,正在创建..."
        try {
            New-Item -Type Directory "\\$server\c$\Temp" -Force -ErrorAction Stop
            Write-Host "[$server] C:\Temp目录创建成功" -ForegroundColor Green
        }
        catch {
            Write-Host "[$server] 创建C:\Temp目录失败:$($_.Exception.Message)" -ForegroundColor Red
            continue # 目录创建失败,后续操作无意义,直接跳下一个服务器
        }
    }

    # 复制安装包到目标服务器
    try {
        Copy-Item -Path "\\mynetshare\package\package.msi" -Destination "\\$server\C$\Temp" -Recurse -ErrorAction Stop
        Write-Host "[$server] 安装包复制成功" -ForegroundColor Green
    }
    catch {
        Write-Host "[$server] 安装包复制失败:$($_.Exception.Message)" -ForegroundColor Red
        continue # 复制失败,远程执行无法进行,跳下一个服务器
    }

    # 检查WinRM连通性并执行远程脚本
    try {
        # 提前验证WinRM是否可用
        Test-WSMan -ComputerName $server -ErrorAction Stop | Out-Null
        Write-Host "[$server] WinRM连通正常,开始执行远程脚本..." -ForegroundColor Green
        
        Invoke-Command -ComputerName $server -ScriptBlock {
            # 替换为你的实际远程执行逻辑
            Write-Host "远程脚本执行中..."
        } -ErrorAction Stop
        
        Write-Host "[$server] 远程脚本执行完成" -ForegroundColor Green
    }
    catch {
        Write-Host "[$server] WinRM访问失败或远程执行出错:$($_.Exception.Message)" -ForegroundColor Red
        continue # 跳转到下一个服务器
    }
}

关键改动说明

  • WinRM提前校验:使用Test-WSMan命令在执行远程脚本前验证服务器的WinRM连通性,一旦失败直接捕获异常并跳过后续操作
  • 异常捕获与跳转:给所有可能失败的操作(目录创建、文件复制、WinRM访问、远程执行)加上try/catch块,搭配continue关键字,失败时直接进入下一次循环,不执行后续步骤
  • 操作日志优化:所有输出增加[$server]前缀,清晰区分每个服务器的操作状态,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:10:48