Get-Printer cmdlet应用到多台远程服务器触发报错的问题咨询
问题根因
- 是的,
Get-Printer的-ComputerName参数仅支持传入单个字符串类型的计算机名,不支持直接传入多台计算机的数组,这就是你收到参数类型转换报错的核心原因,和参数值使用单引号还是双引号没有关联。 - 你原有命令还存在逻辑错误:
Select-Object输出的是结构化对象,直接用Select-String匹配文本规则无法生效,需要改用Where-Object筛选对象的对应属性值。
多服务器查询实现方案
方案1:遍历逐台执行(无需提前配置PowerShell远程)
适合没开WinRM远程的场景,通过循环逐个调用Get-Printer,同时增加异常处理避免单台服务器连接失败中断整个执行:
# 定义所有目标服务器 $serverList = @('server01', 'server02') $serverList | ForEach-Object { try { Get-Printer -ComputerName $_ -ErrorAction Stop | # 筛选端口为127.0.0.1的打印机 Where-Object { $_.PortName -like '*127.0.0.1*' } | # 增加服务器名字段,区分结果来源 Select-Object @{n='Server';e={$_}}, Name, PortName } catch { Write-Warning "查询服务器 $_ 失败:$($_.Exception.Message)" } }
方案2:PowerShell远程批量执行(需目标服务器开启WinRM服务)
如果环境已经配置好PowerShell远程权限,使用Invoke-Command可以并行执行查询,效率更高:
$serverList = @('server01', 'server02') Invoke-Command -ComputerName $serverList -ScriptBlock { Get-Printer | Where-Object { $_.PortName -like '*127.0.0.1*' } | Select-Object Name, PortName } -ErrorAction SilentlyContinue
执行结果会自动携带PSComputerName字段标识该条记录对应的服务器。
内容的提问来源于stack exchange,提问作者user14029480
相关产品推荐
相关产品推荐

