I have the below code that goes through and gets scheduled tasks info and puts the output that occurs on the screen to a log file.
However, what I have noticed is that all errors are logged EXCEPT for servers that have "Access is denied" - how can I log those errors in the log file as well.
Below is the code:
Start-Transcript -path $scheduledpath\logging.txt -append
foreach ($name in $names)
{
Write-Host "Running Against Server $name" -ForegroundColor Magenta
if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue )
{
#$Command = "schtasks.exe /query /S $name /fo CSV /v >c:\tools\Scheduled\$name.csv"
$Command = "schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv"
Invoke-Expression $Command
Clear-Variable Command -ErrorAction SilentlyContinue
}
else{
Write-Host "$name is Down" -ForegroundColor Red
}
}
Stop-Transcript
Here is the output on the screen:
> Running Against Server SV064909
> SV064909 is Down
> Running Against Server SV081372
> SV081372 is Down
> Running Against Server YBEF008690_vorher_SV064930
> YBEF008690_vorher_SV064930 is Down
> Running Against Server Alt_SV064921
> Alt_SV064921 is Down
> Running Against Server SV073632
> ERROR: Access is denied.
> Running Against Server SV073633
> ERROR: Access is denied.
Here is the output in the LOG file....no ACCESS IS DENIED Shown...?
> Running Against Server SV064909
> SV064909 is Down
> Running Against Server SV081372
> SV081372 is Down
> Running Against Server YBEF008690_vorher_SV064930
> YBEF008690_vorher_SV064930 is Down
> Running Against Server Alt_SV064921
> Alt_SV064921 is Down
> Running Against Server SV073632
> Running Against Server SV073633
This behavior with native command output not being recorded in Start-Transcript output but being output to the console is reported in connect bug 315857. See workarounds for possible solutions.
The simplest workaround is to pipe the results of the native command to Out-Host
schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host
None of the above worked for me. I found a link from 2009 with discussions of the issue. But a microsoft blog from 2010 solved the issue for me.
In short, pipe the native command output to Out-Default.
schtasks.exe /query /S $name /fo CSV /v | Out-Default
{I didn't really try that line myself, but you get the idea.}
Ahh, the correct answer should be:
$Command = "schtasks.exe /query /S $name /fo CSV /v 2>&1 >$scheduledpath\$name.csv"
I.e. pipe stderror (pipe 2) to stdout (pipe 1), so that both shows in the stdout.
Get service tag
$servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber
Write-output $servicetag
I used Write-output in one line at the top of my script, after that one they were all Write-Host. But every "Write" output is now showing up in my script.
来源:https://stackoverflow.com/questions/13160759/start-transcript-not-capturing-all-output-to-log-file