You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Ping超时触发IF函数重启PowerShell脚本以切换目标设备

实现自动检测设备离线后重启脚本的方案

当然可以实现这个需求!我们可以用PowerShell的循环逻辑结合设备在线状态检测,让脚本在探测到目标设备离线后自动回到初始步骤,方便你无缝切换到下一台设备操作。下面是具体的实现方案和脚本示例:

完整脚本示例

while ($true) {
    # 提示输入目标设备信息
    $targetDevice = Read-Host "请输入目标设备的名称或IP地址"
    
    # 执行Defender病毒特征库更新
    Write-Host "`n正在更新 [$targetDevice] 的Defender病毒特征库..."
    try {
        Invoke-Command -ComputerName $targetDevice -ScriptBlock { Update-MpSignature } -ErrorAction Stop
        Write-Host "✅ 特征库更新完成!"
    }
    catch {
        Write-Host "❌ 特征库更新失败:$_"
        $continueChoice = Read-Host "是否继续执行离线扫描?(Y/N)"
        if ($continueChoice -notmatch '^[Yy]$') {
            Write-Host "跳过当前设备,准备下一台..."
            Write-Host "`n------------------------`n"
            continue
        }
    }

    # 启动Defender离线扫描
    Write-Host "`n正在启动 [$targetDevice] 的Defender离线扫描..."
    try {
        Invoke-Command -ComputerName $targetDevice -ScriptBlock { Start-MpWDOScan } -ErrorAction Stop
        Write-Host "🔍 离线扫描已启动,开始监测设备离线状态..."
    }
    catch {
        Write-Host "❌ 启动离线扫描失败:$_"
        Write-Host "`n------------------------`n"
        continue
    }

    # 持续监测设备是否离线
    $isOffline = $false
    while (-not $isOffline) {
        # 使用Test-Connection替代ping,更适合脚本化检测
        $pingSuccess = Test-Connection -ComputerName $targetDevice -Count 1 -TimeoutSeconds 5 -ErrorAction SilentlyContinue
        if (-not $pingSuccess) {
            Write-Host "✅ 检测到 [$targetDevice] 已离线,自动准备下一台设备操作..."
            $isOffline = $true
        }
        else {
            Write-Host "[$targetDevice] 仍在线,10秒后再次检测..."
            Start-Sleep -Seconds 10
        }
    }

    # 分隔线,区分不同设备的操作流程
    Write-Host "`n------------------------`n"
}

关键功能说明

  • 无限循环逻辑:外层的while ($true)让脚本一直运行,直到你手动按Ctrl+C终止,无需每次手动重启。
  • 替代ping的Test-Connection:这个PowerShell cmdlet比原生ping命令更适合脚本场景,能直接返回检测结果,方便判断设备是否在线。
  • 错误处理机制:用try/catch包裹远程命令,避免因设备不可达、权限不足等问题导致脚本崩溃,同时给你选择是否继续后续操作的空间。
  • 自动切换设备:一旦检测到目标设备离线,脚本会自动跳出监测循环,回到开头提示输入下一台设备的信息,完全无需手动重启脚本。

注意事项

  1. 确保你的执行账户拥有目标设备的管理员权限,因为Update-MpSignatureStart-MpWDOScan需要管理员权限才能远程执行。
  2. 可以根据实际需求调整监测间隔(Start-Sleep -Seconds 10)和ping超时时间(TimeoutSeconds 5)。
  3. 如果需要批量处理多台设备,也可以把设备列表提前存入数组,让脚本自动遍历,比如:
    $deviceList = @("PC-001", "192.168.2.30", "Server-01")
    foreach ($device in $deviceList) {
        # 把原脚本中$targetDevice替换为$device,即可自动批量执行
    }
    

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

火山引擎 最新活动