1
我寫了一個函數的以下變化返回一個System.Messaging.MessageQueue
對象:爲什麼PowerShell函數不能返回MessageQueue對象?
set-strictmode -version latest
add-type -AssemblyName System.Messaging
$VerbosePreference = 'Continue'
$DebugPreference = 'Continue'
function Get-MsmqQueue1 {
New-Object "Messaging.MessageQueue" -Args '.\private$\barneytest'
}
function Get-MsmqQueue2 {
$q = New-Object "Messaging.MessageQueue" -Args '.\private$\barneytest'
$q
}
function Get-MsmqQueue3 {
$q = New-Object "Messaging.MessageQueue" -Args '.\private$\barneytest'
Write-Output $q
}
function Get-MsmqQueue3a {
$q = New-Object "Messaging.MessageQueue" -Args '.\private$\barneytest'
if ($q) {
Write-Debug "Successfully created $($q.QueueName)"
} else {
Write-Error "No queue object created"
}
Write-Output $q
}
$q = Get-MsmqQueue3a
$q
if ($q) {
Write-Debug $q.QueueName
} else {
Write-Error "No queue object returned"
}
他們沒有返回一個對象。它以某種方式被PowerShell吞噬。請注意,「3a」版本具有日誌記錄以證明它正在寫入管道的值爲非空,但沒有值從函數返回。
這怎麼可能?這是一個PowerShell錯誤?
非常感謝提前。
3和3a將無法正常工作。寫輸出將對象打印到屏幕上並不返回任何內容。 1或2應該都可以工作,但我無法自己測試,因爲我沒有安裝消息隊列 – 2013-04-11 19:42:22
對不起,我相信你會用'Write-Host'來混淆它。 「Write-Output將指定的對象發送到管道中的下一個命令,如果該命令是管道中的最後一個命令,則這些對象將顯示在控制檯中。」取自http://technet.microsoft.com/en-us/library/hh849921.aspx – 2013-04-11 20:34:49
我每天都會學到新東西。謝謝 – 2013-04-12 11:12:16