如何通过域策略以管理员身份在多台客户端执行PowerShell修改DNS及次级DNS?
域策略下用管理员权限执行PowerShell修改DNS服务器配置
一、把DNS修改命令和Start-Process结合提权运行
要让你的DNS修改命令以管理员权限执行,直接用Start-Process的-Verb RunAs参数提权,同时把原有命令作为参数传递给PowerShell,具体写法如下:
Start-Process powershell -Verb RunAs -ArgumentList "-Command", '$Array = Get-DnsClientServerAddress; foreach($element in $Array) { Set-DnsClientServerAddress -InterfaceIndex $($element).InterfaceIndex -ServerAddress "10.128.162.216" }'
-Verb RunAs:强制以管理员权限启动PowerShell进程-ArgumentList:传递要执行的命令内容,用引号包裹避免语法错误
二、设置次级DNS服务器的命令
Set-DnsClientServerAddress的-ServerAddress参数支持传入数组,直接把主、次级DNS地址放在数组里就能同时配置,命令如下:
Start-Process powershell -Verb RunAs -ArgumentList "-Command", '$Array = Get-DnsClientServerAddress; foreach($element in $Array) { Set-DnsClientServerAddress -InterfaceIndex $($element).InterfaceIndex -ServerAddress "10.128.162.216", "10.128.162.217" }'
数组里第一个地址是主DNS,第二个就是次级DNS,注意顺序。
三、域策略部署的实用建议
- 优先用计算机启动脚本:在域策略的「计算机配置→脚本→启动」里添加命令,启动脚本默认以系统权限运行,不用额外提权,比用户侧提权更稳定
- 限制网卡范围:如果不想修改所有网卡(比如VPN、无线网卡),可以加过滤条件,只修改以太网类网卡:
Start-Process powershell -Verb RunAs -ArgumentList "-Command", '$Array = Get-DnsClientServerAddress | Where-Object {$_.InterfaceAlias -like "*Ethernet*"}; foreach($element in $Array) { Set-DnsClientServerAddress -InterfaceIndex $($element).InterfaceIndex -ServerAddress "10.128.162.216", "10.128.162.217" }'
- 调整PowerShell执行策略:域策略里可以设置「计算机配置→管理模板→Windows组件→Windows PowerShell→启用脚本执行」,允许本地脚本运行,避免命令被拦截
内容的提问来源于stack exchange,提问作者Tsakiridis Giorgos
相关产品推荐
相关产品推荐

