我写了几个Powershell脚本,为客户端部署软件。我使用Write-Host
输出了大量信息,以便可以监视部署的进度,并使用Start-Transcript
从其中一个部署应用程序调用此信息来捕获此输出。
但是,他们还需要能够从另一个只能从stdout捕获输出的应用程序调用其中一些脚本。这意味着Write-Host将无法在那里工作,因为它仅输出到控制台或主机,并且不会定向到stdout(正确吗?)
我的想法是我可以更改代码以使用Write-Out
,但这会导致另一个问题。因为我使用函数,因为Powershell中的函数“返回”所有转到stdout到调用者,这可能会搞砸我从代码中检索输出的任何代码。
有没有办法从函数直接输出到stdout而不将它作为函数本身的输出转到调用代码?以下是问题的一个示例:
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)并将其分配给变量。
感谢您提出的任何建议!
答案 0 :(得分:2)
函数输出和stdout是相同的,所以调用代码将看到输出到stdout流的任何内容。在这种情况下,我建议使用Write-Progress
cmdlet向最终用户报告进度并单独保留实际功能输出。
答案 1 :(得分:1)
试试这个。
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"