使用powershell搜索打印队列



我正在编写一个快速的代码串,它允许我搜索特定的打印服务器及其内容(如打印机(。我想让它做的是,一旦获得打印机信息,就可以使用端口名找到特定的打印机,在这种情况下,端口名是一个IP地址,不太确定是否可能,但我还没有找到允许我使用这些值定义搜索的命令。

Get-Printer -computerName "server01"|select-object -Property Name, PortName 

名称端口名称
Printer01 X.XX.XX.X
Prnter02 X.XX.XX.XX

有没有一种方法可以使用GetPrinter命令并利用端口名找到特定的打印机?

我只是更详细地解释@JeffZeitlin非常正确的答案。

获取打印机-Get-Printer cmdlet检索计算机上安装的打印机列表。您还可以使用Get-Printer检索单个打印机的属性,然后将该信息用作其他cmdlet的输入。

Get-Printer|Get-Member-Get-Membeer cmdlet获取对象的成员、属性和方法。

Get-Printer | get-member

获取打印机|选择对象-Select-Object cmdlet选择对象或对象集的指定属性。它还可以选择唯一的对象、指定数量的对象或阵列中指定位置的对象。

Get-Printer | select-object -Property Name, PortName

Get-Printer | Select Object | Where Object-Where Object cmdlet从传递给它的对象集合中选择具有特定属性值的对象。例如,可以使用Where Object cmdlet选择在特定日期之后创建的文件、具有特定ID的事件或使用特定版本Windows的计算机。

Get-Printer | select-object -Property Name, PortName | where PortName -eq "PORTPROMPT:"

获取打印机-ComputerName

Get-Printer -ComputerName $env:Computername | select-object -Property Name, PortName | where PortName -eq "PORTPROMPT:"

脚本示例获取打印机

$server = "$env:Computername"
$printersportnames = Get-Printer -ComputerName $server | select-object -ExpandProperty PortName
#Write-Host $printersportnames
$results = New-Object System.Collections.ArrayList # Empty Array
ForEach ($printerportname in $printersportnames) {
$printerportname = $printerportname.ToString()
#Write-Host $printerportname
$output = Get-Printer -ComputerName $server | where-object {$_.PortName -eq $printerportname}

$x = $output.Name
$y = $output.PortName
$z = $output.CommunicationStatus
$a = $output.OperatingStatus

$Object = New-Object PSObject   
$Object | Add-Member -Name 'Name' -MemberType Noteproperty -Value $x
$Object | Add-Member -Name 'PortName' -MemberType Noteproperty -Value $y
$Object | Add-Member -Name 'CommStatus' -MemberType Noteproperty -Value $z
$Object | Add-Member -Name 'OperStatus' -MemberType Noteproperty -Value $a

$results += $object

}
$results

最新更新