Powershell Write-Host附加到文本文件 - 计算机名称和时间戳

h34*_*h3r 10 powershell

我是Powershell noobie,我正在编写我的第二个剧本,所以请耐心等待.我正在尝试做一个write-host输出我的写主机消息以及一个时间戳和什么计算机正在完成我的各种脚本块到一个文本文件,我有问题使用哪种语法来使事情工作.

我尝试了以下测试目的.一旦我得到语法,这将转到服务器 - 现在它将转到我的本地C:驱动器.

write-host "folders created successfully $env:computername" >> c:\scripts\testlog.txt
Run Code Online (Sandbox Code Playgroud)

我看到的行为是正在创建文本文件,但其中没有内容 - 全部为空白.

Bac*_*its 12

Write-Host不使用标准.它总是直接输出到控制台. Write-Output输出到标准输出.

要做到这一点,你可以使用:

Write-Output "folders created successfully $env:computername" >> C:\scripts\testlog.txt
Run Code Online (Sandbox Code Playgroud)

但是,您也可以使用Add-Content:

Add-Content -Path C:\scripts\testlog.txt -Value "folders created successfully $env:computername"
Run Code Online (Sandbox Code Playgroud)

或者你可以管道Out-File -Append:

"folders created successfully $env:computername" | Out-File -FilePath C:\scripts\testlog.txt -Append
Run Code Online (Sandbox Code Playgroud)

你为什么要用不同的方法?它们有一些差异,你不会经常遇到这些差异.该重定向操作符不给你过会发生什么尽可能多的控制(编码等).


Lar*_*rup 9

使用Start-Transcript cmdlet-它可以捕获Write-Host输出,如下所示:

Start-Transcript -Path .\testlog.txt
Write-Host "Hello World"
Stop-Transcript
Run Code Online (Sandbox Code Playgroud)

  • 文件中倾倒了各种各样的垃圾 (3认同)

Mat*_*att 6

Write-Host仅用于将数据发送到控制台,而不用于其他地方。如果您想将数据发送到其他地方,即。要归档,您需要将其发送到输出流

write-output "folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
Run Code Online (Sandbox Code Playgroud)

或者

"folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
Run Code Online (Sandbox Code Playgroud)

注意 周围的子表达式$env。我们需要确保变量在双引号中正确扩展。

查看Bacons 答案,了解如何使用本机 PowerShell cmdlet 执行此操作