如何编写带日志记录功能的多桌面远程重启PowerShell脚本
PowerShell 多计算机远程重启脚本实现方案
1. 完整可运行脚本
# 配置项,可根据实际需求修改 $logDirectory = "C:\scripts\transcripts\" $targetComputers = @( "blahblah-mi", "PC-002", "PC-003" # 按格式添加更多需要重启的计算机名即可 ) # 按日期生成日志文件名 $logFileName = "远程重启任务_$(Get-Date -Format 'yyyyMMdd_HHmmss').log" $logFullPath = Join-Path $logDirectory $logFileName # 自动创建日志目录(不存在时) if (-not (Test-Path $logDirectory)) { New-Item -ItemType Directory -Path $logDirectory -Force | Out-Null } # 写入日志头部信息 "=" * 80 | Out-File $logFullPath -Append "任务启动时间:$(Get-Date -Format 'yyyy年MM月dd日 HH:mm:ss')" | Out-File $logFullPath -Append "待重启计算机列表:$($targetComputers -join '、')" | Out-File $logFullPath -Append "=" * 80 | Out-File $logFullPath -Append "`n" | Out-File $logFullPath -Append # 遍历执行重启操作 foreach ($pc in $targetComputers) { $runTime = Get-Date -Format 'HH:mm:ss' "[$runTime] 开始处理计算机:$pc" | Out-File $logFullPath -Append "[$runTime] 执行命令:Restart-Computer -ComputerName $pc -Force" | Out-File $logFullPath -Append # 捕获执行错误 try { Restart-Computer -ComputerName $pc -Force -ErrorAction Stop "[$runTime] 执行结果:成功向 $pc 发送重启指令" | Out-File $logFullPath -Append } catch { "[$runTime] 执行结果:重启 $pc 失败,错误详情:$_" | Out-File $logFullPath -Append } "`n" | Out-File $logFullPath -Append } # 写入日志尾部信息 "=" * 80 | Out-File $logFullPath -Append "任务结束时间:$(Get-Date -Format 'yyyy年MM月dd日 HH:mm:ss')" | Out-File $logFullPath -Append "=" * 80 | Out-File $logFullPath -Append
2. 原有空白日志问题原因
- 你之前用
>重定向默认仅捕获成功输出流,远程操作的报错属于错误流,默认不会被重定向,因此得到空白文件 Start-Transcript默认在非交互式执行环境(比如任务计划触发)不会捕获全量输出,需要额外处理错误流才能完整记录
3. 每周日定时执行配置
通过Windows任务计划程序配置即可:
- 新建任务,触发器选择「每周」,勾选周日,设置你需要的执行时间
- 操作选择「启动程序」,程序路径填
powershell.exe,附加参数填-ExecutionPolicy Bypass -File "你保存脚本的完整绝对路径.ps1" - 安全选项选择拥有目标计算机管理员权限的账号运行,勾选「不管用户是否登录都要运行」
4. 前置依赖确认
- 执行脚本的账号需要拥有所有目标计算机的本地管理员权限
- 所有目标计算机需要开启WinRM服务,防火墙放通Windows远程管理(WinRM)入站规则
内容的提问来源于stack exchange,提问作者Hola_amigo06
相关产品推荐
相关产品推荐

