打印服务器属性 Windows 7

Print Server Properties Windows 7

我正在尝试通过 Powershell v2 脚本在 Windows 7 机器上安装打印机驱动程序。我现在拥有正确安装和配置端口和驱动程序的一切,但我似乎无法找到有关如何设置打印服务器 属性 表单的任何信息。

我需要一种方法来设置打印服务器 属性 表单以获得正确的打印尺寸。有谁知道这些大小存储在 Windows 或注册表中的什么位置?

作为参考,以下是我目前对脚本的了解:

# Printer Info
$printerID = "HP Designjet Z3200 24in Photo"
$printerID1 = "HP Designjet Z3200 24in Photo - Canvas"
$printerID2 = "HP Designjet Z3200 24in Photo - Cover"
$printerIP = Read-Host 'What is the Poster Printer IP Address?'
$portName = $printerIP 
$portName1 = $printerIP + "_1"
$portName2 = $printerIP + "_2"
$printerModel = "HP Designjet Z3200 24in Photo"
$driverINFPath = "C:\V5\HP WFP\Driver\hpdjz3200serieswx64pcl\hpi32pxs.inf"
$driverConfigPath = "C:\V5\HP WFP\Config\Photo.dat"
$driverConfigPath1 = "C:\V5\HP WFP\Config\Canvas.dat"
$driverConfigPath2 = "C:\V5\HP WFP\Config\Cover.dat"

#installs the printer port
Function CreatePort {
  param ($printerIP, $portName)
    $newPort = ([wmiclass]"Win32_TcpIpPrinterPort").CreateInstance()
    $newPort.HostAddress = $printerIP
    $newPort.Name = $portName
    $newPort.portNumber = "9100"
    $newPort.Protocol = "1"
    $newPort.SNMPEnabled = $true

    $newPort.Put()
  }
CreatePort -printerIP $printerIP -portName $portName
CreatePort -printerIP $printerIP -portName $portName1
CreatePort -printerIP $printerIP -portName $portName2

#installs the printer driver and printer
printui.exe /if /b "$printerID" /f "$driverINFPath" /u /r "$portName" /m "$printerModel"
Start-Sleep -s 10
printui.exe /if /b "$printerID1" /f "$driverINFPath" /u /r "$portName1" /m "$printerModel"
Start-Sleep -s 10
printui.exe /if /b "$printerID2" /f "$driverINFPath" /u /r "$portName2" /m "$printerModel" 

#Configures the printer from specified file
printui.exe /Sr /n "$printerID" /a "$driverConfigPath" d g r
Start-Sleep -s 10
printui.exe /Sr /n "$printerID1" /a "$driverConfigPath1" d g r
Start-Sleep -s 10
printui.exe /Sr /n "$printerID2" /a "$driverConfigPath2" d g r

您可以将 [System.Printing] .Net class 用于 WPF 应用程序。这是我从用于设置双面和颜色模式的脚本转换而来的函数。

Function Set-PrinterPageSize {
    param (
        [string]$PrinterName,

        [ValidateSet("NorthAmericaLegal","NorthAmerica11x17","NorthAmericaLetter")] 
        [String] 
        $PageSize
    )
    Try {
        #Set Perms to a variable to use when constructing instance of PrintServer
        $Permissions = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
        #Set Perms to a variable to use when retrieving Queues from PrintServer
        $QueuePerms = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter
        #Construct using PrintServer as using LocalPrintServer
        $PrintServer = new-object System.Printing.LocalPrintServer -argumentList $Permissions
        #Create New Queue object to assign properties to WITH permissions to change settings (getting queue from printserver won't have perms)
        $NewQueue = new-object System.Printing.PrintQueue -argumentList $PrintServer,$PrinterName,1,$QueuePerms
        #Check that Queue is capable of that page size, and set if so
        $PageCaps = $NewQueue.GetPrintCapabilities().PageMediaSizeCapability
        if ($null -ne $PageCaps) {
            if ($PageCaps.PageMediaSizeName.Contains([System.Printing.PageMediaSizeName]::$PageSize)) {
                #Set Page Size in default settings
                $NewQueue.DefaultPrintTicket.PageMediaSize = [System.Printing.PageMediaSizeName]::$PageSize
                #Win7 also requires setting userprint ticket
                $NewQueue.UserPrintTicket.PageMediaSize = [System.Printing.PageMediaSizeName]::$PageSize

            } else {
                Write-Warning "$PageSize unavailable"
            }
        }
        #Save changes and cleanup
        $NewQueue.commit()
        $NewQueue.dispose()
        $PrintServer.commit()
        $PrintServer.dispose()

    }
    Catch {
        Write-Warning "Error Setting $PrinterName to $PageSize"
    }
}