5

ハッシュテーブルを渡す関数があります。関数内で1)Write-Hostを介して画面にテキストを表示します。2)ハッシュテーブルの内容を1回表示します。これにより、通常の2列の「名前」/「値」ハッシュテーブルが表示されます。3)関数を返す$true$false

MyFunction $MyHashTable


関数内:

param (
    [hashtable]$TheHashTable
)
#  Sundry things here and then:
write-host "Some information to display on-screen`n"
#  and then:
$TheHashTable


後者の期待される結果は次のようなものです。

Some information to display on-screen

Name    Value
----    -----
a       b
c       d


そして最終的に:

return $true #  If what I'm doing worked; otherwise, $false


上記のように関数を呼び出すと、Write-Host画面に表示されるテキストに加えて、ハッシュテーブルの内容の2列の表示、および関数が返す内容に応じてテキストTrueまたは画面が表示されます。False

私がそれをこのように呼ぶならば:

$myResult = MyFunction $MyHashTable


...関数の戻り値を$myResult-でキャプチャしますが、ハッシュテーブルの内容の表示は抑制されます。これを行うと、それも抑制されます。

if ( (MyFunction $MyHashTable) -eq $true ) {
    #   do something
} else {
    #   do something different
}


する方法はありますか

  1. 関数がどのように呼び出されても、ハッシュテーブルの内容が表示されるようにします。
  2. いずれにせよ、ステートメントが実行されたときの画面表示を抑制しますか?TrueFalseReturn
4

1 に答える 1

15

関数によって生成された出力はすべてパイプラインに送信されます。これはまさにあなたが書くときに起こることです:

$TheHashTable

パイプラインの代わりにこの値を画面に書き込みたい場合は、Write-Host前の例のように使用する必要があります。

Write-Host $TheHastTable

ただし、上記のコードを使用すると、おそらく次のような出力が得られます。

PS>$table = @{ "test"="fred";"barney"="wilma"}
PS> write-host $table
System.Collections.DictionaryEntry System.Collections.DictionaryEntry

どうやらWrite-Hostあなたが期待するフォーマットを適用していません、これは次のOut-Stringように使用することで修正できます:

PS> $table | Out-String | Write-Host

その結果:

Name                           Value
----                           -----
barney                         wilma
test                           fred
于 2012-11-12T23:54:39.197 に答える