2009-12-05 22 views
12

Bana aptal deme, ama ben bu ile saçımı kaybediyorum.Powershell "birleştirme"

$cpu | Select-Object Name, Description | ConvertTo-Csv -NoTypeInformation 

ve

$mb | Select-Object Manufacturer, Product | ConvertTo-Csv -NoTypeInformation 

: Ben çıktılı her birinden bir CSV dosyası filtre edebilir, Şimdi

$cpu = Get-WmiObject -Class Win32_Processor 
$mb = Get-WmiObject -Class Win32_BaseBoard 

:

Ben Get-WmiObject iki sonuç var Ama ... bu iki çıkışa nasıl girebilir ve günah yapabilirim her iki gle CSV çıkışı? Bir şey gibi:

( 
    ($cpu | Select-Object Name, Description) + 
    ($mb | Select-Object Manufacturer, Product) 
) | ConvertTo-Csv -NoTypeInformation 

(. Elbette, bu sözdizimi geçersiz Sadece noktayı göstermek için)

Her zaman neye ihtiyacınız olduğunu özel powershell nesnesine ihtiyaç ve sonra dökümü olursa olsun özellikler ekleyebilir

cevap

0

cvs. Bu page'a bir göz atın ve ihtiyacınız olan şeylerin uygun olup olmadığını görün.

+0

daha iyi OLMALIDIR (Add-Üye yerine daha basit bir yol ... – rookie

+0

PowerShell 2'de, @dangph – Jaykul

1

Buna benzer nasıl?

echo $cpu $mb | Select-Object Name, Description, Manufacturer, Product | ConvertTo-Csv -NoTypeInformation 
+0

örneğine bakın. Bu aslında dört sütun döndürür, ancak * TWO * satırlarında. İki değer ve iki sıfır içeren her satır. Şimdi, eğer bir çeşit “sendika” yapabilirsek… – rookie

+0

“-join” a, “b”, onu nasıl kullanacağımı anlamaya çalışıyorum. – YOU

12

Aşağıdakiler için Powershell V2'ye ihtiyacınız var.

$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 
+0

Bu, OP'ler sorusu için mükemmel bir şekilde çalışsa da, burada çok sayıda veriye katılmayı arayanlar alternatif bir strateji izlemek zorunda kalacaklar. – KyleMit

+1

@KyleMit, 'Select-Object' hesaplanmış özellikleriyle sizin için yararlı olabilir. –

0

Sen diğerinden özellikleri eklemek sonra nesne ya başlayabilir ve daha:

$cpu | Select-Object Name, Description | 
    add-member noteproperty Manufacturer $mb.Manufacturer -PassThru | 
    add-member noteproperty Product  $mb.Product  -PassThru 
0

bu aradığınız şey mi? Biraz daha uzun süre beklediğimden, çünkü hem $ cpu hem de $ mb'nin Ad ve Üretici özellikleri var. Ancak asıl fikir, hashing yoluyla özel nesnelerdir.

($cpu | Select-Object Name, Description),($mb | Select-Object Manufacturer, Product) | 
     Select-Object @{name='NameOrManu';expr={$_.Name + $_.Manufacturer}}, 
        @{name='DescrOrProd';expr={$_.Description + $_.Product}} | 
     ConvertTo-Csv -NoTypeInformation 
5

Bunu yapmanın bir Join-Objectfunction on PoshCode var ama Join-Collection içine gömülü ve ihraç değil.

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 
    } 
} 

Bunu tanımladıktan sonra, bu gibi kullanabilirsiniz:

Join-Object (Get-WmiObject -Class Win32_Processor) (Get-WmiObject -Class Win32_BaseBoard) | 
Select Name, Description, Manufacturer, Product 

Veya değişkenleri tutmak ve bu seversiniz:

$cpu = Get-WmiObject -Class Win32_Processor 
$mb = Get-WmiObject -Class Win32_BaseBoard 

Join-Object $cpu $mb | Select Name, Description, Manufacturer, Product