必须启用PowerShell Remoting并配置信任主机,再用Invoke-Command或New-PSSession批量管理;启用需运行Enable-PSRemoting -Force(公用网络加-SkipNetworkProfileCheck),工作组环境须设TrustedHosts并重启WinRM。

要在Windows中批量对多台电脑执行服务查询、进程管理、注册表修改等操作,必须通过PowerShell Remoting建立可信通信通道并并发下发指令,不能依赖单机逐个连接或图形化远程桌面。
统一启用目标机的远程处理功能
这一步必须在每台待管理的服务器或工作站上单独执行,否则后续所有远程命令都会因连接拒绝而失败。
以管理员身份打开 PowerShell,运行:Enable-PSRemoting -Force;该命令会自动启动 WinRM 服务、配置监听器、开放防火墙端口 5985(HTTP)或 5986(HTTPS),并设置会话安全策略。
若目标机网络位置被设为“公用”,系统将报错中断;此时必须加参数绕过检查:Enable-PSRemoting -Force -SkipNetworkProfileCheck,否则无法继续。
验证是否生效:运行 winrm quickconfig,看到 “WinRM service is already running” 且无 WSManFault 提示即表示成功。
配置本地信任主机列表(工作组环境必需)
域环境中可跳过此步;但若所有机器都在工作组,本地计算机默认不信任任何非域目标,必须手动添加IP或主机名到白名单。
在你的管理机上以管理员身份运行 PowerShell,执行:Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.1.10,192.168.1.11,192.168.1.12" -Force。
注意:该命令会覆盖原有列表,如需追加,请先用 Get-Item WSMan:\localhost\Client\TrustedHosts 查看当前值,再用逗号拼接新地址;误删全部条目会导致已配置的远程连接全部失效。
执行后重启 WinRM 服务确保生效:Restart-Service WinRM。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
批量执行相同命令(推荐首选方法)
Invoke-Command 是最轻量、最高效的方式,适合一次性任务,比如查服务状态、重启进程、清日志等。
第一步:准备服务器列表。新建文本文件 servers.txt,每行一个目标主机名或IP,例如:
Server01
192.168.1.10
DB-SQL02
第二步:读取列表并执行命令。
$servers = Get-Content .\servers.txt
Invoke-Command -ComputerName $servers -ScriptBlock { Get-Service wuauserv | Select Name,Status } -Credential (Get-Credential)
第三步:控制并发数防压垮网络。加参数 -ThrottleLimit 5 可将同时连接数限制为5台,避免大批量时触发目标机资源耗尽或超时断连。
输出结果自动带 PSComputerName 列,一眼就能区分哪条来自哪台机器,无需人工标注。
创建持久会话组进行多步交互操作
当你需要先查状态→再改配置→最后重启服务这类有依赖关系的操作时,New-PSSession 比反复调用 Invoke-Command 更可靠,因为它复用同一连接上下文。
方法一:创建会话集合
$sessions = New-PSSession -ComputerName Server01,Server02 -Credential (Get-Credential)
方法二:向全部会话发送命令
Invoke-Command -Session $sessions -ScriptBlock { Set-Service spooler -StartupType Automatic; Start-Service spooler }
方法三:清理资源(关键!)
Remove-PSSession -Session $sessions;不执行这步会导致会话持续驻留内存,下次新建同名变量仍指向旧会话,可能引发权限错乱或命令静默失败。

















