Powershell:哈希表内容未在函数中显示

时间:2012-11-12 23:24:55

标签: powershell hashtable

我有一个传递哈希表的函数。在我想要的功能中1)通过Write-Host在屏幕上显示文本; 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显示的文字,以及哈希表内容的两栏显示 - 屏幕上的文本TrueFalse,具体取决于函数返回的内容。

如果我这样称呼它:

$myResult = MyFunction $MyHashTable


...我在$myResult中捕获函数的返回值 - 但是哈希表内容的显示是被抑制。如果我这样做也会被抑制:

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

有没有办法

  1. 确保显示哈希表内容,无论函数如何调用;
  2. 在任何情况下,执行True语句时禁止 FalseReturn的屏幕显示?

1 个答案:

答案 0 :(得分:8)

您的函数生成的任何输出都将沿管道发送。这正是你写的时候发生的事情:

$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