如何将PowerShell中打印机列表变量转为逗号分隔格式?
解决PowerShell打印机列表输出格式问题
核心问题原因
你当前获取的$PrinterList是包含Name属性的对象数组,而非纯字符串数组,所以关联到PSCustomObject的Printers字段后,输出时会显示对象的结构(@{Name=...})。
两种解决方式
方式一:创建对象前直接处理成字符串
修改打印机列表的获取逻辑,直接提取Name属性值并拼接成逗号分隔的字符串:
# 获取纯字符串格式的打印机名称列表 $PrinterList = @(Get-WmiObject Win32_PNPEntity -ComputerName $Computer) | Where-Object {$_.Name -like "*prt*"} | Select-Object -ExpandProperty Name # 创建PSCustomObject时直接传入拼接好的字符串 $result = [PSCustomObject]@{ Printers = $PrinterList -join ', ' } # 输出结果 $result | Select-Object Printers | Format-Table -AutoSize | Out-String | Write-Host
方式二:针对已存在的$result对象做输出处理
如果已经生成了包含对象数组的$result,可以在输出时通过计算属性转换格式:
# 输出时将Printers字段的对象数组提取Name后拼接 $result | Select-Object @{ Name = 'Printers' Expression = { $_.Printers.Name -join ', ' } } | Format-Table -AutoSize | Out-String | Write-Host
关键说明
Select-Object -ExpandProperty Name:直接提取对象的Name属性值,得到纯字符串数组,而非带属性的对象。-join ', ':将字符串数组拼接成单个逗号分隔的字符串,符合你需要的输出格式。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

