You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:36:04