Powershell"加入"

roo*_*kie 12 powershell join

叫我傻,但我用这个丢了我的头发.

我有两个来自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)


Jay*_*kul 5

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)


rer*_*run 0

您始终可以将所需的任何属性添加到具有所需内容的自定义 powershell 对象中,然后转储 cvs。查看此页面,看看它是否满足您的需求。