Start-Transcript не записывает весь вывод в файл журнала..? - программирование
Подтвердить что ты не робот

Start-Transcript не записывает весь вывод в файл журнала..?

У меня есть следующий код, который проходит и получает информацию о запланированных задачах и помещает вывод, который появляется на экране в файл журнала.

Тем не менее, я заметил, что все ошибки регистрируются в EXCEPT для серверов, которым "запрещен доступ" - как я могу регистрировать эти ошибки в файле журнала.

Ниже приведен код:

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.... нет. ACCESS DENIED Показывается...?

> 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
4b9b3361

Ответ 1

Это поведение с выходом собственной команды, которое не записывается в выводе Start-Transcript, а выводится на консоль, сообщается в ошибке подключения 315857. См. Обходные пути для возможных решений.

Ответ 2

Простейшим обходным решением является передача результатов команды native на Out-Host

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

Ответ 3

Ahh, правильный ответ должен быть:

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

т.е. pipe stderror (труба 2) в stdout (труба 1), так что оба показывают в выводе.

Ответ 4

Ничто из этого не помогло мне. Я нашел ссылку с 2009 года с обсуждением проблемы. Но блог microsoft с 2010 года решил проблему для меня.

Короче говоря, выведите исходный вывод команды на Out-Default.

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

{Я действительно не пробовал эту линию, но вы поняли.}

Ответ 5

Получить тег службы

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

Я использовал Write-output в одной строке в верхней части моего script, после этого они все были Писателями. Но каждый вывод "Write" теперь отображается в моем script.