如何编写脚本实现备份完成且指定文件不存在时关闭多台机器?
可以实现,以下是批处理和PowerShell两种脚本方案
批处理脚本方案
适用于习惯CMD环境的场景,逻辑是先检查指定文件是否不存在,再批量触发远程关机:
@echo off :: 配置参数 set "TARGET_FILE=C:\your\actual\path\swmw.obj" set "MACHINES=PC-01 192.168.1.100 Server02" :: 替换为目标机器名/IP,空格分隔 :: 检查文件是否不存在 if not exist "%TARGET_FILE%" ( echo [INFO] 指定文件不存在,开始执行远程关机... for %%m in (%MACHINES%) do ( echo [PROCESS] 正在关闭 %%m shutdown /s /m \\%%m /t 60 /c "备份完成且指定文件已清理,自动关机" /f ) ) else ( echo [INFO] 指定文件仍存在,跳过关机操作 )
关键说明
- 替换
TARGET_FILE为实际的文件路径,MACHINES为需要关闭的机器列表 shutdown参数解释:/s执行关机,/m \\机器名指定远程目标,/t 60设置60秒延迟(方便紧急取消),/f强制关闭未响应程序,/c添加关机提示信息- 执行前提:当前登录用户在目标机器上拥有管理员权限,且目标机器已启用远程关机服务
PowerShell脚本方案
功能更灵活,适合复杂场景的扩展:
# 配置参数 $targetFile = "C:\your\actual\path\swmw.obj" $machines = @("PC-01", "192.168.1.100", "Server02") # 替换为目标机器名/IP # 检查文件是否不存在 if (-not (Test-Path -Path $targetFile)) { Write-Host "[INFO] 指定文件不存在,开始执行远程关机..." -ForegroundColor Cyan foreach ($machine in $machines) { Write-Host "[PROCESS] 正在关闭 $machine" -ForegroundColor Yellow Stop-Computer -ComputerName $machine -Force -Comment "备份完成且指定文件已清理,自动关机" -Delay 60 } } else { Write-Host "[INFO] 指定文件仍存在,跳过关机操作" -ForegroundColor Red }
关键说明
Test-Path用于检测文件存在性,-not取反实现“文件不存在”的判断Stop-Computer是PowerShell原生关机命令,-Force强制关闭程序,-Delay设置关机延迟,-Comment记录关机原因- 执行前提:当前用户拥有目标机器的管理员权限,目标机器已启用PowerShell远程(可提前执行
Enable-PSRemoting -Force配置)
额外注意事项
- 请将备份程序的“完成后关机”选项替换为“完成后调用此脚本”,确保脚本在备份成功后触发
- 测试阶段可将关机命令替换为提示语句(比如批处理里的
echo 模拟关闭 %%m,PowerShell里的Write-Host 模拟关闭 $machine),验证逻辑正确性 - 远程关机需要目标机器防火墙允许RPC相关端口通信,确保网络连通正常
内容的提问来源于stack exchange,提问作者PerserPolis
相关产品推荐
相关产品推荐

