Windows复制具有自定义名称的打印机

时间:2015-08-18 13:25:29

标签: windows powershell printing

我的组织使用一个软件,其中有一个硬编码的打印机名称PRN1

用户分布在多个地点;所以不可能只重命名一台打印机。我们的联网打印机通过登录脚本按计算机位置进行映射;有些电脑有本地连接的打印机。

目前提出的解决方案是在用户登录时远程登录每台计算机;重新映射用户默认打印机;并手动重命名(右键单击>打印机支持...)。

我试图避免这种情况,因为我们不使用漫游配置文件,而且有些用户确实从一个位置移动到另一个位置;并且用户不会理解为什么它突然不起作用。

理想情况下,我想创建一个自动复制用户默认打印机的脚本;并将其命名为PRN1

$AllPrinters = gwmi win32_printer
$DefaultPrinter = $AllPrinters | where {$_.Default -eq $true}
rundll32 printui.dll,PrintUIEntry /ga /n $DefaultPrinter.SystemName + "\" + $DefaultPrinter.ShareName /z /b"PRN1"

以上是我现在拥有的;我知道我没有正确使用rundll32命令,因为打印机没有与新名称重复。

非常感谢任何帮助或帮助。

1 个答案:

答案 0 :(得分:2)

我在这里和那里使用那个rundll32命令,但从来没有运气好。

你可以通过完全使用wmi来做这样的事情。如果用户最终遇到问题,您可能希望将大量的try包裹起来以抑制错误并记录输出。

$Name = "PRN"

$AllPrinters = gwmi win32_printer
$DefaultPrinter = $AllPrinters | where {$_.Default -eq $true}

    $objHelper = [WMICLASS]"\\localhost\root\cimv2:Win32_SecurityDescriptorHelper"
    $print = [WMICLASS]"\\localhost\root\cimv2:Win32_Printer"
    $print.Scope.Options.EnablePrivileges = $true
        $newprinter = $print.createInstance() 
            $newprinter.drivername = $DefaultPrinter.DriverName
            $newprinter.PortName = $DefaultPrinter.PortName
            $newprinter.Shared = $false
            $newprinter.Location = $DefaultPrinter.Location
            $newprinter.Comment = $DefaultPrinter.Comment
            $newprinter.DeviceID = $Name
            $newprinter.PrintProcessor = $DefaultPrinter.PrintProcessor
            $newprinter.PrintJobDataType = $DefaultPrinter.DataType
            $newprinter.RawOnly = $DefaultPrinter.RawOnly 

        $result = $newprinter.Put()