企业批量管理Windows电脑需先启用PSRemoting、测试WinRM连通性、确保管理员权限;再通过Invoke-Command远程执行重命名、信息采集、MSI安装、临时文件清理等操作,提升运维效率。

你需要在企业环境中一次性对几十台Windows电脑执行相同配置、安装、检查或清理操作,避免逐台手动点开设置、运行命令、复制文件的低效重复劳动。
准备工作:让目标电脑能被远程控制
所有批量操作的前提是目标电脑必须“听得到”你的PowerShell指令。这需要三步确认:
第一步:在每台目标电脑上以管理员身份运行 PowerShell,执行 【Enable-PSRemoting -Force】。这条命令会启用WinRM服务、配置监听端口、打开防火墙规则——缺一不可,否则后续所有远程命令都会失败。
第二步:测试连通性。在你自己的控制机上运行:Test-WsMan 192.168.1.10(把IP换成任一台目标机地址)。如果返回包含“wsmid”和“ProtocolVersion”的完整对象,说明通信链路已通;若报错“无法连接到远程主机”,请回头检查第一步是否执行、目标机是否开机且在同一网段。
第三步:确保你当前登录的账户在每台目标机上具有本地管理员权限。域环境直接用域管理员账号;工作组环境需提前在每台目标机的“本地用户和组”中将你的账户加入Administrators组。
批量重命名并立即重启(生产环境推荐)
适用于新采购设备统一命名、旧资产回收后重新规划等场景。名称必须符合NetBIOS规则:15字符以内、仅含字母数字和短横线、不能以数字或短横线开头。
方法一:使用数组映射方式(最清晰可控)
新建文本文件,保存为 RenameAndReboot.ps1,内容如下(替换方括号内示例):
[string[]]$Computers = "PC-A", "PC-B", "PC-C"<br>$NewNames = "WKSTN-OPS-01", "WKSTN-OPS-02", "WKSTN-OPS-03"<br>for ($i = 0; $i -lt $Computers.Count; $i++) {<br> Invoke-Command -ComputerName $Computers[$i] -ScriptBlock {<br> Rename-Computer -NewName $using:NewNames[$i] -Force -Restart<br> } -ErrorAction Continue<br>}
在控制机上右键以管理员身份运行该脚本。每台电脑将在改名后自动重启,无需人工干预。
方法二:从文本文件读取主机列表(适合上百台)
先准备一个纯文本文件 targets.txt,每行一个主机名或IP:
192.168.1.10<br>192.168.1.11<br>SRV-DB-01
然后运行:
$list = Get-Content . argets.txt; $list | ForEach-Object { Invoke-Command -ComputerName $_ -ScriptBlock { Rename-Computer -NewName ("NEW-" + (Get-Random -Minimum 1000 -Maximum 9999)) -Force -Restart } -ErrorAction SilentlyContinue }
注意:此方式生成随机名,仅用于临时测试,正式环境请勿使用。
批量查询系统信息并导出报表
快速掌握全网设备基础状态,避免一台台远程桌面登录查看。
在控制机上直接运行以下命令(无需提前写脚本):
$targets = "PC001", "PC002", "PC003"; $report = Invoke-Command -ComputerName $targets -ScriptBlock {<br> [PSCustomObject]@{<br> Hostname = hostname<br> OS = (Get-CimInstance Win32_OperatingSystem).Caption<br> RAM_GB = [math]::Round((Get-CimInstance Win32_PhysicalMemory | Measure-Object Capacity -Sum).Sum / 1GB, 1)<br> Uptime_Days = [math]::Floor((Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime | Select-Object -ExpandProperty Days)<br> }<br>} | Select-Object Hostname, OS, RAM_GB, Uptime_Days;<br>$report | Export-Csv -Path .inventory_report.csv -NoTypeInformation -Encoding UTF8
执行完成后,当前目录下会生成 inventory_report.csv,双击可用Excel打开。该命令一次获取主机名、系统版本、内存总量、已运行天数四项关键指标,字段明确,无需后期清洗。
批量安装MSI软件包
适用于部署打印机驱动、内部工具、安全客户端等标准安装包。
确保安装包(如 agent.msi)已放在所有目标机都能访问的网络路径,例如 \fileserverinstallgent.msi。
运行以下命令:
$computers = "PC001", "PC002"; $installer = "\fileserverinstallgent.msi"; $computers | ForEach-Object {<br> Invoke-Command -ComputerName $_ -ScriptBlock {<br> Start-Process msiexec.exe -ArgumentList "/i $using:installer /quiet /norestart" -Wait<br> } -ErrorAction Continue<br>}
该命令使用 /quiet 参数静默安装,不弹窗不交互;/norestart 避免安装过程触发意外重启。安装日志默认写入 %windir%TempMSI*.log,如需排查失败原因,可远程登录对应机器查看。
批量清理指定路径下的临时文件
针对研发、设计等部门电脑C盘空间告急问题,统一清理项目缓存、渲染临时文件等。
假设所有目标机的临时文件都存放在 C:ProjectsTemp,执行:
$targets = "DEV-01", "DEV-02", "DESIGN-01"; $targets | ForEach-Object {<br> Invoke-Command -ComputerName $_ -ScriptBlock {<br> if (Test-Path "C:ProjectsTemp") {<br> Remove-Item -Path "C:ProjectsTemp*" -Recurse -Force -ErrorAction SilentlyContinue<br> Write-Host "✅ 已清空 C:ProjectsTemp"<br> } else { Write-Host "⚠️ C:ProjectsTemp 不存在" }<br> }<br>}
这一步会跳过不存在该路径的机器,不会报错中断;同时输出明确提示,便于你快速定位哪些机器未按规范存放临时文件。


















