应用于多个远程服务器的 Get-Printer cmdlet
Get-Printer cmdlet applied to multiple remote servers
我正在尝试 运行 cmdlet“Get-Printer”并将其应用于多台计算机,但我收到一条错误消息我尝试使用双引号并收到相同的错误消息。
“Get-Printer:无法处理参数 'ComputerName' 的参数转换。无法将值转换为类型 System.String。”“=18=]
Get-Printer -ComputerName 'server01', 'server02'|select-object -Property Name, PortName |Select-String -Pattern 127.0.0.1
是因为get-printer cmdlet 一次只能应用于一台服务器吗?我是否必须采用不同的方法才能将其应用于多个服务器?
Get-Printer的帮助显示参数-ComputerName接受字符串类型的输入,但不接受字符串数组。因此您只能指定一个计算机名称。
https://docs.microsoft.com/en-us/powershell/module/printmanagement/get-printer?view=windowsserver2019-ps
然而,您可以做的是先定义计算机名称数组,然后使用 foreach。
$computers = "server01","server02"
foreach($computer in $computers)
{
Get-Printer -ComputerName $computer |select-object -Property Name, PortName | Select-String -Pattern 127.0.0.1
}
或者就像 Jesse 在上面建议的那样,一个衬里看起来像这样:
"server01","server02" | ForEach-Object {Get-Printer -ComputerName $_} | Select-Object -Property Name, PortName | Select-String -Pattern 127.0.0.1
ComputerName
是字符串而不是数组。请参阅 Get-Printer.
的文档
然而,您可以在开头使用另一个管道 (|
),然后是一个以 %
开头的块(shorthand for ForEach-Object
)以便提供一次一个 cmdlet 的字符串。它看起来像这样:
'server01', 'server02' |
%{Get-Printer -ComputerName $_} |
Select-Object -Property Name, PortName |
Select-String -Pattern 127.0.0.1
虽然这还有第二个问题。 Select-String
也需要一个字符串,但您传递给它的是一个包含 Name
和 PortName
的对象。您可以不使用 Select-String
,而是将其通过管道传输到以 ?
为前缀的块(shorthand 表示 Where-Object
)并检查 PortName
是否包含 127.0.0.1 .
添加这个看起来像:
'server01', 'server02' |
%{Get-Printer -ComputerName $_} |
Select-Object -Property Name, PortName |
?{$_.PortName.Contains("127.0.0.1")}
如果您愿意,也可以将 Select-Object
缩短为 Select
,但我会留给您。
我正在尝试 运行 cmdlet“Get-Printer”并将其应用于多台计算机,但我收到一条错误消息我尝试使用双引号并收到相同的错误消息。
“Get-Printer:无法处理参数 'ComputerName' 的参数转换。无法将值转换为类型 System.String。”“=18=]
Get-Printer -ComputerName 'server01', 'server02'|select-object -Property Name, PortName |Select-String -Pattern 127.0.0.1
是因为get-printer cmdlet 一次只能应用于一台服务器吗?我是否必须采用不同的方法才能将其应用于多个服务器?
Get-Printer的帮助显示参数-ComputerName接受字符串类型的输入,但不接受字符串数组。因此您只能指定一个计算机名称。 https://docs.microsoft.com/en-us/powershell/module/printmanagement/get-printer?view=windowsserver2019-ps
然而,您可以做的是先定义计算机名称数组,然后使用 foreach。
$computers = "server01","server02"
foreach($computer in $computers)
{
Get-Printer -ComputerName $computer |select-object -Property Name, PortName | Select-String -Pattern 127.0.0.1
}
或者就像 Jesse 在上面建议的那样,一个衬里看起来像这样:
"server01","server02" | ForEach-Object {Get-Printer -ComputerName $_} | Select-Object -Property Name, PortName | Select-String -Pattern 127.0.0.1
ComputerName
是字符串而不是数组。请参阅 Get-Printer.
然而,您可以在开头使用另一个管道 (|
),然后是一个以 %
开头的块(shorthand for ForEach-Object
)以便提供一次一个 cmdlet 的字符串。它看起来像这样:
'server01', 'server02' |
%{Get-Printer -ComputerName $_} |
Select-Object -Property Name, PortName |
Select-String -Pattern 127.0.0.1
虽然这还有第二个问题。 Select-String
也需要一个字符串,但您传递给它的是一个包含 Name
和 PortName
的对象。您可以不使用 Select-String
,而是将其通过管道传输到以 ?
为前缀的块(shorthand 表示 Where-Object
)并检查 PortName
是否包含 127.0.0.1 .
添加这个看起来像:
'server01', 'server02' |
%{Get-Printer -ComputerName $_} |
Select-Object -Property Name, PortName |
?{$_.PortName.Contains("127.0.0.1")}
如果您愿意,也可以将 Select-Object
缩短为 Select
,但我会留给您。