start-Transcript没有捕获所有输出到日志文件..?

时间:2012-10-31 14:54:22

标签: powershell powershell-v2.0

我有下面的代码经过并获取预定的任务信息,并将屏幕上出现的输出放到日志文件中。

但是,我注意到的是,对于“访问被拒绝”的服务器,所有错误都会被记录,但是如何在日志文件中记录这些错误。

以下是代码:

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

以下是屏幕上的输出:

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

以下是LOG文件中的输出....没有访问被拒绝显示...?

> 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

5 个答案:

答案 0 :(得分:15)

连接错误315857中报告了本机命令输出未记录在Start-Transcript输出中但输出到控制台的此行为。请参阅解决方案以获取可能的解决方案。

答案 1 :(得分:11)

最简单的解决方法是将本机命令的结果传递给Out-Host

schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host

答案 2 :(得分:3)

以上都不适合我。 我找到a link from 2009讨论了这个问题。但微软blog from 2010为我解决了这个问题。

简而言之,将本机命令输出传递给Out-Default。

  schtasks.exe /query /S $name /fo CSV /v | Out-Default

{我自己并没有真正尝试过那条线,但是你明白了。}

答案 3 :(得分:1)

啊,正确的答案应该是:

$ Command =“schtasks.exe / query / S $ name / fo CSV / v 2>& 1> $ scheduledpath \ $ name.csv”

即。管道stderror(管道2)到stdout(管道1),这样两者都显示在stdout中。

答案 4 :(得分:0)

获取服务标签

{{1}}

我在脚本顶部的一行中使用了Write-output, 在那之后他们都是Write-Host。但是现在每个“写入”输出都显示在我的脚本中。