奇怪的结果:很多空格而不是适当的句子Powershell

时间:2018-09-25 11:45:51

标签: powershell powershell-v3.0 powershell-v4.0

我通过此脚本获得了奇怪的输出,以使用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结果的星系?

1 个答案:

答案 0 :(得分:1)

请勿使用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与数字结合使用没有任何意义-数字没有大小写。