start-Transcript not capturing all output to log file..?

旧城冷巷雨未停 提交于 2019-12-17 19:58:00

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!