我有一个传递哈希表的函数。在我想要的功能中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
显示的文字,以及哈希表内容的两栏显示 - 和屏幕上的文本True
或False
,具体取决于函数返回的内容。
如果我这样称呼它:
$myResult = MyFunction $MyHashTable
...我在$myResult
中捕获函数的返回值 - 但是哈希表内容的显示是被抑制。如果我这样做也会被抑制:
if ( (MyFunction $MyHashTable) -eq $true ) {
# do something
} else {
# do something different
}
有没有办法
True
语句时禁止 False
和Return
的屏幕显示?答案 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