I am a Powershell noobie and I am currently writing my second script so bear with me. I am trying to do a write-host
and output my write-host message along with a time stamp and what computer is completing my various script blocks to a text file and I am having issues with which syntax to make things work.
I tried the following for testing purposes. This will be going to a server once I get the Syntax down - for now it goes to my local C:
drive.
write-host "folders created successfully $env:computername" >> c:\scripts\testlog.txt
The behavior I'm seeing is the text file is being created but there's no contents in it - all blank.
Use the Start-Transcript cmdlet - it can capture Write-Host output as follows:
Start-Transcript -Path .\testlog.txt
Write-Host "Hello World"
Stop-Transcript
Write-Host
does not use standard out. It always outputs to the console directly, skipping anything else. Write-Output
does output to standard out.
To do answer your specific question -- how to append the output of a command to a text file -- you could use:
Write-Output "folders created successfully $env:computername" >> C:\scripts\testlog.txt
However, you could also use Add-Content
:
Add-Content -Path C:\scripts\testlog.txt -Value "folders created successfully $env:computername"
Or you can pipe to Out-File -Append
:
"folders created successfully $env:computername" | Out-File -FilePath C:\scripts\testlog.txt -Append
Why would you use different methods? They have a few differences which you won't run into very often. The redirection operators don't give you as much control over what happens (encoding, etc.).
Write-Host
is only for sending data to the console and nowhere else. If you are looking to send data elsewhere ie. to file you will need to send it to the output stream
write-output "folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
or
"folders created successfully $($env:computername)" >> c:\scripts\testlog.txt
Notice the sub expression around $env
. We need to be sure that the variable is expanded in the double quotes properly.
Look at Bacons answer for how to do this with native PowerShell cmdlets
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With