21

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

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

下面是代码:

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
4

5 回答 5

15

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

于 2012-10-31T15:02:01.763 回答
12

最简单的解决方法是将本机命令的结果通过管道传输到Out-Host

schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host
于 2013-04-17T14:42:00.750 回答
4

以上都不适合我。我找到了一个 2009 年的链接,其中讨论了这个问题。但是 2010 年的微软博客为我解决了这个问题。

简而言之,将本机命令输出通过管道传输到 Out-Default。

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

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

于 2016-03-17T13:33:20.040 回答
1

啊,正确答案应该是:

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

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

于 2016-02-24T21:01:11.750 回答
0

获取服务标签

    $servicetag = Get-WmiObject win32_bios | Select-Object -ExpandProperty SerialNumber 
    Write-output $servicetag

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

于 2017-12-13T19:23:58.157 回答