问题
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
回答1:
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.
回答2:
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
回答3:
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.}
回答4:
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.
回答5:
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