首页 > 解决方案 > 奇怪的结果:很多空格而不是正确的句子 Powershell

问题描述

我用这个脚本得到奇怪的输出来用 nagios 监控影子副本

如果我运行这个脚本:

$runs = Get-ScheduledTaskInfo -TaskName "ShadowCopyVolume{eff29848-ac44-11e8-80b1-806e6f6e6963}" | Format-Wide -Property NumberOfMissedRuns

if ($runs -cmatch "0")
{
Write-host ok
exit 0
}
else
{
Write-Output "missed" $runs "runs"
exit 1
}

结果是:

PS C:\Program Files\NSClient++\scripts> C:\Program Files\NSClient++\scripts\check_scopy.ps1
missed


0                                                                                                                                                                                                                                                                


runs

那是浪费了很多空间。

那么有什么建议可以使它成为一个正确的句子而不是一个 ps 结果的星系?

标签: powershellpowershell-3.0powershell-4.0

解决方案


不要Format-*用于选择单个属性。要么使用:

$runs = Get-ScheduledTaskInfo -TaskName "ShadowCopyVolume{eff29848-ac44-11e8-80b1-806e6f6e6963}" | 
    Select-Object -Expandproperty NumberOfMissedRunS

或更短:

$runs = (Get-ScheduledTaskInfo -TaskName "ShadowCopyVolume{eff29848-ac44-11e8-80b1-806e6f6e6963}").NumberOfMissedRuns

该属性NumberOfMissedRuns是 uint32 类型,所以很简单:

if ($runs){"missed {0} runs" -f $runs} else {write-Host "ok"}

应该返回所需的结果。

顺便说一句,-cmatch与数字结合使用没有任何意义——数字没有大小写。


推荐阅读