叫我傻,但我用这个丢了我的头发.
我有两个来自Get-WmiObject的结果:
$cpu = Get-WmiObject -Class Win32_Processor
$mb = Get-WmiObject -Class Win32_BaseBoard
Run Code Online (Sandbox Code Playgroud)
现在,我可以从每个文件中过滤并输出CSV文件:
$cpu | Select-Object Name, Description | ConvertTo-Csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
和
$mb | Select-Object Manufacturer, Product | ConvertTo-Csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
但是......我怎么能加入这两个输出并从两个输出单个CSV输出?就像是:
(
($cpu | Select-Object Name, Description) +
($mb | Select-Object Manufacturer, Product)
) | ConvertTo-Csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
(当然,这种语法无效.只是为了表明这一点)
dan*_*gph 12
您需要以下Powershell V2.
$cpu = Get-WmiObject -Class Win32_Processor
$mb = Get-WmiObject -Class Win32_BaseBoard
$props = @{
Name = $cpu.Name
Description = $cpu.Description
Manufacturer = $mb.Manufacturer
Product = $mb.Product
}
New-Object PSObject -Property $props | ConvertTo-Csv -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)
Join-Object PoshCode上有一个函数用于执行此操作,但它隐藏在内部Join-Collection而不是导出.
function Join-Object {
Param(
[Parameter(Position=0)]
$First
,
[Parameter(Position=1,ValueFromPipeline=$true)]
$Second
)
BEGIN {
[string[]] $p1 = $First | gm -type Properties | select -expand Name
}
Process {
$Output = $First | Select $p1
foreach($p in $Second | gm -type Properties | Where { $p1 -notcontains $_.Name } | select -expand Name) {
Add-Member -in $Output -type NoteProperty -name $p -value $Second."$p"
}
$Output
}
}
Run Code Online (Sandbox Code Playgroud)
一旦你定义了它,就可以像这样使用它:
Join-Object (Get-WmiObject -Class Win32_Processor) (Get-WmiObject -Class Win32_BaseBoard) |
Select Name, Description, Manufacturer, Product
Run Code Online (Sandbox Code Playgroud)
或保留您的变量,并执行以下操作:
$cpu = Get-WmiObject -Class Win32_Processor
$mb = Get-WmiObject -Class Win32_BaseBoard
Join-Object $cpu $mb | Select Name, Description, Manufacturer, Product
Run Code Online (Sandbox Code Playgroud)