Я написал следующие варианты функции для возврата объекта 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" ведет журнал, чтобы доказать, что значение, записываемое в конвейер, не равно нулю, но функция не возвращает никакого значения.
Как это может быть? Это ошибка PowerShell?
Спасибо заранее.
Write-Host
. Write-Output отправляет указанные объекты следующей команде в конвейере. Если команда является последней командой в конвейере, объекты отображаются в консоли. Взято из technet.microsoft.com/en-us/library/hh849921.aspx< /а> - person Neil Barnwell   schedule 12.04.2013Write-Output
делает то же самое, что иWrite-Host
, заключается в том, что он берет элементы из конвейера и записывает их в конвейер. В PowerShell, когда элементы выпадают из конца конвейера, они записываются в консоль. По сути, в конце есть что-то вроде неявногоWrite-Host
. Это может варьироваться в зависимости от реализации хоста, но OOTB ведет себя именно так. - person Neil Barnwell   schedule 12.04.2013Write-Output
в качестве последней команды в конвейере, вы можете оставить ее, и это не будет иметь никакого значения. - person Neil Barnwell   schedule 12.04.2013