这是我从一个更大的脚本中提炼出来的。我遇到的问题是,输出文件不能将"sdfsdfad“保存到文件,而是打印到控制台"sdfsdfad”。
$ErrorActionPrefence = "Stop"
$s1=@'
for($i=0; $i -lt 10; $i++) {
write-host "sdfsdfad"
}
'@
$s1 > $env:userprofile\Documents\s1.ps1
$sb = {
$ErrorActionPreference = "Stop"
Set-PSDebug -Trace 0
$alog = "$env:userprofile\Documents\a2.txt"
$null > $alog
invoke-expression $env:userprofile\Documents\s1.ps1 | out-file -Append $alog
}
start-job -ScriptBlock $sb | Receive-job -wait
Get-Content $env:userprofile\Documents\a2.txt控制台输出应该在"~\Documents\a2.txt“中:
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad
sdfsdfad发布于 2021-11-04 20:00:11
Write-Host to output -使用 output.Invoke-Expression调用脚本和avoid it in general -使用& ( call operator )调用名称或路径基于变量或引号的命令。在您无法控制使用Write-Host的脚本的情况下,您可以使用6>&1将输出重定向到成功输出流,以便通过管道发送它,以便Out-File保存它。
请注意,这只适用于PowerShell v5及更高版本。
有关捕获Write-Host输出的详细信息,请参阅this answer;有关6>&1等重定向语法的信息,请参阅this answer。
应用于您的代码(如果您确实必须坚持使用Write-Host):
& $env:userprofile\Documents\s1.ps1 6>&1 | out-file -Append $alog或者,更简单地说,假设>>实际上是Out-File -Append的别名
& $env:userprofile\Documents\s1.ps1 6>&1 >> $alog注意:
bash等与POSIX兼容的shells不同,重定向的顺序并不重要。或者,更简单的方法是捕获所有(*)输出流:
& $env:userprofile\Documents\s1.ps1 *>> $aloghttps://stackoverflow.com/questions/69844964
复制相似问题