Сценарий PowerShell неправильно принимает аргумент

Я пытаюсь заставить NCPA выполнять сценарий PowerShell на сервере, предоставляя ему аргументы. Я делал это раньше, и у меня есть 3 разных сценария, которые ведут себя так, как ожидалось. Это не так.

Короче говоря, я пытаюсь использовать Get-Counter для получения счетчика производительности и предоставления пути в качестве аргумента.

На данный момент скрипт выглядит так:

$count = $args[0]
$warn = 1500
$crit = 2000
$Data = Get-Counter -Counter $count
$Raw = $Data.CounterSamples.CookedValue

Write-Host "$Raw | 'Counter'=$Raw;$warn;$crit;0;3000"

if ($Raw -gt $crit) {
    exit 2
} elseif ($Raw -gt $warn) {
    exit 1
} else {
    exit 0
}

Это вызывается с сервера Nagios через:

/usr/local/nagios/libexec/check_ncpa.py -H 192.168.**.** -t 'randomkeystringstuff' -P 5693 -M plugins/counter.ps1 -a "'\Processor Information(_Total)\% Processor Time'"

Заполнение переменной count прямо в скрипте работает. Затем я также могу выполнить это через Nagios без ошибок. Но использование аргумента возвращает

Get-Counter : Сбой при вызове API внутреннего счетчика производительности. Ошибка: c0000bc4.

Это идентичная ошибка, когда вы указываете несуществующий путь.

Поскольку у меня есть метод аргумента, отлично работающий в трех других сценариях, я предполагаю какое-то несоответствие строки или типа или что-то в этом роде.


person Domsch    schedule 30.01.2019    source источник
comment
На моей машине (Windows 10) -a интерпретируется как первый аргумент, а не как опция. Когда я опускаю -a и использую "\Processor Information(_Total)\% Processor Time" в качестве аргументов, все работает нормально. Но в вашей ситуации все может быть по-другому, учитывая, что вы запускаете скрипт Pyhon в системе Linux.   -  person Gert Jan Kraaijeveld    schedule 30.01.2019
comment
Ваш сценарий Python — это просто соединитель для клиента NCPA на сервере Windows. -a в этом случае указывает ему запустить команду Powershell со всем после -a в двойных кавычках в качестве аргументов. Чтобы уточнить: запуск -M plugins/counter.ps1 -a "'\Processor Information(_Total)\% Processor Time'" через этот скрипт аналогичен запуску 'counter.ps1 '\Processor Information(_Total)\% Processor Time' локально на машине.   -  person Domsch    schedule 31.01.2019


Ответы (1)


Простая догадка - удалить одинарную кавычку в аргументе

"'\Processor Information(_Total)\% Processor Time'"
->
"\Processor Information(_Total)\% Processor Time"

-->'\Processor Information(_Total)\% Processor Time'‹-- не является допустимым счетчиком.

person Larry Song    schedule 31.01.2019
comment
Мне нужны одинарные кавычки. Если я удалю их, оболочка интерпретирует пробелы. Я могу удалить одинарные кавычки в сценарии Powershell, но это не изменит вывод. Кроме того, когда я помещаю счетчик с одинарными кавычками непосредственно в скрипт, это работает. Это даже необходимо, потому что иначе PS не распознает его как строку и интерпретирует первый пробел как конец имени счетчика. - person Domsch; 31.01.2019
comment
@Domsch в своем скрипте ps добавьте строку write-host --›$count‹--, должно быть что-то не так с переменной $count. - person Larry Song; 01.02.2019