2017-06-19 41 views
3

這是一個PowerShell錯誤?它只會在腳本中打印$ var1,而不是$ var2(我不能將它管道到任何對象)。但是當我複製並粘貼到命令行時,它工作正常。powershell寫入輸出錯誤與腳本中的多個對象?

$var1 = New-Object -TypeName PSObject -Prop @{'data1'=6} 
write-output $var1 
$var2 = New-Object -TypeName PSObject -Prop @{'data2'=12} 
write-output $var2 


data1 
------ 
6 

編輯:我想我開始得到它。這是一個很好的例子。您可以從第二個對象只能輸出或過程的通用字段:

$var1 = New-Object PSObject -prop @{data1=6;data3=5} 
$var1 
$var2 = New-Object PSObject -prop @{data2=12;data3=6} 
$var2 


data1 data3 
----- ----- 
    6  5 
      6 
+0

[PowerShell:寫入輸出只寫入一個對象]的可能重複(https://stackoverflow.com/questions/40257475/powershell-write-output-only-writes-one-object) – gms0ulman

回答

3

認爲這是Write-Output cmdlet的預期行爲。它向管道發送對象(如果它是管道中的最後一個cmdlet,它將顯示給主機)。它期望沿管道傳遞的所有對象具有相同的屬性。

在你的例子中,你有一個屬性爲data1的對象,第二個對象爲data2。如果你請爲對象使用相同的屬性,它會按照您期望:它是這樣

$var1 = New-Object -TypeName PSObject -Prop @{'data1'=6} 
write-output $var1 
$var2 = New-Object -TypeName PSObject -Prop @{'data1'=12} 
write-output $var2 

data1 
----- 
    6 
    12 

想,cmdlet的正常輸出一個單一的,可預測的,對象(GET-ADUser便有輸出ADUser便有對象。 )如果Get-AdUser將少量AdUser,AdGroup,Mailbox和NTFSPermission作爲一個數據流輸出,則管道和其他cmdlet將無法處理它。

編輯:另外,如果您只是在不使用Write-Host的情況下查看屏幕上的信息,請考慮Write-Information

+0

「...當它[Out-Default]將流發送到Format-Table,該命令需要生成列,它通過查看FIRST OBJECT的屬性 - 這些成爲列,如果第一個Object有2個屬性,即使流中的所有其他對象都有10個屬性,也可以獲得2列表。「 - https://blogs.msdn.microsoft.com/powershell/2006/04/29/how-powershell-formatting-and-outputting-really-works/ – js2010