Направление вывода на стандартный вывод в функции без вызова вызывающего кода - PullRequest
1 голос
/ 17 декабря 2011

Я написал несколько скриптов Powershell, которые развертывают программное обеспечение для клиента. Я использовал Write-Host для вывода большого количества информации, чтобы можно было наблюдать за процессом развертывания, и они вызывали это из одного из своих приложений развертывания, используя Start-Transcript для захвата этого вывода.

Однако им также необходимо иметь возможность вызывать некоторые из этих сценариев из другого приложения, которое может захватывать только вывод из stdout. Это означает, что Write-Host не будет работать там, поскольку он выводит информацию только на консоль или хост и не направляется на стандартный вывод (верно?)

Я думал, что я мог бы изменить код для использования Write-Out, за исключением того, что это вызывает другую проблему. Так как я использую функции и поскольку функции в Powershell "возвращают" все , которое отправляется на стандартный вызов вызывающей стороне, которая, вероятно, испортит любой мой код, который получает выходные данные из функции.

Есть ли способ направить вывод на стандартный вывод из функции, не обращаясь к вызывающему коду в качестве вывода самой функции? Вот пример проблемы:

function Test-Output ([int]$number) {
    Write-Output "This is a string"
    return $number
}

[int]$someNumber = Test-Output 10

$someNumber

Если вы запустите приведенный выше код, вы увидите ошибку, потому что Powershell пытается присвоить «This is a string» целому числу $someNumber. Если вы измените переменную на string, то она получит полный вывод функции (это строка 10) и присвоит ее переменной.

Спасибо за любые предложения, которые вы можете дать!

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Вывод функций и стандартный вывод - это одно и то же, поэтому вызывающий код будет видеть все, что выводится в поток стандартного вывода. В этом случае я бы предложил использовать командлет Write-Progress, чтобы сообщить о ходе работы конечному пользователю и оставить фактический вывод функции в покое.

1 голос
/ 17 декабря 2011

Попробуйте это.

function Add-Numbers {
    param (
        [double] $FirstNumber,
        [double] $SecondNumber
    )

    Write-Host "Hello World"

    return ($FirstNumber + $SecondNumber)
}

$result = Add-Numbers 1 2

#Write-Host "Result is $result"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...