Passing arguments to a Powershell Script using Nagios NRPE

18,070

Arguments can be allowed on multiple levels (depending on how you want to slice your "security"). In essence this means you can allow arguments at the NRPE level as well as the external scripts level (and in your case you probably want them in both places)

You can find some background details here: http://docs.nsclient.org/howto/external_scripts.html#arguments

But disregarding the theory to answer your question you need to enable allow arguments in TWO places (see the following):

[/settings/NRPE/server]
allow arguments=true

[/settings/external scripts]
allow arguments=true

[/settings/external scripts/scripts]
foo=scripts\\foo.bat "argument 1" "argument 2"

The one your missing is the latter one:

[/settings/external scripts]
allow arguments=true

So adding that would resolve your issue.

Edit: Add information about the second issue.

The secondary problem with the power shell launch (see comment to this post) was related to powershell oddness which requires a rather intricate command line syntax:

[/settings/external scripts/scripts]
test = cmd /c echo scripts\test.ps1 "$ARG1$"; exit($lastexitcode) | powershell.exe -command -

The problem was the missing - at the end of the command (correct command above).

Share:
18,070

Related videos on Youtube

JustAGuy
Author by

JustAGuy

Updated on September 18, 2022

Comments

  • JustAGuy
    JustAGuy almost 2 years

    Short powershell script for testing:

    $test = $args[0]
    echo "this works"
    echo "I transferred $test"
    exit 0
    

    nsclient.ini settings:

    # If you want to fill this file with all avalible options run the following command:
    #   nscp settings --generate --add-defaults --load-all
    # If you want to activate a module and bring in all its options use:
    #   nscp settings --activate-module <MODULE NAME> --add-defaults
    # For details run: nscp settings --help
    
    
    ; Undocumented section
    [/modules]
    
    ; CheckDisk - CheckDisk can check various file and disk related things. The current version has commands to check Size of hard drives and directories.
    CheckDisk = 1
    
    ; Event log Checker. - Check for errors and warnings in the event log. This is only supported through NRPE so if you plan to use only NSClient this wont help you at all.
    CheckEventLog = 1
    
    ; Check External Scripts - A simple wrapper to run external scripts and batch files.
    CheckExternalScripts = 1
    
    ; Helper function - Various helper function to extend other checks. This is also only supported through NRPE.
    CheckHelpers = 1
    
    ; Check NSCP - Checkes the state of the agent
    CheckNSCP = 1
    
    ; CheckSystem - Various system related checks, such as CPU load, process state, service state memory usage and PDH counters.
    CheckSystem = 1
    
    ; NRPE server - A simple server that listens for incoming NRPE connection and handles them.
    NRPEServer = 1
    
    ; NSClient server - A simple server that listens for incoming NSClient (check_nt) connection and handles them. Although NRPE is the preferred method NSClient is fully supported and can be used for simplicity or for compatibility.
    NSClientServer = 1
    
    
    ; Undocumented section
    [/settings/default]
    
    ; ALLOWED HOSTS - A comaseparated list of allowed hosts. You can use netmasks (/ syntax) or * to create ranges.
    allowed hosts = 10.50.11.164,10.50.11.130
    
    
    ; A list of aliases available. An alias is an internal command that has been "wrapped" (to add arguments). Be careful so you don't create loops (ie check_loop=check_a, check_a=check_loop)
    [/settings/NRPE/server]
    
    ; COMMAND ARGUMENT PROCESSING - This option determines whether or not the we will allow clients to specify arguments to commands that are executed.
    allow arguments = true
    
    ; COMMAND ALLOW NASTY META CHARS - This option determines whether or not the we will allow clients to specify nasty (as in |`&><'"\[]{}) characters in arguments.
    allow nasty characters = true
    
    ; PORT NUMBER - Port to use for NRPE.
    port = 5666
    
    
    [/settings/external scripts/alias]
    
    ; alias_cpu - Alias for alias_cpu. To configure this item add a section called: /settings/external scripts/alias/alias_cpu
    alias_cpu = checkCPU warn=80 crit=90 time=5m time=1m time=30s
    
    ; alias_cpu_ex - Alias for alias_cpu_ex. To configure this item add a section called: /settings/external scripts/alias/alias_cpu_ex
    alias_cpu_ex = checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
    
    ; alias_disk - Alias for alias_disk. To configure this item add a section called: /settings/external scripts/alias/alias_disk
    alias_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
    
    ; alias_disk_loose - Alias for alias_disk_loose. To configure this item add a section called: /settings/external scripts/alias/alias_disk_loose
    alias_disk_loose = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
    
    ; alias_event_log - Alias for alias_event_log. To configure this item add a section called: /settings/external scripts/alias/alias_event_log
    alias_event_log = CheckEventLog file=application file=system MaxWarn=1 MaxCrit=1 "filter=generated gt -2d AND severity NOT IN ('success', 'informational') AND source != 'SideBySide'" truncate=800 unique descriptions "syntax=%severity%: %source%: %message% (%count%)"
    
    ; alias_file_age - Alias for alias_file_age. To configure this item add a section called: /settings/external scripts/alias/alias_file_age
    alias_file_age = checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"
    
    ; alias_file_size - Alias for alias_file_size. To configure this item add a section called: /settings/external scripts/alias/alias_file_size
    alias_file_size = CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
    
    ; alias_mem - Alias for alias_mem. To configure this item add a section called: /settings/external scripts/alias/alias_mem
    alias_mem = checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
    
    ; alias_process - Alias for alias_process. To configure this item add a section called: /settings/external scripts/alias/alias_process
    alias_process = checkProcState "$ARG1$=started"
    
    ; alias_process_count - Alias for alias_process_count. To configure this item add a section called: /settings/external scripts/alias/alias_process_count
    alias_process_count = checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
    
    ; alias_process_hung - Alias for alias_process_hung. To configure this item add a section called: /settings/external scripts/alias/alias_process_hung
    alias_process_hung = checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"
    
    ; alias_process_stopped - Alias for alias_process_stopped. To configure this item add a section called: /settings/external scripts/alias/alias_process_stopped
    alias_process_stopped = checkProcState "$ARG1$=stopped"
    
    ; alias_sched_all - Alias for alias_sched_all. To configure this item add a section called: /settings/external scripts/alias/alias_sched_all
    alias_sched_all = CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
    
    ; alias_sched_long - Alias for alias_sched_long. To configure this item add a section called: /settings/external scripts/alias/alias_sched_long
    alias_sched_long = CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
    
    ; alias_sched_task - Alias for alias_sched_task. To configure this item add a section called: /settings/external scripts/alias/alias_sched_task
    alias_sched_task = CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0
    
    ; alias_service - Alias for alias_service. To configure this item add a section called: /settings/external scripts/alias/alias_service
    alias_service = checkServiceState CheckAll
    
    ; alias_service_ex - Alias for alias_service_ex. To configure this item add a section called: /settings/external scripts/alias/alias_service_ex
    alias_service_ex = checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
    
    ; alias_up - Alias for alias_up. To configure this item add a section called: /settings/external scripts/alias/alias_up
    alias_up = checkUpTime MinWarn=1d MinWarn=1h
    
    ; alias_updates - Alias for alias_updates. To configure this item add a section called: /settings/external scripts/alias/alias_updates
    alias_updates = check_updates -warning 0 -critical 0
    
    ; alias_volumes - Alias for alias_volumes. To configure this item add a section called: /settings/external scripts/alias/alias_volumes
    alias_volumes = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
    
    ; alias_volumes_loose - Alias for alias_volumes_loose. To configure this item add a section called: /settings/external scripts/alias/alias_volumes_loose
    alias_volumes_loose = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable
    
    ; default - Alias for default. To configure this item add a section called: /settings/external scripts/alias/default
    default = 
    
    
    ; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
    [/settings/external scripts/scripts]
    
    ; default - Alias for default. To configure this item add a section called: /settings/external scripts/scripts/default
    default = 
    
    ; shirley - Alias for shirley. To configure this item add a section called: /settings/external scripts/scripts/shirley
    shirley = scripts\check_ok.bat
    
    ; sql - Alias for sql. To configure this item add a section called: /settings/external scripts/scripts/sql
    sql = scripts\check_SQL.bat
    
    ; test - Alias for sql. To configure this item add a section called: /settings/external scripts/scripts/sql
    test = cmd /c echo scripts\test.ps1 "$ARG1$"; exit($lastexitcode) | powershell.exe -command
    
    
    ; A list of wrappped scripts (ie. using the template mechanism)
    [/settings/external scripts/wrapped scripts]
    
    
    ; A list of templates for wrapped scripts
    [/settings/external scripts/wrappings]
    
    ; BATCH FILE WRAPPING - 
    bat = scripts\\%SCRIPT% %ARGS%
    
    ; POWERSHELL WRAPPING - 
    ;ps1 = cmd /c echo scripts\\%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
    
    ; VISUAL BASIC WRAPPING - 
    vbs = cscript.exe //T:30 //NoLogo scripts\\lib\\wrapper.vbs %SCRIPT% %ARGS%
    
    
    [/settings/system/windows]
    
    ; DEFAULT LENGTH - Used to define the default intervall for range buffer checks (ie. CPU).
    default buffer length = 6h
    

    And the Error message:

    $ /usr/local/nagios/libexec/check_nrpe -H 10.11.11.101 -c test -a blablabla RETURN CODE: 3 (UNKNOWN) OUTPUT: Arguments not allowed

    What am I missing?

    • Mathias R. Jessen
      Mathias R. Jessen over 10 years
      What's up with the double exit statements?
    • JustAGuy
      JustAGuy over 10 years
      What double exit statement?
  • JustAGuy
    JustAGuy over 10 years
    That wasnt the only thing I was missing. I also needed the "-" at the end of the line: test = cmd /c echo scripts\test.ps1 "$ARG1$"; exit($lastexitcode) | powershell.exe -command -