Windows Server 2016 AD域环境下远程在Windows 10客户端执行指定CMD/PowerShell命令的方法
Windows Server 2016 AD域环境下远程在Windows 10客户端执行指定CMD/PowerShell命令的方法
嗨,针对你在Windows Server 2016 AD域环境下,要远程给Windows 10客户端执行gpresult /r和gpupdate命令的需求,我整理了几种域环境里常用的靠谱方法,你可以根据实际场景选择:
方法一:用PsExec工具快速执行单条命令
PsExec是Sysinternals工具集里的老牌工具,适合快速对单台或少量客户端执行命令,操作门槛低。
- 先把PsExec工具放到域控的某个本地目录(比如
C:\ADTools) - 打开域控上的CMD或PowerShell,切换到PsExec所在目录
- 执行强制组策略更新:
psexec \\客户端计算机名/IP -u 域管理员账号 gpupdate /force(省略-p参数的话,会弹出密码输入框,比明文输密码更安全) - 收集组策略结果并保存到域控共享目录:
psexec \\客户端计算机名/IP -u 域管理员账号 cmd /c "gpresult /r > \\你的域控名\共享目录\%COMPUTERNAME%_gpresult.txt" - 注意:客户端要开启文件和打印机共享,防火墙允许SMB(445端口)流量
方法二:用PowerShell远程管理(WinRM)原生方案
这是Windows自带的远程管理方式,更安全规范,适合批量或精细化操作,前提是客户端已开启WinRM(域环境下可以用组策略批量配置)。
- 先验证客户端WinRM是否可用:在域控PowerShell里执行
Test-WSMan 客户端计算机名,返回正常响应就说明没问题 - 执行组策略更新:
Invoke-Command -ComputerName 客户端计算机名 -Credential 域管理员账号 -ScriptBlock { gpupdate /force },执行后会直接返回客户端的执行结果 - 获取组策略结果:
$gpResult = Invoke-Command -ComputerName 客户端计算机名 -Credential 域管理员账号 -ScriptBlock { gpresult /r },之后可以直接输出$gpResult查看,或者保存到本地文件:$gpResult | Out-File -Path "C:\GPResults\客户端名_gpresult.txt"
方法三:用组策略批量推送脚本(适合大量客户端)
如果要给整个OU里的所有客户端执行命令,组策略是最高效的方式,无需逐个操作。
- 打开域控的组策略管理控制台(GPMC)
- 创建一个新的组策略对象(GPO),比如命名为「客户端GP更新与结果收集」
- 编辑GPO,根据执行时机选择:
- 要在计算机启动时执行:定位到计算机配置>Windows设置>脚本(启动/关机)
- 要在用户登录时执行:定位到用户配置>Windows设置>脚本(登录/注销)
- 编写批处理脚本,内容如下(把结果存到域共享目录,记得给客户端计算机账号分配该目录的写入权限):
gpupdate /force gpresult /r > \\你的域控名\SharedGPResults\%COMPUTERNAME%_gpresult.txt - 把脚本上传到GPO对应的脚本存储目录(比如
\\你的域名\SysVol\你的域名\Policies\GPO的ID\Machine\Scripts\Startup) - 将这个GPO链接到包含目标客户端的OU,客户端下次开机或手动刷新组策略时就会自动执行
额外注意事项
- 所有操作都需要域管理员权限,或者拥有目标客户端的本地管理员权限
- 客户端防火墙要放行对应流量:PsExec用445端口,WinRM默认用5985(HTTP)或5986(HTTPS)端口
gpupdate /force会强制刷新所有组策略,可能导致客户端某些设置立即生效,建议在非业务高峰执行
备注:内容来源于stack exchange,提问作者RedOne




