我正在尝试准备一个 PowerShell 脚本来安装打印机。这将用于自动执行任务,其中将提供可用的打印机名称和 IP 地址。大多数脚本似乎都可以工作,但缺少一些内容。下面是脚本,然后我将澄清缺少的内容。
$knownPrinterDriver = "DTC4500e Card Printer"
$ipPort = 5400
$finalPortName = "MyPort_5400"
$ipAddress = "192.168.30.13"
$finalPrinterName = "Printer1"
$goodDriver = Get-PrinterDriver | Where-Object { $_.Name -eq $knownPrinterDriver }
if( $goodDriver.Count -eq 0 )
{
# no printer driver found
return -1
}
# SHOULD only be ONE, so get it as reference
$oneDriver = $goodDriver[0]
# using the ` backtick mark as continuation line
Add-PrinterPort `
-Name $finalPortName `
-PrinterHostAddress $ipAddress `
-PortNumber $ipPort
# Re-check if printer was actually loaded or not.
$availPorts = Get-PrinterPort | Where-Object { $_.Name -eq $finalPortName }
if( $availPorts.Count -eq 0 )
{
return -2
}
$onePort = $availPorts[0]
Add-Printer `
-DriverName $oneDriver.Name `
-Name $finalPrinterName `
-PortName $onePort.Name
# Re-check if printer was actually loaded or not.
$availPrinters = Get-Printer | Where-Object { $_.Name -eq $finalPrinterName }
if( $availPrinters.Count -eq 0 )
{
return -3
}
return 1
因此,运行脚本后,它会创建端口,没有问题。创建与端口关联的打印机,也没有问题。
现在,我转到“打印机和设置”
(显然经过编辑以显示两者)您可以看到一台打印机显示删除设备的选项,而脚本打印机则没有。还有第二部分。在尝试运行轮询设备的其他程序时,状态为“未知”,而不是就绪或脱机。
有什么建议吗?非常感谢。
答案1
问题 1
在您的 cmdlet Add-PrinterPort 中,您错过了 SNMP 部分,该参数将使后台处理程序检查打印机的状态。(禁用 SNMP 部分也将禁用驱动程序附带的任何打印监视软件)
SNMP 启用 SNMP 并指定 TCP/IP 打印机端口管理的索引。
-SNMP社区 指定 TCP/IP 打印机端口管理的 SNMP 团体名称。
问题2
您的脚本创建了一个本地 TCP/IP 端口,因此只有管理员可以删除它,请检查用户权限/UAC,因为我怀疑另一台打印机是映射打印机,而不是本地打印机。