简体   繁体   English

如何在没有Remove-PrinterDriver cmdlet的情况下使用Powershell删除打印机驱动程序

[英]How do I delete a printer driver using Powershell without the Remove-PrinterDriver cmdlet

I have a Citrix XenApp 6.5 Windows 2008 R2 server farm that does not have access to the Remove-PrinterDriver cmdlet. 我有一个Citrix XenApp 6.5 Windows 2008 R2服务器场,该服务器场无权访问Remove-PrinterDriver cmdlet。 I want one server in the farm to monitor printer drivers on the other servers and delete bad printer drivers if found. 我希望服务器场中的一台服务器监视其他服务器上的打印机驱动程序,如果发现错误的打印机驱动程序,则将其删除。 So far I have tried the following wmi call, but I did not see a delete method in the objects returned. 到目前为止,我已经尝试了以下wmi调用,但是在返回的对象中没有看到delete方法。

Get-WmiObject -ComputerName otherServer -Class win32_printerdriver | Where-Object name -like "*PCL 5,3*"

I have also tried the following invoke expression line to try to delete a printer driver, but the driver still appears when I query printer drivers. 我还尝试了以下调用表达式行来尝试删除打印机驱动程序,但是当我查询打印机驱动程序时,该驱动程序仍然出现。 Any help toward a solution is appreciated. 任何对解决方案的帮助将不胜感激。

Invoke-Command -ComputerName otherServer -ScriptBlock { Invoke-Expression "rundll32 printui.dll,PrintUIEntry /dn /q /n`"HP Universal Printing PCL 5,3,Windows x64`"" }

Your second command has the wrong switches, but it should work in general. 您的第二个命令开关有误,但通常应该可以正常工作。 You used /dn where you should have used /dd. 您在应该使用/ dd的地方使用了/ dn。 In general it looks like you're doing this the hard way by using Invoke-Command . 通常,您似乎通过使用Invoke-Command You should be able to just do: 您应该能够做到:

rundll32 printui.dll,PrintUIEntry /dd /c\\otherserver /m "HP Universal Printing PCL 5" /h "x64" /v 3

Here's the full usage description as shown by printui.exe /? 这是完整的用法说明,如printui.exe /?所示printui.exe /? :

Usage: rundll32 printui.dll,PrintUIEntry [options] [@commandfile]
   /a[file] binary file name
   /b[name] base printer name
   /c[name] unc machine name if the action is on a remote machine
   /dl delete local printer
   /dn delete network printer connection
   /dd delete printer driver
   /e display printing preferences
   /f[file] either inf file or output file
   /F[file] location of an INF file that the INF file specified with /f may depend on
   /ga add per machine printer connections (the connection will be propagated to the user upon logon)
   /ge enum per machine printer connections
   /gd delete per machine printer connections (the connection will be deleted upon user logon)
   /h[arch] driver architecture one of the following, x86, x64 or Itanium
   /ia install printer driver using inf file
   /id install printer driver using add printer driver wizard
   /if install printer using inf file
   /ii install printer using add printer wizard with an inf file
   /il install printer using add printer wizard
   /in add network printer connection
   /ip install printer using network printer installation wizard
   /j[provider] print provider name
   /k print test page to specified printer, cannot be combined with command when installing a printer
   /l[path] printer driver source path
   /m[model] printer driver model name
   /n[name] printer name
   /o display printer queue view
   /p display printer properties
   /q quiet mode, do not display error messages
   /r[port] port name
   /s display server properties
   /Ss Store printer settings into a file
   /Sr Restore printer settings from a file
   Store or restore printer settings option flags that must be placed at the end of command:
    2   PRINTER_INFO_2
    7   PRINTER_INFO_7
    c   Color Profile
    d   PrinterData
    s   Security descriptor
    g   Global DevMode
    m   Minimal settings
    u   User DevMode
    r   Resolve name conflicts
    f   Force name
    p   Resolve port
    i   Driver name conflict
   /u use the existing printer driver if it's already installed
   /t[#] zero based index page to start on
   /v[version] driver version one of the following, "Type 2 - Kernel Mode" or "Type 3 - User Mode"
   /w prompt the user for a driver if specified driver is not found in the inf
   /y set printer as the default
   /Xg get printer settings
   /Xs set printer settings
   /z do not auto share this printer
   /Y do not auto generate a printer name
   /K changes the meaning of /h to accept 2, 3, 4 for x86, x64, or Itanium (respectively), and /v to accept 3 for "Type 3 - User Mode"
   /Z share this printer, can only be used with the /if option
   /? help this message
   @[file] command line argument file
   /Mw[message] show a warning message before committing the command
   /Mq[message] show a confirmation message before committing the command
   /W[flags] specifies flags and switches for the wizards (for APW & APDW)
    r   make the wizards to be restart-able from the last page
   /G[flags] specifies global flags and switches
    w   suppress setup driver warnings UI (super quiet mode)
   /R force selected driver to replace exisiting driver

Examples:
   Run server properties: 
rundll32 printui.dll,PrintUIEntry /s /t1 /c\\machine
   Run printer properties: 
rundll32 printui.dll,PrintUIEntry /p /n\\machine\printer
   Run add printer wizard locally: 
rundll32 printui.dll,PrintUIEntry /il 
   Run add printer wizard on \\machine: 
rundll32 printui.dll,PrintUIEntry /il /c\\machine
   Run queue view: 
rundll32 printui.dll,PrintUIEntry /o /n\\machine\printer
   Run inf install: 
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f c:\infpath\infFile.inf /r "lpt1:" /m "Brother DCP-128C"
   Run inf install (with inf dependency). In the example, prnbr002.inf depends on ntprint.inf
rundll32 printui.dll, PrintUIEntry /ia /m "Brother DCP-128C" /K /h x64 /v 3 /f "c:\infpath\prnbr002.inf" /F "c:\infpath\ntprint.inf"
   Run add printer wizard using inf: 
rundll32 printui.dll,PrintUIEntry /ii /f c:\infpath\infFile.inf
   Add printer using inbox printer driver: 
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /r "lpt1:" /m "Brother DCP-128C"
   Add per machine printer connection (the connection will be propagated to the user upon logon): 
rundll32 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services"
   Delete per machine printer connection (the connection will be deleted upon user logon): 
rundll32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer
   Enumerate per machine printer connections: 
rundll32 printui.dll,PrintUIEntry /ge /c\\machine
   Add printer driver using inf: 
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode" /f c:\infpath\infFile.inf
   Add printer driver using inf: 
rundll32 printui.dll,PrintUIEntry /ia /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3
   Add inbox printer driver: 
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "Brother DCP-128C" /h "Intel" /v "Type 3 - Kernel Mode"
   Remove printer driver: 
rundll32 printui.dll,PrintUIEntry /dd /c\\machine /m "Brother DCP-128C" /h "x86" /v "Type 3 - User Mode"
   Remove printer driver: 
rundll32 printui.dll,PrintUIEntry /dd /K /c\\machine /m "Brother DCP-128C" /h "x86" /v 3
   Set printer as default: 
rundll32 printui.dll,PrintUIEntry /y /n "printer"
   Set printer comment: 
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" comment "My Cool Printer"
   Get printer settings: 
rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
   Get printer settings saving results in a file: 
rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
   Set printer settings command usage:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
   Store all printer settings into a file: 
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat"
   Restore all printer settings from a file: 
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
   Store printer information on level 2 into a file : 
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
   Restore  from a file printer security descriptor: 
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
   Restore  from a file printer global devmode and printer data: 
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
   Restore  from a file minimum settings and resolve port name: 
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p
   Enable Client Side Rendering for a printer: 
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ClientSideRender enabled
   Disable Client Side Rendering for a printer: 
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ClientSideRender disabled

I am not sure if the WMI is the way to go for deleting printers, but you can delete wmi objects with: 我不确定WMI是否是删除打印机的方法,但是您可以使用以下方法删除wmi对象:

$obj = Get-WmiObject -ComputerName otherServer -Class win32_printerdriver | Where-Object name -like "*PCL 5,3*"

$obj |Remove-WmiObject

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM