Почему Write-Output не работает внутри метода класса PowerShell? - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь вывести переменные, используя Write-Output, но это не работает внутри метода класса PowerShell.Write-Host работает.См. Пример кода ниже.

class sample {
  [string] sampleMethod() {
    $output = "Output message"
    try {
      Write-Output $output
      throw "error"
    }
    catch {
      Write-Output $output
      $_
    }
    return "err"
  }
}    

$obj = [sample]::new()
$obj.sampleMethod()

Есть ли какая-либо конкретная причина, по которой Write-Output не работает внутри метода класса?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Чтобы добавить к отличный ответ Марша :

Думайте о подписи метода ([string] sampleMethod()) как о контракте - вы обещаете пользователю, что если он вызоветметод с 0 параметрами всегда будет возвращать ровно один [string] объект .

Разрешение произвольного количества операторов Write-Output во время выполнения метода приведет к нарушению этого контракта !

0 голосов
/ 11 октября 2018

Из документов :

В методах класса никакие объекты не отправляются в конвейер, кроме тех, которые упомянуты в операторе возврата.Нет случайного вывода в конвейер из кода.

Это принципиально отличается от того, как функции PowerShell обрабатывают вывод, когда все идет в конвейер.

Если вам нужен вывод только дляотладка или что-то еще, вы можете использовать Write-Host, Write-Warning и т. д., которые в основном просто записывают в консоль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...