为什么Write-Output在PowerShell类方法中不起作用?

Sam*_*abu 5 powershell class powershell-5.0 powershell-v5.1

我试图使用输出变量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()
Run Code Online (Sandbox Code Playgroud)

是否有任何特定原因导致Write-Output在类方法中不起作用?

mar*_*sze 9

来自文档:

在类方法中,除了return语句中提到的对象之外,没有对象被发送到管道.代码中没有意外输出到管道.

这与PowerShell函数处理输出的方式有根本的不同,其中一切都进入管道.

如果你需要输出只是为了调试或其他什么,你可以使用Write-Host,Write-Warning等基本上只是写入控制台.


Mat*_*sen 5

要添加到marsze的出色答案中

将方法签名([string] sampleMethod())视为合同 -您向用户保证,如果他们使用0个参数调用该方法,它将始终只返回一个[string]对象

Write-Output在方法执行期间允许任意数量的语句将违反该合同