PowerShell中Get-PrintConfiguration输出到屏幕和文件的异常问题咨询
问题原因分析
- 直接输出内容被截断:PowerShell控制台默认最多展示5个对象属性,且会根据控制台宽度自动截断长内容,仅为展示限制,实际对象属性完整。
- 循环调用Format-Table生成多个独立表格:Format-*系列cmdlet输出的是格式化渲染对象而非原始数据,每次循环单独调用都会生成独立的表格结构,无法自动合并。
- 导出CSV体积过大存在冗余:Get-PrintConfiguration返回的是CIM实例对象,包含大量嵌套的系统内置属性、父类属性,直接导出会将所有属性序列化;且循环内使用-Append追加导出也会增加不必要的写入开销。
修正方案
场景1:控制台完整展示所有打印机配置(合并为单个表格)
先统一收集所有打印机配置对象,再一次性格式化输出,按需指定需要展示的属性即可:
# 批量收集所有打印机配置 $allPrintConfig = Get-Printer | ForEach-Object { Get-PrintConfiguration -PrinterName $_.Name } # 自定义展示属性,自动调整列宽,长内容自动换行 $allPrintConfig | Format-Table -Property PrinterName, Collate, Color, DuplexingMode, PaperSize -AutoSize -Wrap
可根据实际需要调整-Property后的属性列表。
场景2:导出为精简无冗余的CSV文件
提前筛选需要的属性,一次性导出即可,无需循环追加:
$filename = 'PrintConfiguration' $outputPath = "d:\$((Get-Date).ToString('yyyy-MM-dd'))_${env:COMPUTERNAME}_$filename.csv" # 筛选仅需要导出的属性后统一导出 Get-Printer | ForEach-Object { Get-PrintConfiguration -PrinterName $_.Name | Select-Object PrinterName, Collate, Color, DuplexingMode, PaperSize, PrintQuality } | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8
如果需要导出更多配置项,将对应属性名添加到Select-Object的参数列表即可。
内容的提问来源于stack exchange,提问作者Joshua Chung
相关产品推荐
相关产品推荐

