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

如何在PowerShell中去除换行符并将打印机列表转为分号分隔格式

问题:将PowerShell获取的打印机列表转为分号分隔的单行格式

我正在编写新脚本,为方便后续管理,需要把获取到的打印机列表整理成特定格式。执行以下命令:

$PrL = (Get-CimInstance -Class CIM_Printer).Name | Sort-Object

得到的结果是每行一个打印机名称:

Printer01
Printer02
Printer03
Printer04

期望输出为分号分隔的单行格式:

Printer01; Printer02; Printer03; Printer04

我试了几种替换换行符的方法,但要么每个条目末尾多了分号,要么没达到预期效果,也搞不清该用\r、r还是其他转义字符。当前使用PowerShell 5.1.19041.3930,系统是Windows 10 Pro。

尝试过的方法

尝试1

$PrL = (Get-CimInstance -Class CIM_Printer).Name | Sort-Object
$PrL2 = ForEach-Object { $PrL -replace '\r', ' '}

尝试2

$PrL = (Get-CimInstance -Class CIM_Printer).Name | Sort-Object
$PrL2 = $PrL | ForEach { $_ +  "; " }
$PrL2 | ForEach { $_ -replace '\r', ' '}

尝试3

$PrL = (Get-CimInstance -Class CIM_Printer).Name | Sort-Object
$PrL | ForEach-Object { $_ -replace '\n', " "}

正确解决方案

PowerShell里处理数组转分隔符字符串最简便的方法是用-join运算符,无需替换换行符,直接对数组操作即可:

$PrL = (Get-CimInstance -Class CIM_Printer).Name | Sort-Object
$PrL -join "; "

如果要把结果保存到变量中:

$PrL = (Get-CimInstance -Class CIM_Printer).Name | Sort-Object
$formattedPrinters = $PrL -join "; "

之前尝试失败的原因

  • 尝试1:ForEach-Object用法错误,直接对整个数组$PrL做替换,且\r不是PowerShell中有效的换行符(PowerShell换行符为n`,Windows系统标准换行是rn),同时未加入所需的分号分隔符。
  • 尝试2:每个元素后追加; 会导致最后一个元素末尾多一个多余的分号,后续的替换操作也无法将多个行合并为单行。
  • 尝试3:对单个元素替换\n毫无意义,因为单个打印机名称中不存在换行符,无法实现合并效果。

内容的提问来源于stack exchange,提问作者VarmintLP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:33:36