我对 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 关闭 Powershell.exe -executionpolicy remotesigned -文件 c:\Windows\scripts\DailyReplicaStatusUpdate.ps1
如果我从命令行执行 powershell 脚本或者右键单击并以管理员身份运行,我会得到:
FriendlyName Size MediaType 制造商 型号 HealthStatus OperationalStatus ------------ ---- --------- ------------ ----- ------------ ----------------- PhysicalDisk15 119185342464 SSD INTEL SS DSC2BW120A4 运行正常 PhysicalDisk3 119185342464 SSD INTEL SSDSC2BW120A4 运行正常 PhysicalDisk0 1000203804160 未指定 SAMSUNG HD103SI 运行正常 PhysicalDisk9 1499480457216 未指定 ST315003 41AS 运行状况良好 PhysicalDisk14 1499480457216 未指定 ST315003 41AS 运行状况良好 PhysicalDisk2 1999575711744 HDD TOSHIBA DT01ACA200 运行正常 PhysicalDisk1 1999575711744 HDD ST2000DL003-9VT166 运行正常 PhysicalDisk6 1999575711744 HDD WDC WD20 EARS-00MVWB0 运行正常 PhysicalDisk4 1999575711744 HDD ST2000DL 003-9VT166 运行正常 PhysicalDisk11 1999575711744 未指定 ST320005 42AS 运行状况良好 PhysicalDisk21 2000398934016 未指定 Seagate Desktop 运行状况良好 PhysicalDisk10 2999766220800 未指定 WDC WD30 EZRX-00DC0B0 运行正常 PhysicalDisk5 2999766220800 未指定 TOSHIBA DT01ACA300 运行正常 PhysicalDisk7 2999766220800 未指定 TOSHIBA DT01ACA300 运行正常 PhysicalDisk12 2999766220800 HDD ST3000DM 001-1CH166 运行正常 PhysicalDisk13 2999766220800 HDD ST3000DM 001-1CH166 运行正常 PhysicalDisk8 2999766220800 HDD ST3000DM 001-9YN166 运行正常 PhysicalDisk22 3000592977920 未指定 Seagate Expansion Desk 运行正常
但是如果我从计划任务启动它,我会得到:
FriendlyName 尺寸 MediaType 制造商 型号 健康 统计量 我们 ------------ ---- --------- ------------ ----- ----- PhysicalDisk15 119185342464 SSD INTEL SS DSC2BW120A4 硬盘... PhysicalDisk3 119185342464 SSD INTEL SSDSC2BW120A4 他... PhysicalDisk0 1000203804160 未指定 SAMSUNG HD103SI He... PhysicalDisk9 1499480457216 未指定 ST315003 41AS 他... PhysicalDisk14 1499480457216 未指定 ST315003 41AS 他... PhysicalDisk2 1999575711744 HDD 东芝 DT01ACA200 He... PhysicalDisk1 1999575711744 HDD ST2000DL003-9VT166 他... PhysicalDisk6 1999575711744 HDD WDC WD20 EARS-00MVWB0 他... PhysicalDisk4 1999575711744 HDD ST2000DL 003-9VT166 他... PhysicalDisk11 1999575711744 未指定 ST320005 42AS He... PhysicalDisk21 2000398934016 未指定 Seagate 台式机硬盘... PhysicalDisk10 2999766220800 未指定 WDC WD30 EZRX-00DC0B0 他... PhysicalDisk5 2999766220800 未指定 TOSHIBA DT01ACA300 He... PhysicalDisk7 2999766220800 未指定 TOSHIBA DT01ACA300 He... PhysicalDisk12 2999766220800 HDD ST3000DM 001-1CH166 他... PhysicalDisk13 2999766220800 HDD ST3000DM 001-1CH166 他... PhysicalDisk8 2999766220800 HDD ST3000DM 001-9YN166 他... PhysicalDisk22 3000592977920 未指定 Seagate Expansion Desk He...
我很想知道如何让它停止截断行并允许我获取实际的健康状况 - 全文 - 而不会丢失任何其他信息(我可以减少尺寸或其他东西并缩短每行的长度)。
归根结底,目标是获得像我在命令行上运行时获得的输出,而不是通过任务计划程序运行时获得的输出。
答案1
好吧,你的问题是使用Out-String
命令。它的默认值为 80,但您可以通过使用开关定义不同的宽度来更改它-Width
。看起来您超出了 25 个字符,因此您应该能够通过将第 6 行更改为以下内容来修复它:
$body=(获取内容$OutputFile|输出字符串-宽度105)
答案2
从计划任务运行时,控制台窗口的宽度不同(如果您可以看到该窗口,它看起来更像标准的黑色命令提示符,而不是您习惯看到的蓝色 Powershell 窗口)。
这很重要,因为您正在使用ft
(Format-Table
),它通常仅用于输出到屏幕。
您可以使用及其属性调整控制台窗口的大小$host.Console.RawUI
,但我建议不要使用Format-
命令,尽管在这种情况下它可能更容易。此外,这在 ISE 中不起作用。
相反,请自行格式化电子邮件消息的字符串。