5

我有一个向其传递哈希表的函数。在我想要的功能中 1)通过 Write-Host 在屏幕上显示文本;2) 一次显示哈希表的内容——提供通常的两列“名称”/“值”哈希表显示。3) 让函数返回$trueor $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. 在任何情况下,抑制屏幕显示TrueFalse执行Return语句的时间?
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 回答