Скрипт Powershell дает разные результаты при запуске вручную
Я искал ответы уже здесь, но не нашел ничего, что я мог сказать, окончательно ответил на мой вопрос. У меня есть скрипт, который должен обращаться к нескольким серверам, как определено в текстовом файле, и сообщать подробности из EventLog. Он также записывает в файл, отправляет полученный файл по электронной почте в виде вложения и дает мне время, необходимое для обработки команды, чтобы я мог отслеживать общую производительность и видеть, есть ли какие-либо изменения с течением времени. Эта часть работает просто отлично.
Write-Output ($Start = Get-Date) | Out-File -Append F:\PowerShell\UnExpectedShutdowns.txt
$Computers = Get-Content -Path F:\PowerShell\servers.txt
Get-EventLog -logname System -ComputerName $Computers | ? {$_.TimeWritten -gt $lasttime -and $_.EventID -eq "6008"} | Format-Table -Wrap -Property MachineName, Index, TimeGenerated, EntryType, Source, InstanceID, Message -AutoSize | Out-File -Append -Force F:\PowerShell\UnExpectedShutdowns.txt
Write-Output (($Stop = Get-Date) - $Start).TotalSeconds | Out-File -Append F:\PowerShell\UnExpectedShutdowns.txt
Send-MailMessage -From sender@emaildomain.com -Subject "Daily Check for Server Shutdowns" -To receiver@emaildomain.com -Attachments F:\PowerShell\UnExpectedShutdowns.txt -Body "<p style=""font-family: Verdana, Geneva, sans-serif; font-size: 12px;"">Please review the attached document for new unexpected server shutdowns. </p><p> </p><p style=""font-family: Verdana, Geneva, sans-serif; font-size: 12px;"">The original file is located on <a href=""file:///\\SERVER\F$\Powershell\UnExpectedShutdowns.txt"">\\SERVER\F$\Powershell\UnExpectedShutdowns.txt</a></p><p style=""font-family: Verdana, Geneva, sans-serif; font-size: 12px;"">It should be pared down from time to time to maintain its size</p>" -BodyAsHtml -Priority Normal -SmtpServer smtp.dept.domain.com
Я добавил это как запланированное задание. Если я запускаю за пределами планировщика задач вручную, я получаю ожидаемые результаты.
MachineName Index TimeGenerated EntryType Source InstanceId Message
----------- ----- ------------- --------- ------ ---------- -------
SERVERNAME9999.fqdn 123456 3/10/2016 11:11:46 AM Error EventLog 1234567890 The previous system shutdown at 11:08:17 AM on 3/10/2016 was unexpected.
Однако, когда я запускаю его по расписанию, я получаю результаты минус 2 последних столбца (InstanceID & Message)
MachineName Index TimeGenerated EntryType Source
----------- ----- ------------- --------- ------
SERVERNAME9999.fqdn 123456 3/10/2016 11:11:46 AM Error EventLo
g
В качестве запланированного задания я запускаю его с учетной записью, которая входит в группу администраторов для всех серверов, и у меня отмечена опция "Запускать с наивысшими привилегиями". Почему мои последние 2 столбца отсутствуют?
1 ответ
Как сказал nkasco, используйте Select
и не Format-Table
при выводе в файл. Это, вероятно, связано с Format-Table
с -AutoSize
или же -Wrap
поскольку при выполнении в качестве запланированной задачи под другим пользователем я не думаю, что он может правильно рассчитать размер консоли и обрезает столбцы для подгонки. Вы не должны использовать Format-Table
если вы не собираетесь выводить результат прямо на экран.
Также используйте -After
в вашем Get-EventLog
так что каждый сервер возвращает только необходимый диапазон дат вместо того, чтобы передавать весь журнал событий по проводам, а затем заставлять PowerShell фильтровать все оттуда.
Get-EventLog -logname System -ComputerName $Computers -After $lasttime | ? {$_.EventID -eq "6008"} | Select MachineName, Index, TimeGenerated, EntryType, Source, InstanceID, Message | Out-File -Append -Force F:\PowerShell\UnExpectedShutdowns.txt