【发布时间】:2014-07-10 08:48:57
【问题描述】:
当数据来自多个 cmdlet 时,我曾多次在导出数据时遇到问题。
例如:我正在尝试使用 WMI 导出打印机列表和其他相关信息,但提取所有信息需要两个 cmdlet:
Get-WmiObject -Class Win32_Printer `
-ComputerName $Computer -Credential $cred
还有……
Get-WmiObject -Class Win32_PrinterConfiguration `
-ComputerName $Computer -Credential $cred
我创建了一个对象来将数据导入以便可以导出:
$CSVData = New-Object PSObject
$CSVData | Add-Member -MemberType NoteProperty -Name "Name" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "DriverName" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "Location" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "PrintProcessor" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "PortName" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "Duplex" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "Color" -Value ""
$CSVData | Add-Member -MemberType NoteProperty -Name "PrintQuality" -Value ""
$CSVData.Name = @()
$CSVData.DriverName = @()
$CSVData.Location = @()
$CSVData.PrintProcessor = @()
$CSVData.PortName = @()
$CSVData.Duplex = @()
$CSVData.Color = @()
$CSVData.PrintQuality = @()
我试着把它排成这样:
$PrinterConfig = Get-WmiObject -Class Win32_PrinterConfiguration `
-ComputerName $Computer -Credential $cred |
Select-Object Duplex,
Color,
PrintQuality
$CSVData.Duplex += $PrinterConfig.Duplex
$CSVData.Color += $PrinterConfig.Color
$CSVData.PrintQuality += $PrinterConfig.PrintQuality
而且,像这样:
$PrinterInfo = Get-WmiObject -Class Win32_Printer `
-ComputerName $Computer -Credential $cred |
Select-Object Name,
DriverName,
Location,
PrintProcessor,
PortName |
ForEach-Object {
$CSVData.Name += $_.Name
$CSVData.DriverName += $_.DriverName
$CSVData.Location += $_.Location
$CSVData.PrintProcessor += $_.PrintProcessor
$CSVData.PortName += $_.PortName
}
然后我像这样导出:
$CSVData | Export-Csv -Path c:\temp\printers.csv $OutDir
问题是实际上没有导出任何有用的数据,我不确定如何正确组合这两个 cmdlet 的输出。
很可能有一种更优雅的方式来做到这一点......
请帮忙!
【问题讨论】:
标签: object powershell formatting output cmdlet