2017-06-19 15 views
3

これはパワーシェルのバグですか?スクリプト内で$ var1ではなく$ var1だけを出力します(どこでもオブジェクトにパイプすることはできません)。しかし、コピーしてコマンドラインに貼り付けるとうまくいきます。スクリプト内に複数のオブジェクトを持つ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 

編集:私はそれを取得し始めていると思う。ここには奇妙な例が​​あります。あなたは可能な第2のオブジェクトからのみ出力またはプロセスの一般的なフィールド:

$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:書き込み出力で1つのオブジェクトしか書き込めません](https://stackoverflow.com/questions/40257475/powershell-write-output-only-writes-one-object) – gms0ulman

答えて

3

私はこれがWrite-Outputコマンドレットの正常な動作ですを考える。オブジェクトをパイプラインの下に送ります(パイプラインの最後のコマンドレットであればホストに表示されます)。パイプラインを流れるオブジェクトのすべてが同じプロパティを持つことが予想されます。

例では、1つのオブジェクトがdata1、もう1つのオブジェクトが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 

と思いますが、コマンドレット正常に出力シングル、予測可能で、オブジェクト(ゲット・AdUser出力AdUserオブジェクトを。 )Get-AdUserがAdUser、AdGroup、Mailbox、およびNTFSPermissionsを1つのデータストリームとして出力すると、パイプラインや他のコマンドレットでは処理できなくなります。

編集:脇の下として、Write-Hostを使わずに画面に情報を表示するだけの場合は、Write-Informationと考えてください。

+0

"... [Out-Default]はストリームをFormat-Tableに送ります。そのコマンドはカラムを生成する必要があります。これは、FIRST OBJECTのプロパティを見ることによって行われます。これらはカラムになります。ストリーム内の他のすべてのオブジェクトが10のプロパティを持っていても、2列のテーブルを取得できます。 - https://blogs.msdn.microsoft.com/powershell/2006/04/29/how-powershell-formatting-and-outputting-really-works/ – js2010

関連する問題