PowerShell批量修改远程服务器执行策略需先确保WinRM启用、管理员权限、防火墙放行及版本兼容,再用Invoke-Command配合$using:policy传递变量执行Set-ExecutionPolicy,推荐RemoteSigned策略并注意组策略优先级。
powershell 默认禁止运行脚本(执行策略为 restricted),批量修改远程服务器的执行策略需谨慎操作,核心是使用 invoke-command 远程调用 set-executionpolicy,并确保 winrm 已启用、权限足够、目标系统支持所需策略级别。
确认远程管理环境已就绪
执行前必须验证以下几点,否则命令会失败:
- 目标服务器已启用 WinRM(运行
winrm quickconfig或通过组策略启用) - 当前用户对远程服务器具有管理员权限(本地 Administrators 组或域管理员)
- 防火墙允许 WinRM 流量(默认端口 5985/HTTP 或 5986/HTTPS)
- PowerShell 版本兼容(建议 PowerShell 5.1+,Windows Server 2012 R2 及以上)
使用 Invoke-Command 批量设置执行策略
以下脚本可一次性修改多台服务器。以设置为 RemoteSigned 为例(兼顾安全与实用性):
$servers = @("Server01", "Server02", "Server03")
$policy = "RemoteSigned"
$credential = Get-Credential # 输入具有管理员权限的账号
<p>Invoke-Command -ComputerName $servers -Credential $credential -ScriptBlock {
Set-ExecutionPolicy -ExecutionPolicy $using:policy -Force
} -ErrorAction Continue说明:
-
$using:policy是关键语法,用于将本地变量传递进远程会话 -
-Force跳过确认提示;不加则远程执行会卡住等待交互 -
-ErrorAction Continue确保某台失败不影响其余服务器执行
常见策略选项与适用场景
根据实际需求选择合适策略,避免过度开放:
- RemoteSigned:本地脚本无限制,下载的脚本需签名(推荐生产环境使用)
- AllSigned:所有脚本(含本地)必须由受信任发布者签名(高安全性要求场景)
- Unrestricted:允许所有脚本运行(仅限测试环境,不建议在生产中使用)
- Bypass:完全跳过执行策略检查(极不安全,通常仅用于临时调试)
注意:MachinePolicy 和 UserPolicy 策略由组策略控制,脚本无法覆盖——若远程服务器已通过域策略锁定执行策略,Set-ExecutionPolicy 将静默失败或提示“策略由组策略设置”。
验证与回滚建议
修改后建议快速验证,并保留应急恢复手段:
- 验证执行策略:在远程服务器上运行
Get-ExecutionPolicy -List查看各作用域实际值 - 记录原始策略:批量修改前可用
Invoke-Command先采集各服务器当前策略存档 - 回滚方式:直接再次调用
Set-ExecutionPolicy指定原值,如Restricted - 优先考虑作用域:添加
-Scope LocalMachine明确指定作用域,避免误改当前用户策略

















