我是一个Powershell新手,我目前正在写我的第二个脚本,所以请容忍我。我试图做一个write-host
,并输出我的写主机消息沿着时间戳和什么计算机正在完成我的各种脚本块到一个文本文件,我有问题的语法,使事情的工作。
为了测试的目的,我尝试了下面的方法。一旦我得到语法,它将被转到服务器上--现在它将被转到我的本地C:
驱动器上。
write-host "folders created successfully $env:computername" >> c:\scripts\testlog.txt
我看到的行为是正在创建文本文件,但其中没有任何内容-全部为空。
4条答案
按热度按时间6psbrbz91#
使用Start-Transcript cmdlet -它可以捕获Write-Host输出,如下所示:
jucafojl2#
Write-Host
不使用标准输出。它总是直接输出到控制台,跳过其他任何内容。Write-Output
确实输出到标准输出。要回答您的特定问题--如何将命令的输出附加到文本文件--您可以用途:
但是,您也可以使用
Add-Content
:或者可以通过管道连接到
Out-File -Append
:为什么你要用不同的方法呢?他们有a few differences,你不会经常碰到它。redirection operators不能给予你控制发生的事情(编码等)。
9jyewag03#
Write-Host
仅用于将数据发送到控制台,而不是其他地方。如果您希望将数据发送到其他地方,即文件,则需要将其发送到输出流或
注意
$env
周围的子表达式,我们需要确保变量在双引号中正确展开。有关如何使用本机PowerShell cmdlet执行此操作,请参阅Bacons answer
t98cgbkg4#
正如其他回答所指出的,
Write-Output
是写入输出流的cmdlet,可用于将输出重定向到文件。但是,请注意,当在函数内部使用Write-Host
时,它的以下特征与Write-Host
有很大不同:使用写入输出:
日志将为:
结果是:这里有一些日志我想要的结果
如您所见,输出已成为返回对象
$result
的一部分,这可能是无意的。使用写入主机:
日志将如预期:
这里有些伐木
结果是:我想要的结果
因此,
Get-SomeResult
函数的返回对象保留了我们想要设置的值。输出到文件函数
解决此问题的一种方法是创建一个单独的函数,如下所示,以避免在脚本中重复日志路径:
我们新的
Write-Log
可以像Write-Output
一样使用,但没有潜在的非预期特性,它可以进一步扩展以验证或复制Write-Output
的其他参数,但这种简单的格式可能适用于大多数用例。