I am trying to get the output file to list all the computers I am running queries against. The script below works but when run against multiple servers only the last server queried is listed in the out-file.
What am I doing wrong?
Output I would like to achieve
av3022 is pingable
av3021 is pingable
av3023 is pingable
av3024 is down
Currently only one entry (last one queried) is in the file.
$servers = Get-Content -Path C:\RCJ\Scripts\POWERSHELL\Servers.txt
ForEach ($server in $servers) {
if
(Test-Connection $server -count 1 -Quiet)
{Clear-Content C:\RCJ\Scripts\POWERSHELL\ServerShutdownResults.txt
write-output “”$server" is pingable “| Out-File -append -FilePath C:\RCJ\Scripts\POWERSHELL\ServerShutdownResults.txt}
else
{write-output “”$server” is down " | Out-File -append -FilePath C:\RCJ\Scripts\POWERSHELL\ServerShutdownResults.txt}
}
So when your script runs, if the server is available it clears the content of the text file and then writes to it. When the script reaches the non-pingable server it doesn’t clear the file first, I am kinda surprised that you aren’t getting the last pingable and non-pingable server in the list. I think that this is more along the lines of what you are looking for
If you’re working with strings, you won’t see any difference between Out-File -Append and Add-Content. The main difference is that Out-File works with PowerShell’s Format-* cmdlets, even if you don’t call one explicitly, so it produces the type of table or list output you normally see at the console.
If you send a non-string object to Add-Content, the output is usually different (and often rather useless.)
It really depends on what you want to do. I tend to mix and match output methods depending on what I’m trying to achieve. If the file is one I’ll keep coming back to I tend to use the *Content cmdlets. if its a one off dump of data then out-file is.
If you don’t use a format cmdlet you end up with the default format for the object as defined to PowerShell in the format files. This is just dumped to out-file, effectively as string data. If you want output that’s re-usable then you need to use the content cmldtes (good for strings), export-csv (can be read in as objects), export-clixml (preserves object as XML)