Powershell yanlış çıktı veriyor

Sep 01 2020

İşlemi herkesin yeniden üretebilmesi için basitleştirdim (betiğimde bu bir iş akışı içinde bir sorun, hiçbir işlev dahil değil, bu nedenle bu değerleri değişkenlere kaydedemiyorum ve sonra bunları konsolla gösteremiyorum). İlk şey powershell ISE kullanmaktır.

    function AAA {
        $datum1 = New-Object -TypeName PSObject
        $datum1 | Üye-Üye-Tipi Not Özellik-İsim SütunA-Değer "AA"
        $datum1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB"
        return $datum1
    }
    
    function BBB {
        $datum2 = New-Object -TypeName PSObject
        $datum2 | Üye-Üye-Tipi Not Özellik-İsim SütunA-Değer "AA"
        $datum2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC"
        $datum2 | Üye-Üye-Tipi Not Özelliği -Ad SütunD-Değer "DD"
        $datum2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE"
        $datum2 | Üye-Üye-Tipi Not Özelliği -Ad SütunF -Değer "FF"
        $ datum2 döndür
    }
    
    AAA
    BBB

Çıktı:

    Sütun A Sütun B
    ------- -------
    AA BB     
    AA             

Neden olduğuna dair fikri olan?

DÜZENLEME: Bu "sh1t" yi şu şekilde çözdüm

function AAA {
    $ datum1 = Yeni Nesne -Tip Adı PSObject
    $ datum1 | Üye-Üye-Tipi Not Özelliği-İsim Dizini -Değer "1"
    $ datum1 | Üye-Üye-Tipi Not Özellik-İsim SütunA-Değer "AA"
    $datum1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB"
    $datum1
}

function BBB {
    $ datum2 = Yeni Nesne -Tip Adı PSObject
    $ datum2 | Üye-Üye-Tipi Not Özelliği-İsim Dizini -Değer "2"
    $datum2 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA"
    $datum2 | Üye-Üye-Tipi Not Özelliği -Adı SütunC-Değer "CC"
    $datum2 | Add-Member -MemberType NoteProperty -Name ColumnD -Value "DD"
    $datum2 | Üye-Üye-Tipi Not Özelliği -Ad SütunE-Değer "EE"
    $datum2 | Add-Member -MemberType NoteProperty -Name ColumnF -Value "FF"
    $datum2
}

AAA |? {$ _. Dizin -eq "1"} | FT 
BBB |? {$ _. Dizin -eq "2"} | FT

Neyse, birisi neler olduğunu açıklayabilir mi? Sebebini gerçekten anlamak ve ilgili bilgileri aramak istiyorum

EDIT2: Palle Due'ye Yanıtla,

biraz daha karmaşıklık kattığı için senaryom için hiç çalışmıyor. Out-Hostbir seçenek değil. Sağlanan örnek:

    iş akışı Get-Report
        {
            param ([dize []]$computername)
            foreach -Parallel ($bilgisayar girişi $computername) {
                sequence {
                    InlineScript {
                        $AAA = Invoke-Command -ScriptBlock {
                            $datum1 = New-Object -TypeName PSObject
                            $datum1 | Üye-Üye-Tipi Not Özelliği-İsim Dizini -Değer "1"
                            $datum1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA"
                            $datum1 | Üye-Üye-Tipi Not Özelliği -Ad SütunB-Değer "BB"
                            dönüş $datum1
                        }
                        $AAA | Out-Host
        
                        $BBB = Invoke-Command -ScriptBlock {
                            $datum2 = Yeni Nesne -TürAdı PSObject
                            $datum2 | Add-Member -MemberType NoteProperty -Name Index -Value "2"
                            $datum2 | Üye-Üye-Tipi Not Özellik-İsim SütunA-Değer "AA"
                            $datum2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC"
                            $datum2 | Üye-Üye-Tipi Not Özelliği -Ad SütunD-Değer "DD"
                            $datum2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE"
                            $datum2 | Üye-Üye-Tipi Not Özelliği -Ad SütunF -Değer "FF"
                            dönüş $datum2
                        }
                        $BBB | Out-Host
                    } #endinlinescript
                } #endsequence
            } #endforeach
        } #endWF
        
        $results = @()
        $results = Get-Rapor -Verbose -Bilgisayar "localhost", "localhost"
        $ sonuçlar | FT

Yanıtlar

PalleDue Sep 01 2020 at 15:29

Kolay düzeltme, çıktıyı şu şekilde yönlendirmektir Out-Host:

function AAA {
    $datum1 = New-Object -TypeName PSObject $datum1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA"
    $datum1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB" return $datum1
}
    
function BBB {
    $datum2 = New-Object -TypeName PSObject $datum2 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA"
    $datum2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC" $datum2 | Add-Member -MemberType NoteProperty -Name ColumnD -Value "DD"
    $datum2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE" $datum2 | Add-Member -MemberType NoteProperty -Name ColumnF -Value "FF"
    return $datum2
}
    
AAA | Out-Host
BBB | Out-Host

çıktıyı verir:

ColumnA ColumnB
------- -------
AA      BB     

ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF

Mesele şu ki, powershell dört veya daha az üyeli özel nesneleri yatay olarak çıkarmayı seviyor. Beş veya daha fazla üye ile dikey olarak çıktı alınır. Ve sonra bazı garip düzgünlük prensibi devreye girer: Bir satırda birden fazla nesnenin çıktısını alırsanız, powershell aynı formatı korumaya çalışacaktır. Dolayısıyla, yatay olarak başladıysanız, yatay olarak devam edecek ve yalnızca ilk özel nesneyle aynı ada sahip üyeleri çıkaracaktır. Dikey olarak başlarsanız, dikey olarak devam eder ve tüm isimleri verir.

Bu yüzden gidersen:

BBB
AAA

Alacaksın

ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF

ColumnA : AA
ColumnB : BB

yerine.

Bunun için herhangi bir belge bulamadım. Onlar sadece kendi gözlemlerim.