System.Messaging.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」バージョンには、パイプラインに書き込んでいる値がnullではなく、関数から値が返されないことを証明するロギングがあることに注意してください。
どうすればいいの?これは PowerShell のバグですか?
よろしくお願いします。