电子邮件报告(文本文件)通过任务计划程序的奇怪行为

我仍然是相当新的PowerShell和实际的实施…但我创build了一个脚本来监视磁盘健康,并在2012 R2有一些非常离奇的结果。 想知道是否有人看到这样的和/或有解决scheme…或者是一个错误?

有问题的脚本是:

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

我使用两行batch file执行上面的powershell脚本:

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

如果我从命令行执行powershell脚本,或者右键单击并以pipe理员身份运行,则会得到:

 FriendlyName大小MediaType制造商型号HealthStatus OperationalStatus
 ------------ ---- --------- ------------ ----- -------- ---- -----------------
 PhysicalDisk15 119185342464 SSD INTEL SS DSC2BW120A4健康确定               
 PhysicalDisk3 119185342464 SSD INTEL SSDSC2BW120A4健康确定               
 PhysicalDisk0 1000203804160未指定SAMSUNG HD103SI健康确定               
 PhysicalDisk9 1499480457216 UnSpecified ST315003 41AS健康OK               
 PhysicalDisk14 1499480457216 UnSpecified ST315003 41AS健康OK               
 PhysicalDisk2 1999575711744 HDD TOSHIBA DT01ACA200健康OK               
 PhysicalDisk1 1999575711744 HDD ST2000DL003-9VT166健康OK               
 PhysicalDisk6 1999575711744 HDD WDC WD20 EARS-00MVWB0健康OK               
 PhysicalDisk4 1999575711744 HDD ST2000DL 003-9VT166健康OK               
 PhysicalDisk11 1999575711744未指定ST320005 42AS健康确定               
 PhysicalDisk21 2000398934016 UnSpecified希捷桌面健康确定               
 PhysicalDisk10 2999766220800未指定WDC WD30 EZRX-00DC0B0健康确定               
 PhysicalDisk5 2999766220800未指定TOSHIBA DT01ACA300健康确定               
 PhysicalDisk7 2999766220800 UnSpecified TOSHIBA DT01ACA300健康OK               
 PhysicalDisk12 2999766220800 HDD ST3000DM 001-1CH166健康OK               
 PhysicalDisk13 2999766220800 HDD ST3000DM 001-1CH166健康OK               
 PhysicalDisk8 2999766220800 HDD ST3000DM 001-9YN166健康OK               
 PhysicalDisk22 3000592977920未指定希捷扩展书桌健康OK               

但是,如果我从一个计划任务启动它,我会得到:

  FriendlyName大小MediaType制造商模型健康
                                                                           hStat
                                                                          我们   
 ------------ ---- --------- ------------ ----- -----
 PhysicalDisk15 119185342464 SSD INTEL SS DSC2BW120A4他...
 PhysicalDisk3 119185342464 SSD INTEL SSDSC2BW120A4他...
 PhysicalDisk0 1000203804160 UnSpecified SAMSUNG HD103SI He ...
 PhysicalDisk9 1499480457216 UnSpecified ST315003 41AS他...
 PhysicalDisk14 1499480457216 UnSpecified ST315003 41AS他...
 PhysicalDisk2 1999575711744 HDD TOSHIBA DT01ACA200他...
 PhysicalDisk1 1999575711744 HDD ST2000DL003-9VT166他...
 PhysicalDisk6 1999575711744硬盘WDC WD20 EARS-00MVWB0他...
 PhysicalDisk4 1999575711744 HDD ST2000DL 003-9VT166他...
 PhysicalDisk11 1999575711744 UnSpecified ST320005 42AS他...
 PhysicalDisk21 2000398934016 UnSpecified Seagate Desktop He ...
 PhysicalDisk10 2999766220800未指定WDC WD30 EZRX-00DC0B0他...
 PhysicalDisk5 2999766220800 UnSpecified TOSHIBA DT01ACA300 He ...
 PhysicalDisk7 2999766220800 UnSpecified TOSHIBA DT01ACA300他...
 PhysicalDisk12 2999766220800 HDD ST3000DM 001-1CH166 He ...
 PhysicalDisk13 2999766220800 HDD ST3000DM 001-1CH166他...
 PhysicalDisk8 2999766220800 HDD ST3000DM 001-9YN166他...
 PhysicalDisk22 3000592977920 UnSpecified Seagate扩展书桌他...

我很想知道如何让它停止截断线条,并让我得到实际的健康状况 – 全文 – 在不丢失任何其他信息的过程中(我可以放大或其他东西,并缩短每一行的长度)。

在一天结束的时候,我们的目标是像在命令行运行它那样得到输出,而不是通过任务计划程序运行时得到的输出。

好的,你的问题是使用Out-String cmdlet 。 它的默认值是80,不过你可以用-Width开关定义一个不同的宽度。 看起来你是25个字符,所以你应该可以通过改变第6行来修复它:

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

从计划任务运行时,控制台窗口具有不同的宽度(如果您可以看到该窗口,它看起来更像是一个标准的黑色命令提示符,而不是您习惯看到的蓝色Powershell窗口)。

这很重要,因为您使用的是ftFormat-Table ),通常只用于输出到屏幕。

您可以使用$host.Console.RawUI及其属性调整控制台窗口的大小,但是我build议不要使用Format-命令,即使在这种情况下可能会更容易一些。 这也不会在ISE中工作。

相反,请将自己的string格式化为电子邮件。