Powershell需要UAC,我需要帮助将此功能转换为PSexec的BAT文件

时间:2015-06-01 11:37:03

标签: powershell batch-file uac psexec

$i=0;
$pnp = pnputil -e;$matched = [regex]::matches($pnp, ".......................................Lexmark International");
$split = $matched -split (".........inf");
$replace = $split -replace " Driver package provider :   Lexmark International","";
$replace1 = $replace -replace " ","`n";
write-output $replace1;
foreach ($i in $replace1){;
$pnpdel = pnputil -f -d $i;$pnpdel;
};
Reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3\Lexmark Universal v2 XL" /f;
net stop spooler;
net start spooler;
$PrinterPath = "\\officechicprt5\111w-2w-bprn-07";
$net = new-Object -Com WScript.Network;
$net.AddWindowsPrinterConnection($PrinterPath)

我知道它不漂亮,但每次我尝试它都有效。如果你很好奇,在我们的环境中,Lexmark驱动程序经常损坏,这实际上是微软的问题。在注册表中,Dependent Files被截断,因此打印机将永远不会打印,通常会强制打印机乱码。我们找到解决此问题的唯一方法是完全删除驱动程序,并阅读我们的点和打印驱动程序。这个脚本可以做到这一点,但不幸的是需要UAC提升。我试图将bat文件与此一起运行:

@ECHO OFF
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
timeout /t 10

但不幸的是,它给用户留下了混乱的表情和UAC提示。是否可以通过PS文件在bat文件中以某种方式运行它?我不希望通过RDP将其运行到数百台机器中(在那里,完成了)。我更喜欢一个可重复的过程,这个问题在这里是一个大流行。

再次感谢

1 个答案:

答案 0 :(得分:1)

你的事情太复杂了。不要启动PowerShell以使用参数启动PowerShell。只需使用参数直接启动PowerShell。

powershell.exe -NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1"" -Verb RunAs

如果您的用户不是管理员组的成员,您需要使用提升的权限运行PowerShell脚本,您应该启用PS Remoting并通过远程主机上的Invoke-Command运行它:

Invoke-Command -Computer 'hostA', 'hostB', ... -ScriptBlock {
  # your PowerShell code here
}