Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell Write-Host append to text file - computer name and time stamp

Tags:

powershell

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.

like image 917
h34th3r Avatar asked Mar 02 '15 14:03

h34th3r


3 Answers

Use the Start-Transcript cmdlet - it can capture Write-Host output as follows:

Start-Transcript -Path .\testlog.txt
Write-Host "Hello World"
Stop-Transcript
like image 126
Lars Fastrup Avatar answered Oct 31 '22 18:10

Lars Fastrup


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.).

like image 23
Bacon Bits Avatar answered Oct 31 '22 18:10

Bacon Bits


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

like image 26
Matt Avatar answered Oct 31 '22 17:10

Matt