远程执行RUNDLL32更新打印机设置失败的问题解决
远程更新Windows 2016打印机设置的问题与解决方案
背景说明
两台Windows 2016服务器共用同一域管理员账号,Server1的E:\Temp\目录下存有打印机配置文件ZEBRA_1.dat。在Server1本地以管理员身份运行PowerShell执行以下命令,可正常完成ZEBRA_1打印机的设置更新:
start-process -Verb runas -filepath "C:\Windows\System32\RUNDLL32.EXE" -argumentlist "PRINTUI.DLL,PrintUIEntry /Sr /n `\"ZEBRA_1`\" /a `\"E:\Temp\ZEBRA_1.dat`\" 2 7 c d g u"
远程执行的异常情况
在Server2上以管理员身份通过Invoke-Command远程执行上述命令时,无任何报错信息,但Server1的打印机设置未发生变更。尝试过以下调整均未解决问题,还出现rundll32.exe和wsmprovhost.exe进程挂起的现象:
- 移除
-Verb runas参数 - 去掉
Start-Process直接调用命令 - 使用
New-PSSession建立会话后执行 - 添加
-Credential参数指定管理员凭据
可行解决方案:借助PsExec.exe远程执行
最终通过PsExec工具实现了远程更新需求,支持两种执行场景:
场景1:指定域账号执行
适用于需要调整个人打印机设置的情况:
$server = 'Server1'; $localDatFolder = 'e:\Temp\'; $printer = 'ZEBRA_1' $credential = Get-Credential -Message '输入打印机设置操作的账号密码' $user = "MyDomain\$($credential.GetNetworkCredential().UserName)" $password = $credential.GetNetworkCredential().password $ARGS = @('PRINTUI.DLL,PrintUIEntry', '/Sr', $('/n"'+$printer+'"'), $('/a"'+$localDatFolder+$printer+'.dat"'), '2', '7', 'c', 'd', 'g', 'u') e:\temp\pstools\psexec.exe \\$server -u $user -p $password C:\Windows\System32\RUNDLL32.EXE $ARGS
场景2:使用系统账号执行
适用于无需调整个人打印机设置的情况:
# 无需调整个人设置时可使用此方式: $server = 'Server1'; $localDatFolder = 'e:\Temp\'; $printer = 'ZEBRA_1' $ARGS = @('PRINTUI.DLL,PrintUIEntry', '/Sr', $('/n"'+$printer+'"'), $('/a"'+$localDatFolder+$printer+'.dat"'), '2', '7', 'c', 'd', 'g', 'u') e:\temp\pstools\psexec.exe \\$server -s C:\Windows\System32\RUNDLL32.EXE $ARGS
内容的提问来源于stack exchange,提问作者casewolf
相关产品推荐
相关产品推荐

