$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将其运行到数百台机器中(在那里,完成了)。我更喜欢一个可重复的过程,这个问题在这里是一个大流行。
再次感谢
答案 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
}