У меня есть сценарий, который должен иметь 3 разных кода выхода: ОК 0 Предупреждение 1 Критический 2
Я хочу, чтобы он записывал выходные данные только для каждого из них в зависимости от условий, и он отлично работает для 1 и 2, так как я хочу отобразить имя виртуальной машины. Причина, по которой я использую массив, заключается в том, что я могу отображать виртуальные машины с «предупреждением» для других целей.
Проблема, с которой я столкнулся, заключается в том, что этот скрипт будет писать «ОК» для каждого виртуального компьютера, который не соответствует другие критерии. Мне просто нужно одно «ОК», что ничего не нужно делать, если нет других критериев. Мне нужна помощь с общей логикой c этого скрипта.
$old = @()
$noinstall = @()
$status = 0
$vmtools = Get-VM | select name, @{N = ”ToolsStatus”; E = { $_.Extensiondata.Summary.Guest.ToolsStatus } }
foreach ($vmtool in $vmtools) {
if (($vmtool.ToolsStatus) -eq 'toolsOld') {
$arraytest1 = Write-Output "CRITICAL: $($vmtool.Name) ------ $($vmtool.ToolsStatus)"
$old += , $arraytest1
$Status = 2
Write-output $old
}
elseif (($vmtool.Toolsstatus) -eq 'toolsNotInstalled' -And $status -ne 2) {
Write-output "WARNING: $($vmtool.Name) ------ $($vmtool.ToolsStatus)"
$status = 1
}
elseif (($vmtool.Toolsstatus) -eq 'toolsNotInstalled' -And $status -eq 2) {
$arraytest = Write-output "WARNING: $($vmtool.Name) ------ $($vmtool.ToolsStatus)"
$noinstall += , $arraytest
}
else {
Write-Output "OK"
}
}
exit $status
Редактировать: Я мог бы просто закончить elseif ($ status -eq 0), верно? Тем не менее, он будет писать «OK» для каждого vm.