2012-11-12 14 views
3

我有一個函數,我通過一個哈希表。在我想要的功能中1)通過寫主機在屏幕上顯示文本; 2)顯示一次散列表的內容 - 提供通常的兩列「名稱」/「值」散列表顯示。 3)使功能返回$true$falsePowershell:哈希表內容不顯示在函數內

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. 無論如何,抑制的屏幕顯示TrueFalseReturn語句執行時?

回答

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 
+1

作品一樣標榜。謝謝。我真的開始喜歡這個網站。 :) – marst12017