аргументы powershell с nrpe

Я хочу обойти два аргумента с помощью сценария PowerShell.

Это обычная проверка

test = cmd / c эхо-скрипты \ test.ps1; выход ($ lastexitcode) | powershell.exe -команда -

Это идея, которую я хочу. Установить предупреждение и критическое.

test = cmd / c эхо-скрипты \ test.ps1 -w 10 -c 50; выход ($ lastexitcode) | powershell.exe -команда -

Если для предупреждения установлено значение более 10, оно вернет выход 1.

Если критическое значение установлено выше 50, то вернется выход 2.

Не знаю, как это сделать в моем сценарии.

Вот как это выглядит сейчас.

$condition = (Get-Service | Where-Object Status -eq "Running").Count

if ($argument warn) {
    Write-Output "Warning:" $condition
    exit 1 
}

ElseIf ($argument critical) {
        Write-Output "Critical:" $condition
        exit 2
}

person Lars von trier pung    schedule 21.10.2020    source источник


Ответы (2)


Хотя я не совсем уверен, что вы имеете в виду, но вы можете запустить скрипт с блоком param (), чтобы он принимал такие аргументы, как

param (
    [int]$WarningLevel = 0,
    [int]$CriticalLevel = 0
)

$condition = (Get-Service | Where-Object {$_.Status -eq "Running"}).Count

if ($CriticalLevel -gt 0 -and $condition -gt $CriticalLevel) {
    Write-Output "Critical: Way too many proc's: $condition"
    Exit 2
}
elseif ($WarningLevel -gt 0 -and  $condition -gt $WarningLevel) {
    Write-Output "Warning: proc's filling up: $condition"
    Exit 1 
}
Write-Output "All OK"
Exit 0
person Theo    schedule 21.10.2020
comment
Если сценарий хранится как, скажем, D:\Test\script.ps1, вы можете называть его как powershell -File "D:\Test\script.ps1" -WarningLevel 10 -CriticalLevel 50. P.S. Я отредактировал код, потому что раньше как-то забыл закрывающую фигурную скобку. - person Theo; 21.10.2020
comment
Спасибо @Theo. Это то, что я хотел. - person Lars von trier pung; 21.10.2020
comment
@Larsvontrierpung Я рад, что это сработало для вас. Если вы считаете, что мой ответ решил вашу проблему, примите его, щелкнув значок ✓ слева. См. Как принимать ответы SO. Это поможет другим людям, задавшим подобный вопрос, легче его найти. - person Theo; 21.10.2020
comment
Сделаю! Но кое-что произошло. powershell -File. \ test.ps1 Критично: Слишком много процедур: 116 Если я не ввожу никаких аргументов, все должно быть в порядке - person Lars von trier pung; 21.10.2020
comment
@Larsvontrierpung Ну, это результат, если более 50 служб находятся в рабочем состоянии. Число 50 - это очень мало. На моем компьютере их сейчас 104. Определите, какое число вы считаете критическим, и отрегулируйте его соответственно, как powershell -File "D:\Test\script.ps1" -WarningLevel 100 -CriticalLevel 200. Это параметры, которые в конце концов решаете вы. - person Theo; 21.10.2020
comment
Потому что 116 всегда будет больше 0. Поэтому, когда я просто запускаю скрипт без аргументов, я хочу, чтобы он возвращал Exit 0, чтобы он сообщал вам, что проверка в порядке. Что-то такое. И когда я ввожу -WarningLevel 10 -CriticalLevel 20, он должен работать как надо. - person Lars von trier pung; 21.10.2020
comment
Даже если он запущен 1000procs и без добавленных аргументов, я хочу, чтобы он вернул ОК :) - person Lars von trier pung; 21.10.2020
comment
Вот и все. Я изучу это и узнаю. Действительно полезно. Хорошего вечера @Theo - person Lars von trier pung; 21.10.2020
comment
Спасибо за последний раз. Вы также знаете, как я могу отслеживать измененную папку? Не по количеству или размеру. Я хочу получить сигнал тревоги, если определенная папка будет изменена. Если файл копируется в эту папку или около того. Если я использую count или size, мне нужно удалить файл в этой папке, чтобы избавиться от сигнала тревоги. Я нашел кое-что о New-Object IO.FileSystemWatcher. Это также для nrpe / nsclient ++ в Windows с PowerShell. Если папка = изменена, вернуть критично. И опять. Спасибо! - person Lars von trier pung; 23.11.2020
comment
stackoverflow.com/ questions / 64982743 / - person Lars von trier pung; 24.11.2020

Ты можешь использовать,

powershell -file "(Path to your PowerShell Script).ps1 -w10 -c50"

и внутри вашего сценария PowerShell вверху вставьте следующее:

param ($w, $c)

а затем используйте переменные в своем скрипте.

Узнайте больше об именованных параметрах, так что вам не нужно вводить аргументы в порядке их использования и меньше шансов, что ваш скрипт сломается, когда вы захотите внести изменения.

person Shaqil Ismail    schedule 21.10.2020
comment
Спасибо @Shaqil Ismail :) - person Lars von trier pung; 21.10.2020