Назад | Перейти на главную страницу

Необычное поведение отчетов, отправляемых по электронной почте (текстовых файлов) через планировщик задач

Я все еще новичок в PowerShell и его практических реализациях ... но я создал сценарий для мониторинга состояния диска и получил очень странные результаты в 2012 R2. Интересно, видел ли кто-нибудь подобное и / или есть решение… Или это ошибка?

Рассматриваемый сценарий:

$OutputFile=$env:temp + "\~VMRepl-Status.txt"
get-vmreplication | Out-File -FilePath $OutputFile
measure-vmreplication | Out-File -FilePath $OutputFile -Append
Get-PhysicalDisk | Sort Size | FT FriendlyName, Size, MediaType, Manufacturer, Model, HealthStatus, OperationalStatus -AutoSize | Out-File -FilePath $OutputFile -Append
Get-PhysicalDisk | Get-StorageReliabilityCounter | ft deviceid, temperature, wear -AutoSize | Out-File -FilePath $OutputFile -Append
$body=(Get-Content $OutputFile | out-string)
Send-MailMessage -To [removed] -From [removed] -body $body -SmtpServer 10.24.42.45 -subject "Hyper-V Replica and Disk Disk Status" 

Я выполняю приведенный выше сценарий PowerShell, используя двухстрочный командный файл:

@echo off
Powershell.exe -executionpolicy remotesigned -File c:\Windows\scripts\DailyReplicaStatusUpdate.ps1

Если я выполню сценарий PowerShell из командной строки или щелкнув правой кнопкой мыши и запустив его от имени администратора, я получу:

FriendlyName            Size MediaType   Manufacturer Model               HealthStatus OperationalStatus
------------            ---- ---------   ------------ -----               ------------ -----------------
PhysicalDisk15  119185342464 SSD         INTEL SS     DSC2BW120A4         Healthy      OK               
PhysicalDisk3   119185342464 SSD                      INTEL SSDSC2BW120A4 Healthy      OK               
PhysicalDisk0  1000203804160 UnSpecified              SAMSUNG HD103SI     Healthy      OK               
PhysicalDisk9  1499480457216 UnSpecified ST315003     41AS                Healthy      OK               
PhysicalDisk14 1499480457216 UnSpecified ST315003     41AS                Healthy      OK               
PhysicalDisk2  1999575711744 HDD                      TOSHIBA DT01ACA200  Healthy      OK               
PhysicalDisk1  1999575711744 HDD                      ST2000DL003-9VT166  Healthy      OK               
PhysicalDisk6  1999575711744 HDD         WDC WD20     EARS-00MVWB0        Healthy      OK               
PhysicalDisk4  1999575711744 HDD         ST2000DL     003-9VT166          Healthy      OK               
PhysicalDisk11 1999575711744 UnSpecified ST320005     42AS                Healthy      OK               
PhysicalDisk21 2000398934016 UnSpecified Seagate      Desktop             Healthy      OK               
PhysicalDisk10 2999766220800 UnSpecified WDC WD30     EZRX-00DC0B0        Healthy      OK               
PhysicalDisk5  2999766220800 UnSpecified TOSHIBA      DT01ACA300          Healthy      OK               
PhysicalDisk7  2999766220800 UnSpecified TOSHIBA      DT01ACA300          Healthy      OK               
PhysicalDisk12 2999766220800 HDD         ST3000DM     001-1CH166          Healthy      OK               
PhysicalDisk13 2999766220800 HDD         ST3000DM     001-1CH166          Healthy      OK               
PhysicalDisk8  2999766220800 HDD         ST3000DM     001-9YN166          Healthy      OK               
PhysicalDisk22 3000592977920 UnSpecified Seagate      Expansion Desk      Healthy      OK               

Но если я инициирую его из запланированной задачи, я получаю:

FriendlyName            Size MediaType   Manufacturer Model               Healt
                                                                          hStat
                                                                          us   
------------            ---- ---------   ------------ -----               -----
PhysicalDisk15  119185342464 SSD         INTEL SS     DSC2BW120A4         He...
PhysicalDisk3   119185342464 SSD                      INTEL SSDSC2BW120A4 He...
PhysicalDisk0  1000203804160 UnSpecified              SAMSUNG HD103SI     He...
PhysicalDisk9  1499480457216 UnSpecified ST315003     41AS                He...
PhysicalDisk14 1499480457216 UnSpecified ST315003     41AS                He...
PhysicalDisk2  1999575711744 HDD                      TOSHIBA DT01ACA200  He...
PhysicalDisk1  1999575711744 HDD                      ST2000DL003-9VT166  He...
PhysicalDisk6  1999575711744 HDD         WDC WD20     EARS-00MVWB0        He...
PhysicalDisk4  1999575711744 HDD         ST2000DL     003-9VT166          He...
PhysicalDisk11 1999575711744 UnSpecified ST320005     42AS                He...
PhysicalDisk21 2000398934016 UnSpecified Seagate      Desktop             He...
PhysicalDisk10 2999766220800 UnSpecified WDC WD30     EZRX-00DC0B0        He...
PhysicalDisk5  2999766220800 UnSpecified TOSHIBA      DT01ACA300          He...
PhysicalDisk7  2999766220800 UnSpecified TOSHIBA      DT01ACA300          He...
PhysicalDisk12 2999766220800 HDD         ST3000DM     001-1CH166          He...
PhysicalDisk13 2999766220800 HDD         ST3000DM     001-1CH166          He...
PhysicalDisk8  2999766220800 HDD         ST3000DM     001-9YN166          He...
PhysicalDisk22 3000592977920 UnSpecified Seagate      Expansion Desk      He...

Я хотел бы знать, как заставить его прекратить обрезать строки и позволить мне получить фактическое состояние здоровья - полный текст - без потери какой-либо другой информации по пути (я МОЖЕТ уменьшить размер или что-то еще и сократить длину каждой строки ).

В конце концов, цель состоит в том, чтобы получить результат, который я получаю от его запуска в командной строке, а не результат, который я получаю, когда он запускается через планировщик заданий.

Хорошо, ваша проблема в использовании Out-String командлет. По умолчанию он имеет значение 80, хотя вы можете изменить его, указав другую ширину с помощью параметра -Width переключатель. Похоже, у вас больше 25 символов, поэтому вы сможете исправить это, изменив строку 6 на:

$ body = (Get-Content $ OutputFile | out-string -Width 105)

Окно консоли имеет другую ширину при запуске из запланированной задачи (если бы вы могли видеть окно, оно было бы больше похоже на стандартную черную командную строку, чем на синее окно Powershell, которое вы привыкли видеть).

Это важно, потому что вы используете ft (Format-Table), который обычно используется только для вывода на экран.

Вы можете изменить размер окна консоли, используя $host.Console.RawUI и его свойства, но я не рекомендую использовать Format- хотя в данном случае это может быть проще. Также это не будет работать в ISE.

Вместо этого отформатируйте строки для сообщения электронной почты самостоятельно.