我是Powershell noobie,我正在写第二个剧本,所以请耐心等待。我正在尝试执行write-host
并输出我的写主机消息以及时间戳以及哪些计算机正在完成我的各种脚本块到文本文件,我遇到了使用哪种语法来解决问题的问题。
我尝试了以下测试目的。一旦我将语法缩小,这将转到服务器 - 现在它将转到我的本地C:
驱动器。
write-host "folders created successfully $env:computername" >> c:\scripts\testlog.txt
我看到的行为是正在创建的文本文件,但其中没有内容 - 全部为空白。
答案 0 :(得分:7)
Write-Host
不使用标准输出。它总是直接输出到控制台。 Write-Output
确实输出到标准输出。
要做到这一点,你可以使用:
Write-Output "folders created successfully $env:computername" >> C:\scripts\testlog.txt
但是,您也可以使用Add-Content
:
Add-Content -Path C:\scripts\testlog.txt -Value "folders created successfully $env:computername"
或者您可以管道Out-File -Append
:
"folders created successfully $env:computername" | Out-File -FilePath C:\scripts\testlog.txt -Append
为什么要使用不同的方法?他们有a few differences,你很快就会遇到这种情况。 redirection operators并不能让您尽可能地控制所发生的事情(编码等)。
答案 1 :(得分:4)
使用Start-Transcript cmdlet-它可以捕获Write-Host输出,如下所示:
Start-Transcript -Path .\testlog.txt
Write-Host "Hello World"
Stop-Transcript
答案 2 :(得分:2)
Write-Host
仅用于将数据发送到控制台,而不是其他任何地方。如果你想在别处发送数据,即。要提交文件,您需要将其发送到输出流
write-output "folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
或
"folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
注意$env
周围的子表达式。我们需要确保变量在双引号中正确扩展。
查看Bacons answer有关如何使用本机PowerShell cmdlet
执行此操作的信息