Comportamento bizarro de relatórios enviados por e-mail (arquivos de texto) via Agendador de Tarefas

2

Ainda sou muito novo no powershell e nas implementações práticas dele ... mas criei um script para monitorar a integridade do disco e obter alguns resultados muito bizarros no 2012 R2. Imaginando se alguém viu algo assim e / ou tem uma solução ... Ou é um bug?

O script em questão é:

$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" 

Eu executo o script powershell acima usando um arquivo de lote de duas linhas:

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

Se eu executar o script powershell a partir de uma linha de comando ou clicando com o botão direito do mouse e executando como administrador, recebo:

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               

Mas se eu iniciá-lo a partir de uma tarefa agendada, recebo:

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

Adoraria saber como fazer com que parasse de truncar as linhas e permitir que eu obtivesse o status de saúde real - texto completo - sem perder nenhuma outra informação ao longo do caminho (PODIA reduzir o tamanho ou outra coisa e encurtar comprimento de cada linha).

No final do dia, o objetivo é obter a saída como se eu fosse executá-la em uma linha de comando, em vez da saída que estou obtendo quando é executada por meio do Agendador de Tarefas.

    
por Multiverse IT 30.12.2014 / 21:00

2 respostas

2

Tudo bem, seu problema é o uso do Out-String cmdlet . Ele tem um valor padrão de 80, mas você pode alterar isso definindo uma largura diferente, com a opção -Width . Parece que você tem mais de 25 caracteres, então você deve conseguir consertá-lo mudando a linha 6 para:

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

    
por 30.12.2014 / 21:33
0

A janela do console tem uma largura diferente quando executada a partir da tarefa agendada (se você pudesse ver a janela pareceria mais com um prompt de comando preto padrão do que a janela Powershell azul que você está acostumado a ver).

Isso é importante porque você está usando ft ( Format-Table ), que é normalmente usado apenas para saída em uma tela.

Você pode redimensionar a janela do console usando $host.Console.RawUI e suas propriedades, mas eu recomendo não usar o comando Format- , embora possa ser mais fácil nesta instância. Além disso, isso não funcionará no ISE.

Em vez disso, formate as seqüências para a mensagem de email.

    
por 31.12.2014 / 03:41