Missing expression after unary operator '-'. At line:1 char:2









up vote
0
down vote

favorite












I am facing a peculiar issue in PowerShell 2.0. I am not an expert in PS, but occasionally write/edit few scripts to work with Nagios monitoring tool. Requesting help form Nagios experts. Your help will be appreciated.



The script ExServiceAlert10.ps1 is embedded below:



#First, findout if Exchange Management Shell is loaded:
$snapins = Get-PSSnapin |select name
$snapincount=0;
$found = $false
do

$founDName = $snapins[$snapincount].name
if ($founDName -eq “Microsoft.Exchange.Management.PowerShell.E2010″)
#Exchange Shell already loaded

$found = $True
break

$snapincount++
while ($snapincount -lt $snapins.Count)
if ($found -ne $True)

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

# Create variables
$status = 0
$desc = “”
# Get Service Health
Test-ServiceHealth | ForEach-Object
$main = “`n" + "Role: " + $_.Role + "`n” + “Status: ” + $_.RequiredServicesRunning + “`n”
if ($_.RequiredServicesRunning -eq “True”)
$array = $_.ServicesRunning
$runningsvcs = “Services running:”
foreach ($svc in $array)
$runningsvcs = $runningsvcs + ” ” + $svc

$desc += $main +$runningsvcs + “`n”
else
$status = 1
$array = $_.ServicesNotRunning
$notrunning = “Services Not running”
foreach ($svc in $array)
$notrunning = $notrunning + ” ” + $svc

$desc += $main + $notrunning


if ($status -eq 1)
echo “Critical – Exchange Services Alert $desc”
exit 2
else
echo “OK – Exchange Services Alert $desc”
exit 0



The script is working fine and shows no error, if I directly execute it in PowerShell like this:



PS C:Windowssystem32> D:ExServiceAlert10.ps1


But it shows error when I execute it via cmd or from Nagios NSClient++ like this:



Normal command Prompt execution: (Script placed at D:)
D:>echo .ExServiceAlert10.ps1 ; exit $LastExitCode | powershell.exe -command -



From nagios NSclient++ execution via check_nrpe: (Script placed at NSclient Script directory)



cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –


The error I am getting is this:



Missing expression after unary opearator ‘-’.

At line:1 char:2
+ – <<<<
+ CategoryInfo : ParseError: (-:String) , ParentContainsErrorRecordException
+FullyQualifiedErrorId : MissingExpressionAfterOperator


I am executing this script in PowerShell 2.0 and tried various debugging methods to solve this for the past week with no success.



Here are some entries from my NSClient++ conf. file NSC.ini for other PS scripts which are working fine without any issue.



exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –


Even the reported errant script(ExServiceAlert10.ps1) is working fine in my test system with that extra dash in command prompt but not working at all in any of the the Prod. system. All the PS versions are 2.0.



I think either I have to enable/disable some PS environment settings on those errant Prod. systems, or to escape something inside the script (suspecting newline characters- `n backtick n) . I don’t understand why it is reporting Line:1 and char:2, which is nothing but a comment line in the script.



I have seen this particular error reported by few others and their issue was resolved after upgrading their PS to Ver 2.0. Mine is already 2.0 and don’t know what to do next.



NSC.ini file:



;Nagios agent for BR 1.8 dated Aug 30, 2012. The MSI is updated to 0.3.9 version of nsclient++ and is re-packaged for silent installation. Install.vbs is removed.
[modules]
NRPEListener.dll
NSClientListener.dll
NSCAAgent.dll
CheckWMI.dll
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
CheckEventLog.dll
CheckHelpers.dll
CheckExternalScripts.dll
;# NSCLIENT++ MODULES
;# A list with DLLs to load at startup.
; You will need to enable some of these for NSClient++ to work.
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
; * *
; * N O T I C E ! ! ! - Y O U H A V E T O E D I T T H I S *
; * *
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
;FileLogger.dll
;CheckSystem.dll
;CheckDisk.dll
;NSClientListener.dll
;NRPEListener.dll
;SysTray.dll
;CheckEventLog.dll
;CheckHelpers.dll
;CheckWMI.dll
;CheckNSCP.dll
;
; Script to check external scripts and/or internal aliases.
;CheckExternalScripts.dll
;
; NSCA Agent if you enable this NSClient++ will talk to NSCA hosts repeatedly (so dont enable unless you want to use NSCA)
;NSCAAgent.dll
;
; LUA script module used to write your own "check deamon".
;LUAScript.dll
;
; RemoteConfiguration IS AN EXTREM EARLY IDEA SO DONT USE FOR PRODUCTION ENVIROMNEMTS!
;RemoteConfiguration.dll
; Check other hosts through NRPE extreme beta and probably a bit dangerous! :)
;NRPEClient.dll
; Extreamly early beta of a task-schedule checker
;CheckTaskSched.dll
[crash]
; Archive crash dump files if a crash is detected
;archive=1
; Submit crash reports to a crash report server (this overrrides archive)
;submit=0
; Restart service if a crash is detected
;restart=1
[Settings]
;# OBFUSCATED PASSWORD
; This is the same as the password option but here you can store the password in an obfuscated manner.
; *NOTICE* obfuscation is *NOT* the same as encryption, someone with access to this file can still figure out the
; password. Its just a bit harder to do it at first glance.
;obfuscated_password=Jw0KAUUdXlAAUwASDAAB
;
;# PASSWORD
; This is the password (-s) that is required to access NSClient remotely. If you leave this blank everyone will be able to access the daemon remotly.
;password=secret-password
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to the all daemons.
; If leave this blank anyone can access the deamon remotly (NSClient still requires a valid password).
; The syntax is host or ip/mask so 192.168.0.0/24 will allow anyone on that subnet access
;allowed_hosts=127.0.0.1/32
;
;# USE THIS FILE
; Use the INI file as opposed to the registry if this is 0 and the use_reg in the registry is set to 1
; the registry will be used instead.
use_file=1
allowed_hosts=163.228.10.52
;
; # USE SHARED MEMORY CHANNELS
; This is the "new" way for using the system tray based on an IPC framework on top shared memmory channels and events.
; It is brand new and (probably has bugs) so dont enable this unless for testing!
; If set to 1 shared channels will be created and system tray icons created and such and such...
;shared_session=0
[log]
;# LOG DEBUG
; Set to 1 if you want debug message printed in the log file (debug messages are always printed to stdout when run with -test)
;debug=1
;
;# LOG FILE
; The file to print log statements to
;file=nsclient.log
;
;# LOG DATE MASK
; The format to for the date/time part of the log entry written to file.
;date_mask=%Y-%m-%d %H:%M:%S
;
;# LOG ROOT FOLDER
; The root folder to use for logging.
; exe = the folder where the executable is located
; local-app-data = local application data (probably a better choice then the old default)
;root_folder=exe
[NSClient]
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NSClient deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# NSCLIENT PORT NUMBER
; This is the port the NSClientListener.dll will listen to.
port=12489
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
;bind_to_address=
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
socket_timeout=60
[NRPE]
;# NRPE PORT NUMBER
; This is the port the NRPEListener.dll will listen to.
port=5666
;
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# USE SSL SOCKET
; This option controls if SSL should be used on the socket.
;use_ssl=1
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
; bind_to_address=
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NRPE deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=scripts
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
;socket_timeout=30
[Check System]
;# CPU BUFFER SIZE
; Can be anything ranging from 1s (for 1 second) to 10w for 10 weeks. Notice that a larger buffer will waste memory
; so don't use a larger buffer then you need (ie. the longest check you do +1).
;CPUBufferSize=1h
;
;# CHECK RESOLUTION
; The resolution to check values (currently only CPU).
; The value is entered in 1/10:th of a second and the default is 10 (which means ones every second)
;CheckResolution=10
;
;# CHECK ALL SERVICES
; Configure how to check services when a CheckAll is performed.
; ...=started means services in that class *has* to be running.
; ...=stopped means services in that class has to be stopped.
; ...=ignored means services in this class will be ignored.
;check_all_services[SERVICE_BOOT_START]=ignored
;check_all_services[SERVICE_SYSTEM_START]=ignored
;check_all_services[SERVICE_AUTO_START]=started
;check_all_services[SERVICE_DEMAND_START]=ignored
;check_all_services[SERVICE_DISABLED]=stopped
[External Script]
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
;command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=c:myscriptdir
[Script Wrappings]
vbs=cscript.exe //T:30 //NoLogo scriptslibwrapper.vbs %SCRIPT% %ARGS%
ps1=cmd /c echo scripts%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
bat=scripts%SCRIPT% %ARGS%
[External Scripts]
;check_es_long=scriptslong.bat
;check_es_ok=scriptsok.bat
;check_es_nok=scriptsnok.bat
;check_vbs_sample=cscript.exe //T:30 //NoLogo scriptscheck_vb.vbs
;check_powershell_warn=cmd /c echo scriptspowershell.ps1 | powershell.exe -command -
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_log=perl scriptscheck_log2.pl -l "$ARG1$" -p1 "$ARG2$" -p2 "$ARG3$" -p3 "$ARG4$" -p4 "$ARG5$"
check_log2=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_log3=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -n "$ARG3$" -p1 "$ARG4$" -p2 "$ARG5$" -p3 "$ARG6$" -p4 "$ARG7$"
check_vlog=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_vlog2=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$" -w "$ARG7$" -c "$ARG8$"
check_log_mp1=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -w $ARG4$ -c $ARG5$
check_log_mp2=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -w $ARG5$ -c $ARG6$
check_log_mp3=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -s "$ARG5$" -w $ARG6$ -c $ARG7$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_backupexec=cscript.exe scriptscheck_backupexec.vbs //Nologo
check_be=scriptscheck_be.exe "C:Program FilesSymantecBackup ExecData" "$ARG1$" -w"$ARG2$" -c"$ARG3$"
[External Alias]
alias_cpu=checkCPU warn=80 crit=90 time=5m time=1m time=30s
alias_cpu_ex=checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
alias_mem=checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
alias_up=checkUpTime MinWarn=1d MinWarn=1h
alias_disk=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
alias_disk_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
alias_volumes=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
alias_volumes_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable
alias_service=checkServiceState CheckAll
alias_service_ex=checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
alias_process=checkProcState "$ARG1$=started"
alias_process_stopped=checkProcState "$ARG1$=stopped"
alias_process_count=checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
alias_process_hung=checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"
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_size=CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
alias_file_age=checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"
alias_sched_all=CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
alias_sched_long=CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_sched_task=CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_updates=check_updates -warning 0 -critical 0
check_ok=CheckOK Everything is fine!
[Wrapped Scripts]
;check_test_vbs=check_test.vbs /arg1:1 /arg2:1 /variable:1
;check_test_ps1=check_test.ps1 arg1 arg2
;check_test_bat=check_test.bat arg1 arg2
;check_battery=check_battery.vbs
;check_printer=check_printer.vbs
;check_updates=check_updates.vbs
; [includes]
;# The order when used is "reversed" thus the last included file will be "first"
;# Included files can include other files (be carefull only do basic recursive checking)
;
; myotherfile.ini
; real.ini
[NSCA Agent]
;# CHECK INTERVALL (in seconds)
; How often we should run the checks and submit the results.
;interval=5
;
;# ENCRYPTION METHOD
; This option determines the method by which the send_nsca client will encrypt the packets it sends
; to the nsca daemon. The encryption method you choose will be a balance between security and
; performance, as strong encryption methods consume more processor resources.
; You should evaluate your security needs when choosing an encryption method.
;
; Note: The encryption method you specify here must match the decryption method the nsca daemon uses
; (as specified in the nsca.cfg file)!!
; Values:
; 0 = None (Do NOT use this option)
; 1 = Simple XOR (No security, just obfuscation, but very fast)
; 2 = DES
; 3 = 3DES (Triple DES)
; 4 = CAST-128
; 6 = xTEA
; 8 = BLOWFISH
; 9 = TWOFISH
; 11 = RC2
; 14 = RIJNDAEL-128 (AES)
; 20 = SERPENT
;encryption_method=14
;
;# ENCRYPTION PASSWORD
; This is the password/passphrase that should be used to encrypt the sent packets.
;password=
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to "one" local interface.
; -- not supported as of now --
;bind_to_address=
;
;# LOCAL HOST NAME
; The name of this host (if empty "computername" will be used.
;hostname=
;
;# NAGIOS SERVER ADDRESS
; The address to the nagios server to submit results to.
;nsca_host=192.168.0.1
;
;# NAGIOS SERVER PORT
; The port to the nagios server to submit results to.
;nsca_port=5667
;
;# CHECK COMMAND LIST
; The checks to run everytime we submit results back to nagios
; Any command(alias/key) starting with a host_ is sent as HOST_COMMAND others are sent as SERVICE_COMMANDS
; where the alias/key is used as service name.
;
[NSCA Commands]
;my_cpu_check=checkCPU warn=80 crit=90 time=20m time=10s time=4
;my_mem_check=checkMem MaxWarn=80% MaxCrit=90% ShowAll type=page
;my_svc_check=checkServiceState CheckAll exclude=wampmysqld exclude=MpfService
;host_check=check_ok
;# REMOTE NRPE PROXY COMMANDS
; A list of commands that check other hosts.
; Used by the NRPECLient module
[NRPE Client Handlers]
check_other=-H 192.168.0.1 -p 5666 -c remote_command -a arguments
;# LUA SCRIPT SECTION
; A list of all Lua scripts to load.
;[LUA Scripts]
;scriptstest.lua
[EventLog]
debug=0
buffer_size=512000
[NRPE Handlers]
exch_dag=cmd /c echo scriptsExDAG.ps1; exit $LastExitCode; | powershell.exe -command –
exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –
exch_mapi10=cmd /c echo scriptsExchMapi10.ps1; exit $LastExitCode | powershell.exe -command -
exch_queue_health10=cmd /c echo scriptsExQueueHealth10.ps1; exit $LastExitCode | powershell.exe -command -
exch_search10=cmd /c echo scriptsExchSearch10.ps1; exit $LastExitCode | powershell.exe -command -
exch_service_alert10=cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –
;#Windows Update Checker
check_updates=c:windowssystem32cscript.exe //NoLogo //T:40 "C:Program FilesNSClient++scriptscheck_updates.wsf" $ARG1$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_nbu_backup=cmd /c echo scriptscheck_nbu_backstat.ps1 -nbuClient $ARG1$; exit $LastExitCode | powershell.exe -command -
check_nbu_backup2=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_nbu_backstat.vbs" /nbuClient:$ARG1$ /filePath:"$ARG2$"
check_dcdiag=scriptscheck_ad.exe --dc
check_dcdiag2=perl scriptscheck_ad.pl --dc
check_dcdiag3=cscript.exe //nologo scriptscheck_AD.vbs


Please let me know if any further information is required here. Thank you in advance.










share|improve this question























  • Why go through all the trouble with echo-n-pipe the script to Powershell? You could simply pass scirpt name as an argument, like so: powershell -file c:myPathMyScript.ps1
    – vonPryz
    Aug 6 '13 at 7:48










  • Thank you Von! It is not working in NSclient++. Using your suggestion, I can execute a PS1 script in normal command prompt but not from inside Nsclient++ agent. NSClient++ suggest some specific way to execute a PS1 script. We are also passing few arguments sometimes to the script and return the $LastExitCode (Script return value) to the remote calling process (check_nrpe).
    – Santosh Panigrahi
    Aug 6 '13 at 10:59











  • At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues.
    – Santosh Panigrahi
    Aug 7 '13 at 16:01











  • Do you have the output of check, in nagios.log file ? I've the same problem, but it isn't hypen for me.
    – clarkseth
    Feb 12 '14 at 17:16














up vote
0
down vote

favorite












I am facing a peculiar issue in PowerShell 2.0. I am not an expert in PS, but occasionally write/edit few scripts to work with Nagios monitoring tool. Requesting help form Nagios experts. Your help will be appreciated.



The script ExServiceAlert10.ps1 is embedded below:



#First, findout if Exchange Management Shell is loaded:
$snapins = Get-PSSnapin |select name
$snapincount=0;
$found = $false
do

$founDName = $snapins[$snapincount].name
if ($founDName -eq “Microsoft.Exchange.Management.PowerShell.E2010″)
#Exchange Shell already loaded

$found = $True
break

$snapincount++
while ($snapincount -lt $snapins.Count)
if ($found -ne $True)

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

# Create variables
$status = 0
$desc = “”
# Get Service Health
Test-ServiceHealth | ForEach-Object
$main = “`n" + "Role: " + $_.Role + "`n” + “Status: ” + $_.RequiredServicesRunning + “`n”
if ($_.RequiredServicesRunning -eq “True”)
$array = $_.ServicesRunning
$runningsvcs = “Services running:”
foreach ($svc in $array)
$runningsvcs = $runningsvcs + ” ” + $svc

$desc += $main +$runningsvcs + “`n”
else
$status = 1
$array = $_.ServicesNotRunning
$notrunning = “Services Not running”
foreach ($svc in $array)
$notrunning = $notrunning + ” ” + $svc

$desc += $main + $notrunning


if ($status -eq 1)
echo “Critical – Exchange Services Alert $desc”
exit 2
else
echo “OK – Exchange Services Alert $desc”
exit 0



The script is working fine and shows no error, if I directly execute it in PowerShell like this:



PS C:Windowssystem32> D:ExServiceAlert10.ps1


But it shows error when I execute it via cmd or from Nagios NSClient++ like this:



Normal command Prompt execution: (Script placed at D:)
D:>echo .ExServiceAlert10.ps1 ; exit $LastExitCode | powershell.exe -command -



From nagios NSclient++ execution via check_nrpe: (Script placed at NSclient Script directory)



cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –


The error I am getting is this:



Missing expression after unary opearator ‘-’.

At line:1 char:2
+ – <<<<
+ CategoryInfo : ParseError: (-:String) , ParentContainsErrorRecordException
+FullyQualifiedErrorId : MissingExpressionAfterOperator


I am executing this script in PowerShell 2.0 and tried various debugging methods to solve this for the past week with no success.



Here are some entries from my NSClient++ conf. file NSC.ini for other PS scripts which are working fine without any issue.



exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –


Even the reported errant script(ExServiceAlert10.ps1) is working fine in my test system with that extra dash in command prompt but not working at all in any of the the Prod. system. All the PS versions are 2.0.



I think either I have to enable/disable some PS environment settings on those errant Prod. systems, or to escape something inside the script (suspecting newline characters- `n backtick n) . I don’t understand why it is reporting Line:1 and char:2, which is nothing but a comment line in the script.



I have seen this particular error reported by few others and their issue was resolved after upgrading their PS to Ver 2.0. Mine is already 2.0 and don’t know what to do next.



NSC.ini file:



;Nagios agent for BR 1.8 dated Aug 30, 2012. The MSI is updated to 0.3.9 version of nsclient++ and is re-packaged for silent installation. Install.vbs is removed.
[modules]
NRPEListener.dll
NSClientListener.dll
NSCAAgent.dll
CheckWMI.dll
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
CheckEventLog.dll
CheckHelpers.dll
CheckExternalScripts.dll
;# NSCLIENT++ MODULES
;# A list with DLLs to load at startup.
; You will need to enable some of these for NSClient++ to work.
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
; * *
; * N O T I C E ! ! ! - Y O U H A V E T O E D I T T H I S *
; * *
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
;FileLogger.dll
;CheckSystem.dll
;CheckDisk.dll
;NSClientListener.dll
;NRPEListener.dll
;SysTray.dll
;CheckEventLog.dll
;CheckHelpers.dll
;CheckWMI.dll
;CheckNSCP.dll
;
; Script to check external scripts and/or internal aliases.
;CheckExternalScripts.dll
;
; NSCA Agent if you enable this NSClient++ will talk to NSCA hosts repeatedly (so dont enable unless you want to use NSCA)
;NSCAAgent.dll
;
; LUA script module used to write your own "check deamon".
;LUAScript.dll
;
; RemoteConfiguration IS AN EXTREM EARLY IDEA SO DONT USE FOR PRODUCTION ENVIROMNEMTS!
;RemoteConfiguration.dll
; Check other hosts through NRPE extreme beta and probably a bit dangerous! :)
;NRPEClient.dll
; Extreamly early beta of a task-schedule checker
;CheckTaskSched.dll
[crash]
; Archive crash dump files if a crash is detected
;archive=1
; Submit crash reports to a crash report server (this overrrides archive)
;submit=0
; Restart service if a crash is detected
;restart=1
[Settings]
;# OBFUSCATED PASSWORD
; This is the same as the password option but here you can store the password in an obfuscated manner.
; *NOTICE* obfuscation is *NOT* the same as encryption, someone with access to this file can still figure out the
; password. Its just a bit harder to do it at first glance.
;obfuscated_password=Jw0KAUUdXlAAUwASDAAB
;
;# PASSWORD
; This is the password (-s) that is required to access NSClient remotely. If you leave this blank everyone will be able to access the daemon remotly.
;password=secret-password
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to the all daemons.
; If leave this blank anyone can access the deamon remotly (NSClient still requires a valid password).
; The syntax is host or ip/mask so 192.168.0.0/24 will allow anyone on that subnet access
;allowed_hosts=127.0.0.1/32
;
;# USE THIS FILE
; Use the INI file as opposed to the registry if this is 0 and the use_reg in the registry is set to 1
; the registry will be used instead.
use_file=1
allowed_hosts=163.228.10.52
;
; # USE SHARED MEMORY CHANNELS
; This is the "new" way for using the system tray based on an IPC framework on top shared memmory channels and events.
; It is brand new and (probably has bugs) so dont enable this unless for testing!
; If set to 1 shared channels will be created and system tray icons created and such and such...
;shared_session=0
[log]
;# LOG DEBUG
; Set to 1 if you want debug message printed in the log file (debug messages are always printed to stdout when run with -test)
;debug=1
;
;# LOG FILE
; The file to print log statements to
;file=nsclient.log
;
;# LOG DATE MASK
; The format to for the date/time part of the log entry written to file.
;date_mask=%Y-%m-%d %H:%M:%S
;
;# LOG ROOT FOLDER
; The root folder to use for logging.
; exe = the folder where the executable is located
; local-app-data = local application data (probably a better choice then the old default)
;root_folder=exe
[NSClient]
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NSClient deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# NSCLIENT PORT NUMBER
; This is the port the NSClientListener.dll will listen to.
port=12489
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
;bind_to_address=
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
socket_timeout=60
[NRPE]
;# NRPE PORT NUMBER
; This is the port the NRPEListener.dll will listen to.
port=5666
;
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# USE SSL SOCKET
; This option controls if SSL should be used on the socket.
;use_ssl=1
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
; bind_to_address=
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NRPE deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=scripts
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
;socket_timeout=30
[Check System]
;# CPU BUFFER SIZE
; Can be anything ranging from 1s (for 1 second) to 10w for 10 weeks. Notice that a larger buffer will waste memory
; so don't use a larger buffer then you need (ie. the longest check you do +1).
;CPUBufferSize=1h
;
;# CHECK RESOLUTION
; The resolution to check values (currently only CPU).
; The value is entered in 1/10:th of a second and the default is 10 (which means ones every second)
;CheckResolution=10
;
;# CHECK ALL SERVICES
; Configure how to check services when a CheckAll is performed.
; ...=started means services in that class *has* to be running.
; ...=stopped means services in that class has to be stopped.
; ...=ignored means services in this class will be ignored.
;check_all_services[SERVICE_BOOT_START]=ignored
;check_all_services[SERVICE_SYSTEM_START]=ignored
;check_all_services[SERVICE_AUTO_START]=started
;check_all_services[SERVICE_DEMAND_START]=ignored
;check_all_services[SERVICE_DISABLED]=stopped
[External Script]
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
;command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=c:myscriptdir
[Script Wrappings]
vbs=cscript.exe //T:30 //NoLogo scriptslibwrapper.vbs %SCRIPT% %ARGS%
ps1=cmd /c echo scripts%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
bat=scripts%SCRIPT% %ARGS%
[External Scripts]
;check_es_long=scriptslong.bat
;check_es_ok=scriptsok.bat
;check_es_nok=scriptsnok.bat
;check_vbs_sample=cscript.exe //T:30 //NoLogo scriptscheck_vb.vbs
;check_powershell_warn=cmd /c echo scriptspowershell.ps1 | powershell.exe -command -
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_log=perl scriptscheck_log2.pl -l "$ARG1$" -p1 "$ARG2$" -p2 "$ARG3$" -p3 "$ARG4$" -p4 "$ARG5$"
check_log2=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_log3=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -n "$ARG3$" -p1 "$ARG4$" -p2 "$ARG5$" -p3 "$ARG6$" -p4 "$ARG7$"
check_vlog=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_vlog2=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$" -w "$ARG7$" -c "$ARG8$"
check_log_mp1=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -w $ARG4$ -c $ARG5$
check_log_mp2=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -w $ARG5$ -c $ARG6$
check_log_mp3=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -s "$ARG5$" -w $ARG6$ -c $ARG7$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_backupexec=cscript.exe scriptscheck_backupexec.vbs //Nologo
check_be=scriptscheck_be.exe "C:Program FilesSymantecBackup ExecData" "$ARG1$" -w"$ARG2$" -c"$ARG3$"
[External Alias]
alias_cpu=checkCPU warn=80 crit=90 time=5m time=1m time=30s
alias_cpu_ex=checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
alias_mem=checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
alias_up=checkUpTime MinWarn=1d MinWarn=1h
alias_disk=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
alias_disk_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
alias_volumes=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
alias_volumes_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable
alias_service=checkServiceState CheckAll
alias_service_ex=checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
alias_process=checkProcState "$ARG1$=started"
alias_process_stopped=checkProcState "$ARG1$=stopped"
alias_process_count=checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
alias_process_hung=checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"
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_size=CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
alias_file_age=checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"
alias_sched_all=CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
alias_sched_long=CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_sched_task=CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_updates=check_updates -warning 0 -critical 0
check_ok=CheckOK Everything is fine!
[Wrapped Scripts]
;check_test_vbs=check_test.vbs /arg1:1 /arg2:1 /variable:1
;check_test_ps1=check_test.ps1 arg1 arg2
;check_test_bat=check_test.bat arg1 arg2
;check_battery=check_battery.vbs
;check_printer=check_printer.vbs
;check_updates=check_updates.vbs
; [includes]
;# The order when used is "reversed" thus the last included file will be "first"
;# Included files can include other files (be carefull only do basic recursive checking)
;
; myotherfile.ini
; real.ini
[NSCA Agent]
;# CHECK INTERVALL (in seconds)
; How often we should run the checks and submit the results.
;interval=5
;
;# ENCRYPTION METHOD
; This option determines the method by which the send_nsca client will encrypt the packets it sends
; to the nsca daemon. The encryption method you choose will be a balance between security and
; performance, as strong encryption methods consume more processor resources.
; You should evaluate your security needs when choosing an encryption method.
;
; Note: The encryption method you specify here must match the decryption method the nsca daemon uses
; (as specified in the nsca.cfg file)!!
; Values:
; 0 = None (Do NOT use this option)
; 1 = Simple XOR (No security, just obfuscation, but very fast)
; 2 = DES
; 3 = 3DES (Triple DES)
; 4 = CAST-128
; 6 = xTEA
; 8 = BLOWFISH
; 9 = TWOFISH
; 11 = RC2
; 14 = RIJNDAEL-128 (AES)
; 20 = SERPENT
;encryption_method=14
;
;# ENCRYPTION PASSWORD
; This is the password/passphrase that should be used to encrypt the sent packets.
;password=
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to "one" local interface.
; -- not supported as of now --
;bind_to_address=
;
;# LOCAL HOST NAME
; The name of this host (if empty "computername" will be used.
;hostname=
;
;# NAGIOS SERVER ADDRESS
; The address to the nagios server to submit results to.
;nsca_host=192.168.0.1
;
;# NAGIOS SERVER PORT
; The port to the nagios server to submit results to.
;nsca_port=5667
;
;# CHECK COMMAND LIST
; The checks to run everytime we submit results back to nagios
; Any command(alias/key) starting with a host_ is sent as HOST_COMMAND others are sent as SERVICE_COMMANDS
; where the alias/key is used as service name.
;
[NSCA Commands]
;my_cpu_check=checkCPU warn=80 crit=90 time=20m time=10s time=4
;my_mem_check=checkMem MaxWarn=80% MaxCrit=90% ShowAll type=page
;my_svc_check=checkServiceState CheckAll exclude=wampmysqld exclude=MpfService
;host_check=check_ok
;# REMOTE NRPE PROXY COMMANDS
; A list of commands that check other hosts.
; Used by the NRPECLient module
[NRPE Client Handlers]
check_other=-H 192.168.0.1 -p 5666 -c remote_command -a arguments
;# LUA SCRIPT SECTION
; A list of all Lua scripts to load.
;[LUA Scripts]
;scriptstest.lua
[EventLog]
debug=0
buffer_size=512000
[NRPE Handlers]
exch_dag=cmd /c echo scriptsExDAG.ps1; exit $LastExitCode; | powershell.exe -command –
exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –
exch_mapi10=cmd /c echo scriptsExchMapi10.ps1; exit $LastExitCode | powershell.exe -command -
exch_queue_health10=cmd /c echo scriptsExQueueHealth10.ps1; exit $LastExitCode | powershell.exe -command -
exch_search10=cmd /c echo scriptsExchSearch10.ps1; exit $LastExitCode | powershell.exe -command -
exch_service_alert10=cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –
;#Windows Update Checker
check_updates=c:windowssystem32cscript.exe //NoLogo //T:40 "C:Program FilesNSClient++scriptscheck_updates.wsf" $ARG1$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_nbu_backup=cmd /c echo scriptscheck_nbu_backstat.ps1 -nbuClient $ARG1$; exit $LastExitCode | powershell.exe -command -
check_nbu_backup2=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_nbu_backstat.vbs" /nbuClient:$ARG1$ /filePath:"$ARG2$"
check_dcdiag=scriptscheck_ad.exe --dc
check_dcdiag2=perl scriptscheck_ad.pl --dc
check_dcdiag3=cscript.exe //nologo scriptscheck_AD.vbs


Please let me know if any further information is required here. Thank you in advance.










share|improve this question























  • Why go through all the trouble with echo-n-pipe the script to Powershell? You could simply pass scirpt name as an argument, like so: powershell -file c:myPathMyScript.ps1
    – vonPryz
    Aug 6 '13 at 7:48










  • Thank you Von! It is not working in NSclient++. Using your suggestion, I can execute a PS1 script in normal command prompt but not from inside Nsclient++ agent. NSClient++ suggest some specific way to execute a PS1 script. We are also passing few arguments sometimes to the script and return the $LastExitCode (Script return value) to the remote calling process (check_nrpe).
    – Santosh Panigrahi
    Aug 6 '13 at 10:59











  • At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues.
    – Santosh Panigrahi
    Aug 7 '13 at 16:01











  • Do you have the output of check, in nagios.log file ? I've the same problem, but it isn't hypen for me.
    – clarkseth
    Feb 12 '14 at 17:16












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I am facing a peculiar issue in PowerShell 2.0. I am not an expert in PS, but occasionally write/edit few scripts to work with Nagios monitoring tool. Requesting help form Nagios experts. Your help will be appreciated.



The script ExServiceAlert10.ps1 is embedded below:



#First, findout if Exchange Management Shell is loaded:
$snapins = Get-PSSnapin |select name
$snapincount=0;
$found = $false
do

$founDName = $snapins[$snapincount].name
if ($founDName -eq “Microsoft.Exchange.Management.PowerShell.E2010″)
#Exchange Shell already loaded

$found = $True
break

$snapincount++
while ($snapincount -lt $snapins.Count)
if ($found -ne $True)

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

# Create variables
$status = 0
$desc = “”
# Get Service Health
Test-ServiceHealth | ForEach-Object
$main = “`n" + "Role: " + $_.Role + "`n” + “Status: ” + $_.RequiredServicesRunning + “`n”
if ($_.RequiredServicesRunning -eq “True”)
$array = $_.ServicesRunning
$runningsvcs = “Services running:”
foreach ($svc in $array)
$runningsvcs = $runningsvcs + ” ” + $svc

$desc += $main +$runningsvcs + “`n”
else
$status = 1
$array = $_.ServicesNotRunning
$notrunning = “Services Not running”
foreach ($svc in $array)
$notrunning = $notrunning + ” ” + $svc

$desc += $main + $notrunning


if ($status -eq 1)
echo “Critical – Exchange Services Alert $desc”
exit 2
else
echo “OK – Exchange Services Alert $desc”
exit 0



The script is working fine and shows no error, if I directly execute it in PowerShell like this:



PS C:Windowssystem32> D:ExServiceAlert10.ps1


But it shows error when I execute it via cmd or from Nagios NSClient++ like this:



Normal command Prompt execution: (Script placed at D:)
D:>echo .ExServiceAlert10.ps1 ; exit $LastExitCode | powershell.exe -command -



From nagios NSclient++ execution via check_nrpe: (Script placed at NSclient Script directory)



cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –


The error I am getting is this:



Missing expression after unary opearator ‘-’.

At line:1 char:2
+ – <<<<
+ CategoryInfo : ParseError: (-:String) , ParentContainsErrorRecordException
+FullyQualifiedErrorId : MissingExpressionAfterOperator


I am executing this script in PowerShell 2.0 and tried various debugging methods to solve this for the past week with no success.



Here are some entries from my NSClient++ conf. file NSC.ini for other PS scripts which are working fine without any issue.



exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –


Even the reported errant script(ExServiceAlert10.ps1) is working fine in my test system with that extra dash in command prompt but not working at all in any of the the Prod. system. All the PS versions are 2.0.



I think either I have to enable/disable some PS environment settings on those errant Prod. systems, or to escape something inside the script (suspecting newline characters- `n backtick n) . I don’t understand why it is reporting Line:1 and char:2, which is nothing but a comment line in the script.



I have seen this particular error reported by few others and their issue was resolved after upgrading their PS to Ver 2.0. Mine is already 2.0 and don’t know what to do next.



NSC.ini file:



;Nagios agent for BR 1.8 dated Aug 30, 2012. The MSI is updated to 0.3.9 version of nsclient++ and is re-packaged for silent installation. Install.vbs is removed.
[modules]
NRPEListener.dll
NSClientListener.dll
NSCAAgent.dll
CheckWMI.dll
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
CheckEventLog.dll
CheckHelpers.dll
CheckExternalScripts.dll
;# NSCLIENT++ MODULES
;# A list with DLLs to load at startup.
; You will need to enable some of these for NSClient++ to work.
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
; * *
; * N O T I C E ! ! ! - Y O U H A V E T O E D I T T H I S *
; * *
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
;FileLogger.dll
;CheckSystem.dll
;CheckDisk.dll
;NSClientListener.dll
;NRPEListener.dll
;SysTray.dll
;CheckEventLog.dll
;CheckHelpers.dll
;CheckWMI.dll
;CheckNSCP.dll
;
; Script to check external scripts and/or internal aliases.
;CheckExternalScripts.dll
;
; NSCA Agent if you enable this NSClient++ will talk to NSCA hosts repeatedly (so dont enable unless you want to use NSCA)
;NSCAAgent.dll
;
; LUA script module used to write your own "check deamon".
;LUAScript.dll
;
; RemoteConfiguration IS AN EXTREM EARLY IDEA SO DONT USE FOR PRODUCTION ENVIROMNEMTS!
;RemoteConfiguration.dll
; Check other hosts through NRPE extreme beta and probably a bit dangerous! :)
;NRPEClient.dll
; Extreamly early beta of a task-schedule checker
;CheckTaskSched.dll
[crash]
; Archive crash dump files if a crash is detected
;archive=1
; Submit crash reports to a crash report server (this overrrides archive)
;submit=0
; Restart service if a crash is detected
;restart=1
[Settings]
;# OBFUSCATED PASSWORD
; This is the same as the password option but here you can store the password in an obfuscated manner.
; *NOTICE* obfuscation is *NOT* the same as encryption, someone with access to this file can still figure out the
; password. Its just a bit harder to do it at first glance.
;obfuscated_password=Jw0KAUUdXlAAUwASDAAB
;
;# PASSWORD
; This is the password (-s) that is required to access NSClient remotely. If you leave this blank everyone will be able to access the daemon remotly.
;password=secret-password
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to the all daemons.
; If leave this blank anyone can access the deamon remotly (NSClient still requires a valid password).
; The syntax is host or ip/mask so 192.168.0.0/24 will allow anyone on that subnet access
;allowed_hosts=127.0.0.1/32
;
;# USE THIS FILE
; Use the INI file as opposed to the registry if this is 0 and the use_reg in the registry is set to 1
; the registry will be used instead.
use_file=1
allowed_hosts=163.228.10.52
;
; # USE SHARED MEMORY CHANNELS
; This is the "new" way for using the system tray based on an IPC framework on top shared memmory channels and events.
; It is brand new and (probably has bugs) so dont enable this unless for testing!
; If set to 1 shared channels will be created and system tray icons created and such and such...
;shared_session=0
[log]
;# LOG DEBUG
; Set to 1 if you want debug message printed in the log file (debug messages are always printed to stdout when run with -test)
;debug=1
;
;# LOG FILE
; The file to print log statements to
;file=nsclient.log
;
;# LOG DATE MASK
; The format to for the date/time part of the log entry written to file.
;date_mask=%Y-%m-%d %H:%M:%S
;
;# LOG ROOT FOLDER
; The root folder to use for logging.
; exe = the folder where the executable is located
; local-app-data = local application data (probably a better choice then the old default)
;root_folder=exe
[NSClient]
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NSClient deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# NSCLIENT PORT NUMBER
; This is the port the NSClientListener.dll will listen to.
port=12489
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
;bind_to_address=
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
socket_timeout=60
[NRPE]
;# NRPE PORT NUMBER
; This is the port the NRPEListener.dll will listen to.
port=5666
;
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# USE SSL SOCKET
; This option controls if SSL should be used on the socket.
;use_ssl=1
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
; bind_to_address=
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NRPE deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=scripts
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
;socket_timeout=30
[Check System]
;# CPU BUFFER SIZE
; Can be anything ranging from 1s (for 1 second) to 10w for 10 weeks. Notice that a larger buffer will waste memory
; so don't use a larger buffer then you need (ie. the longest check you do +1).
;CPUBufferSize=1h
;
;# CHECK RESOLUTION
; The resolution to check values (currently only CPU).
; The value is entered in 1/10:th of a second and the default is 10 (which means ones every second)
;CheckResolution=10
;
;# CHECK ALL SERVICES
; Configure how to check services when a CheckAll is performed.
; ...=started means services in that class *has* to be running.
; ...=stopped means services in that class has to be stopped.
; ...=ignored means services in this class will be ignored.
;check_all_services[SERVICE_BOOT_START]=ignored
;check_all_services[SERVICE_SYSTEM_START]=ignored
;check_all_services[SERVICE_AUTO_START]=started
;check_all_services[SERVICE_DEMAND_START]=ignored
;check_all_services[SERVICE_DISABLED]=stopped
[External Script]
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
;command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=c:myscriptdir
[Script Wrappings]
vbs=cscript.exe //T:30 //NoLogo scriptslibwrapper.vbs %SCRIPT% %ARGS%
ps1=cmd /c echo scripts%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
bat=scripts%SCRIPT% %ARGS%
[External Scripts]
;check_es_long=scriptslong.bat
;check_es_ok=scriptsok.bat
;check_es_nok=scriptsnok.bat
;check_vbs_sample=cscript.exe //T:30 //NoLogo scriptscheck_vb.vbs
;check_powershell_warn=cmd /c echo scriptspowershell.ps1 | powershell.exe -command -
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_log=perl scriptscheck_log2.pl -l "$ARG1$" -p1 "$ARG2$" -p2 "$ARG3$" -p3 "$ARG4$" -p4 "$ARG5$"
check_log2=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_log3=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -n "$ARG3$" -p1 "$ARG4$" -p2 "$ARG5$" -p3 "$ARG6$" -p4 "$ARG7$"
check_vlog=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_vlog2=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$" -w "$ARG7$" -c "$ARG8$"
check_log_mp1=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -w $ARG4$ -c $ARG5$
check_log_mp2=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -w $ARG5$ -c $ARG6$
check_log_mp3=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -s "$ARG5$" -w $ARG6$ -c $ARG7$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_backupexec=cscript.exe scriptscheck_backupexec.vbs //Nologo
check_be=scriptscheck_be.exe "C:Program FilesSymantecBackup ExecData" "$ARG1$" -w"$ARG2$" -c"$ARG3$"
[External Alias]
alias_cpu=checkCPU warn=80 crit=90 time=5m time=1m time=30s
alias_cpu_ex=checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
alias_mem=checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
alias_up=checkUpTime MinWarn=1d MinWarn=1h
alias_disk=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
alias_disk_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
alias_volumes=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
alias_volumes_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable
alias_service=checkServiceState CheckAll
alias_service_ex=checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
alias_process=checkProcState "$ARG1$=started"
alias_process_stopped=checkProcState "$ARG1$=stopped"
alias_process_count=checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
alias_process_hung=checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"
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_size=CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
alias_file_age=checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"
alias_sched_all=CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
alias_sched_long=CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_sched_task=CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_updates=check_updates -warning 0 -critical 0
check_ok=CheckOK Everything is fine!
[Wrapped Scripts]
;check_test_vbs=check_test.vbs /arg1:1 /arg2:1 /variable:1
;check_test_ps1=check_test.ps1 arg1 arg2
;check_test_bat=check_test.bat arg1 arg2
;check_battery=check_battery.vbs
;check_printer=check_printer.vbs
;check_updates=check_updates.vbs
; [includes]
;# The order when used is "reversed" thus the last included file will be "first"
;# Included files can include other files (be carefull only do basic recursive checking)
;
; myotherfile.ini
; real.ini
[NSCA Agent]
;# CHECK INTERVALL (in seconds)
; How often we should run the checks and submit the results.
;interval=5
;
;# ENCRYPTION METHOD
; This option determines the method by which the send_nsca client will encrypt the packets it sends
; to the nsca daemon. The encryption method you choose will be a balance between security and
; performance, as strong encryption methods consume more processor resources.
; You should evaluate your security needs when choosing an encryption method.
;
; Note: The encryption method you specify here must match the decryption method the nsca daemon uses
; (as specified in the nsca.cfg file)!!
; Values:
; 0 = None (Do NOT use this option)
; 1 = Simple XOR (No security, just obfuscation, but very fast)
; 2 = DES
; 3 = 3DES (Triple DES)
; 4 = CAST-128
; 6 = xTEA
; 8 = BLOWFISH
; 9 = TWOFISH
; 11 = RC2
; 14 = RIJNDAEL-128 (AES)
; 20 = SERPENT
;encryption_method=14
;
;# ENCRYPTION PASSWORD
; This is the password/passphrase that should be used to encrypt the sent packets.
;password=
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to "one" local interface.
; -- not supported as of now --
;bind_to_address=
;
;# LOCAL HOST NAME
; The name of this host (if empty "computername" will be used.
;hostname=
;
;# NAGIOS SERVER ADDRESS
; The address to the nagios server to submit results to.
;nsca_host=192.168.0.1
;
;# NAGIOS SERVER PORT
; The port to the nagios server to submit results to.
;nsca_port=5667
;
;# CHECK COMMAND LIST
; The checks to run everytime we submit results back to nagios
; Any command(alias/key) starting with a host_ is sent as HOST_COMMAND others are sent as SERVICE_COMMANDS
; where the alias/key is used as service name.
;
[NSCA Commands]
;my_cpu_check=checkCPU warn=80 crit=90 time=20m time=10s time=4
;my_mem_check=checkMem MaxWarn=80% MaxCrit=90% ShowAll type=page
;my_svc_check=checkServiceState CheckAll exclude=wampmysqld exclude=MpfService
;host_check=check_ok
;# REMOTE NRPE PROXY COMMANDS
; A list of commands that check other hosts.
; Used by the NRPECLient module
[NRPE Client Handlers]
check_other=-H 192.168.0.1 -p 5666 -c remote_command -a arguments
;# LUA SCRIPT SECTION
; A list of all Lua scripts to load.
;[LUA Scripts]
;scriptstest.lua
[EventLog]
debug=0
buffer_size=512000
[NRPE Handlers]
exch_dag=cmd /c echo scriptsExDAG.ps1; exit $LastExitCode; | powershell.exe -command –
exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –
exch_mapi10=cmd /c echo scriptsExchMapi10.ps1; exit $LastExitCode | powershell.exe -command -
exch_queue_health10=cmd /c echo scriptsExQueueHealth10.ps1; exit $LastExitCode | powershell.exe -command -
exch_search10=cmd /c echo scriptsExchSearch10.ps1; exit $LastExitCode | powershell.exe -command -
exch_service_alert10=cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –
;#Windows Update Checker
check_updates=c:windowssystem32cscript.exe //NoLogo //T:40 "C:Program FilesNSClient++scriptscheck_updates.wsf" $ARG1$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_nbu_backup=cmd /c echo scriptscheck_nbu_backstat.ps1 -nbuClient $ARG1$; exit $LastExitCode | powershell.exe -command -
check_nbu_backup2=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_nbu_backstat.vbs" /nbuClient:$ARG1$ /filePath:"$ARG2$"
check_dcdiag=scriptscheck_ad.exe --dc
check_dcdiag2=perl scriptscheck_ad.pl --dc
check_dcdiag3=cscript.exe //nologo scriptscheck_AD.vbs


Please let me know if any further information is required here. Thank you in advance.










share|improve this question















I am facing a peculiar issue in PowerShell 2.0. I am not an expert in PS, but occasionally write/edit few scripts to work with Nagios monitoring tool. Requesting help form Nagios experts. Your help will be appreciated.



The script ExServiceAlert10.ps1 is embedded below:



#First, findout if Exchange Management Shell is loaded:
$snapins = Get-PSSnapin |select name
$snapincount=0;
$found = $false
do

$founDName = $snapins[$snapincount].name
if ($founDName -eq “Microsoft.Exchange.Management.PowerShell.E2010″)
#Exchange Shell already loaded

$found = $True
break

$snapincount++
while ($snapincount -lt $snapins.Count)
if ($found -ne $True)

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

# Create variables
$status = 0
$desc = “”
# Get Service Health
Test-ServiceHealth | ForEach-Object
$main = “`n" + "Role: " + $_.Role + "`n” + “Status: ” + $_.RequiredServicesRunning + “`n”
if ($_.RequiredServicesRunning -eq “True”)
$array = $_.ServicesRunning
$runningsvcs = “Services running:”
foreach ($svc in $array)
$runningsvcs = $runningsvcs + ” ” + $svc

$desc += $main +$runningsvcs + “`n”
else
$status = 1
$array = $_.ServicesNotRunning
$notrunning = “Services Not running”
foreach ($svc in $array)
$notrunning = $notrunning + ” ” + $svc

$desc += $main + $notrunning


if ($status -eq 1)
echo “Critical – Exchange Services Alert $desc”
exit 2
else
echo “OK – Exchange Services Alert $desc”
exit 0



The script is working fine and shows no error, if I directly execute it in PowerShell like this:



PS C:Windowssystem32> D:ExServiceAlert10.ps1


But it shows error when I execute it via cmd or from Nagios NSClient++ like this:



Normal command Prompt execution: (Script placed at D:)
D:>echo .ExServiceAlert10.ps1 ; exit $LastExitCode | powershell.exe -command -



From nagios NSclient++ execution via check_nrpe: (Script placed at NSclient Script directory)



cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –


The error I am getting is this:



Missing expression after unary opearator ‘-’.

At line:1 char:2
+ – <<<<
+ CategoryInfo : ParseError: (-:String) , ParentContainsErrorRecordException
+FullyQualifiedErrorId : MissingExpressionAfterOperator


I am executing this script in PowerShell 2.0 and tried various debugging methods to solve this for the past week with no success.



Here are some entries from my NSClient++ conf. file NSC.ini for other PS scripts which are working fine without any issue.



exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –


Even the reported errant script(ExServiceAlert10.ps1) is working fine in my test system with that extra dash in command prompt but not working at all in any of the the Prod. system. All the PS versions are 2.0.



I think either I have to enable/disable some PS environment settings on those errant Prod. systems, or to escape something inside the script (suspecting newline characters- `n backtick n) . I don’t understand why it is reporting Line:1 and char:2, which is nothing but a comment line in the script.



I have seen this particular error reported by few others and their issue was resolved after upgrading their PS to Ver 2.0. Mine is already 2.0 and don’t know what to do next.



NSC.ini file:



;Nagios agent for BR 1.8 dated Aug 30, 2012. The MSI is updated to 0.3.9 version of nsclient++ and is re-packaged for silent installation. Install.vbs is removed.
[modules]
NRPEListener.dll
NSClientListener.dll
NSCAAgent.dll
CheckWMI.dll
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
CheckEventLog.dll
CheckHelpers.dll
CheckExternalScripts.dll
;# NSCLIENT++ MODULES
;# A list with DLLs to load at startup.
; You will need to enable some of these for NSClient++ to work.
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
; * *
; * N O T I C E ! ! ! - Y O U H A V E T O E D I T T H I S *
; * *
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
;FileLogger.dll
;CheckSystem.dll
;CheckDisk.dll
;NSClientListener.dll
;NRPEListener.dll
;SysTray.dll
;CheckEventLog.dll
;CheckHelpers.dll
;CheckWMI.dll
;CheckNSCP.dll
;
; Script to check external scripts and/or internal aliases.
;CheckExternalScripts.dll
;
; NSCA Agent if you enable this NSClient++ will talk to NSCA hosts repeatedly (so dont enable unless you want to use NSCA)
;NSCAAgent.dll
;
; LUA script module used to write your own "check deamon".
;LUAScript.dll
;
; RemoteConfiguration IS AN EXTREM EARLY IDEA SO DONT USE FOR PRODUCTION ENVIROMNEMTS!
;RemoteConfiguration.dll
; Check other hosts through NRPE extreme beta and probably a bit dangerous! :)
;NRPEClient.dll
; Extreamly early beta of a task-schedule checker
;CheckTaskSched.dll
[crash]
; Archive crash dump files if a crash is detected
;archive=1
; Submit crash reports to a crash report server (this overrrides archive)
;submit=0
; Restart service if a crash is detected
;restart=1
[Settings]
;# OBFUSCATED PASSWORD
; This is the same as the password option but here you can store the password in an obfuscated manner.
; *NOTICE* obfuscation is *NOT* the same as encryption, someone with access to this file can still figure out the
; password. Its just a bit harder to do it at first glance.
;obfuscated_password=Jw0KAUUdXlAAUwASDAAB
;
;# PASSWORD
; This is the password (-s) that is required to access NSClient remotely. If you leave this blank everyone will be able to access the daemon remotly.
;password=secret-password
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to the all daemons.
; If leave this blank anyone can access the deamon remotly (NSClient still requires a valid password).
; The syntax is host or ip/mask so 192.168.0.0/24 will allow anyone on that subnet access
;allowed_hosts=127.0.0.1/32
;
;# USE THIS FILE
; Use the INI file as opposed to the registry if this is 0 and the use_reg in the registry is set to 1
; the registry will be used instead.
use_file=1
allowed_hosts=163.228.10.52
;
; # USE SHARED MEMORY CHANNELS
; This is the "new" way for using the system tray based on an IPC framework on top shared memmory channels and events.
; It is brand new and (probably has bugs) so dont enable this unless for testing!
; If set to 1 shared channels will be created and system tray icons created and such and such...
;shared_session=0
[log]
;# LOG DEBUG
; Set to 1 if you want debug message printed in the log file (debug messages are always printed to stdout when run with -test)
;debug=1
;
;# LOG FILE
; The file to print log statements to
;file=nsclient.log
;
;# LOG DATE MASK
; The format to for the date/time part of the log entry written to file.
;date_mask=%Y-%m-%d %H:%M:%S
;
;# LOG ROOT FOLDER
; The root folder to use for logging.
; exe = the folder where the executable is located
; local-app-data = local application data (probably a better choice then the old default)
;root_folder=exe
[NSClient]
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NSClient deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# NSCLIENT PORT NUMBER
; This is the port the NSClientListener.dll will listen to.
port=12489
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
;bind_to_address=
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
socket_timeout=60
[NRPE]
;# NRPE PORT NUMBER
; This is the port the NRPEListener.dll will listen to.
port=5666
;
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# USE SSL SOCKET
; This option controls if SSL should be used on the socket.
;use_ssl=1
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to all avalible IP adresses.
; bind_to_address=
;
;# ALLOWED HOST ADDRESSES
; This is a comma-delimited list of IP address of hosts that are allowed to talk to NRPE deamon.
; If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=scripts
;
;# SOCKET TIMEOUT
; Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
;socket_timeout=30
[Check System]
;# CPU BUFFER SIZE
; Can be anything ranging from 1s (for 1 second) to 10w for 10 weeks. Notice that a larger buffer will waste memory
; so don't use a larger buffer then you need (ie. the longest check you do +1).
;CPUBufferSize=1h
;
;# CHECK RESOLUTION
; The resolution to check values (currently only CPU).
; The value is entered in 1/10:th of a second and the default is 10 (which means ones every second)
;CheckResolution=10
;
;# CHECK ALL SERVICES
; Configure how to check services when a CheckAll is performed.
; ...=started means services in that class *has* to be running.
; ...=stopped means services in that class has to be stopped.
; ...=ignored means services in this class will be ignored.
;check_all_services[SERVICE_BOOT_START]=ignored
;check_all_services[SERVICE_SYSTEM_START]=ignored
;check_all_services[SERVICE_AUTO_START]=started
;check_all_services[SERVICE_DEMAND_START]=ignored
;check_all_services[SERVICE_DISABLED]=stopped
[External Script]
;# COMMAND TIMEOUT
; This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
;command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
; This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
allow_arguments=1
;
;# COMMAND ALLOW NASTY META CHARS
; This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'") characters in arguments.
allow_nasty_meta_chars=1
;
;# SCRIPT DIRECTORY
; All files in this directory will become check commands.
; *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=c:myscriptdir
[Script Wrappings]
vbs=cscript.exe //T:30 //NoLogo scriptslibwrapper.vbs %SCRIPT% %ARGS%
ps1=cmd /c echo scripts%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
bat=scripts%SCRIPT% %ARGS%
[External Scripts]
;check_es_long=scriptslong.bat
;check_es_ok=scriptsok.bat
;check_es_nok=scriptsnok.bat
;check_vbs_sample=cscript.exe //T:30 //NoLogo scriptscheck_vb.vbs
;check_powershell_warn=cmd /c echo scriptspowershell.ps1 | powershell.exe -command -
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_log=perl scriptscheck_log2.pl -l "$ARG1$" -p1 "$ARG2$" -p2 "$ARG3$" -p3 "$ARG4$" -p4 "$ARG5$"
check_log2=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_log3=perl scriptscheck_log2.pl -l "$ARG1$" -t "$ARG2$" -n "$ARG3$" -p1 "$ARG4$" -p2 "$ARG5$" -p3 "$ARG6$" -p4 "$ARG7$"
check_vlog=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$"
check_vlog2=perl scriptscheck_vlog.pl -l "$ARG1$" -t "$ARG2$" -p1 "$ARG3$" -p2 "$ARG4$" -p3 "$ARG5$" -p4 "$ARG6$" -w "$ARG7$" -c "$ARG8$"
check_log_mp1=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -w $ARG4$ -c $ARG5$
check_log_mp2=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -w $ARG5$ -c $ARG6$
check_log_mp3=perl scriptscheck_log_mp.pl -l "$ARG1$" -p "$ARG2$" -t "$ARG3$" -n "$ARG4$" -s "$ARG5$" -w $ARG6$ -c $ARG7$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_backupexec=cscript.exe scriptscheck_backupexec.vbs //Nologo
check_be=scriptscheck_be.exe "C:Program FilesSymantecBackup ExecData" "$ARG1$" -w"$ARG2$" -c"$ARG3$"
[External Alias]
alias_cpu=checkCPU warn=80 crit=90 time=5m time=1m time=30s
alias_cpu_ex=checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
alias_mem=checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
alias_up=checkUpTime MinWarn=1d MinWarn=1h
alias_disk=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
alias_disk_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
alias_volumes=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
alias_volumes_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable
alias_service=checkServiceState CheckAll
alias_service_ex=checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
alias_process=checkProcState "$ARG1$=started"
alias_process_stopped=checkProcState "$ARG1$=stopped"
alias_process_count=checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
alias_process_hung=checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"
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_size=CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
alias_file_age=checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"
alias_sched_all=CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
alias_sched_long=CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_sched_task=CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_updates=check_updates -warning 0 -critical 0
check_ok=CheckOK Everything is fine!
[Wrapped Scripts]
;check_test_vbs=check_test.vbs /arg1:1 /arg2:1 /variable:1
;check_test_ps1=check_test.ps1 arg1 arg2
;check_test_bat=check_test.bat arg1 arg2
;check_battery=check_battery.vbs
;check_printer=check_printer.vbs
;check_updates=check_updates.vbs
; [includes]
;# The order when used is "reversed" thus the last included file will be "first"
;# Included files can include other files (be carefull only do basic recursive checking)
;
; myotherfile.ini
; real.ini
[NSCA Agent]
;# CHECK INTERVALL (in seconds)
; How often we should run the checks and submit the results.
;interval=5
;
;# ENCRYPTION METHOD
; This option determines the method by which the send_nsca client will encrypt the packets it sends
; to the nsca daemon. The encryption method you choose will be a balance between security and
; performance, as strong encryption methods consume more processor resources.
; You should evaluate your security needs when choosing an encryption method.
;
; Note: The encryption method you specify here must match the decryption method the nsca daemon uses
; (as specified in the nsca.cfg file)!!
; Values:
; 0 = None (Do NOT use this option)
; 1 = Simple XOR (No security, just obfuscation, but very fast)
; 2 = DES
; 3 = 3DES (Triple DES)
; 4 = CAST-128
; 6 = xTEA
; 8 = BLOWFISH
; 9 = TWOFISH
; 11 = RC2
; 14 = RIJNDAEL-128 (AES)
; 20 = SERPENT
;encryption_method=14
;
;# ENCRYPTION PASSWORD
; This is the password/passphrase that should be used to encrypt the sent packets.
;password=
;
;# BIND TO ADDRESS
; Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
; Leaving this blank will bind to "one" local interface.
; -- not supported as of now --
;bind_to_address=
;
;# LOCAL HOST NAME
; The name of this host (if empty "computername" will be used.
;hostname=
;
;# NAGIOS SERVER ADDRESS
; The address to the nagios server to submit results to.
;nsca_host=192.168.0.1
;
;# NAGIOS SERVER PORT
; The port to the nagios server to submit results to.
;nsca_port=5667
;
;# CHECK COMMAND LIST
; The checks to run everytime we submit results back to nagios
; Any command(alias/key) starting with a host_ is sent as HOST_COMMAND others are sent as SERVICE_COMMANDS
; where the alias/key is used as service name.
;
[NSCA Commands]
;my_cpu_check=checkCPU warn=80 crit=90 time=20m time=10s time=4
;my_mem_check=checkMem MaxWarn=80% MaxCrit=90% ShowAll type=page
;my_svc_check=checkServiceState CheckAll exclude=wampmysqld exclude=MpfService
;host_check=check_ok
;# REMOTE NRPE PROXY COMMANDS
; A list of commands that check other hosts.
; Used by the NRPECLient module
[NRPE Client Handlers]
check_other=-H 192.168.0.1 -p 5666 -c remote_command -a arguments
;# LUA SCRIPT SECTION
; A list of all Lua scripts to load.
;[LUA Scripts]
;scriptstest.lua
[EventLog]
debug=0
buffer_size=512000
[NRPE Handlers]
exch_dag=cmd /c echo scriptsExDAG.ps1; exit $LastExitCode; | powershell.exe -command –
exch_mail_flow10=cmd /c echo scriptsExchMailFlow10.ps1; exit $LastExitCode | powershell.exe -command -
exch_mailboxhealth10=cmd /c echo scriptsExMailboxhealth10.ps1; exit $LastExitCode | powershell.exe -command –
exch_mapi10=cmd /c echo scriptsExchMapi10.ps1; exit $LastExitCode | powershell.exe -command -
exch_queue_health10=cmd /c echo scriptsExQueueHealth10.ps1; exit $LastExitCode | powershell.exe -command -
exch_search10=cmd /c echo scriptsExchSearch10.ps1; exit $LastExitCode | powershell.exe -command -
exch_service_alert10=cmd /c echo scriptsExServiceAlert10.ps1; exit $LastExitCode | powershell.exe -command –
;#Windows Update Checker
check_updates=c:windowssystem32cscript.exe //NoLogo //T:40 "C:Program FilesNSClient++scriptscheck_updates.wsf" $ARG1$
check_foldersize=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$
check_foldersize2=c:windowssystem32cscript.exe //NoLogo //T:30 "C:Program FilesNSClient++scriptscheck_folder_size.vbs" "$ARG1$" $ARG2$ $ARG3$ $ARG4$ $ARG5$
check_dfsutil=perl scriptscheck_win_dfsutil.pl -H $ARG1$ $ARG2$
dfsutil_cmd=dfsutil $ARG1$ $ARG2$
dfsdiag_cmd=dfsdiag $ARG1$ $ARG2$
dfsrdiag_cmd=dfsrdiag $ARG1$ $ARG2$
check_dfsdiag=perl scriptscheck_win_dfsdiag.pl -H $ARG1$ -A "$ARG2$"
check_dfsrdiag=perl scriptscheck_win_dfsrdiag_backlog.pl -H $ARG1$ -A "$ARG2$" -w $ARG3$ -c $ARG4$
check_file_mtime=perl scriptscheck_file_mtime.pl -f "$ARG1$" -t "$ARG2$" "-$ARG3$"
;Citrix WMI monitoring plugins
check_licenses_pl=perl scriptscheck_licenseserver.pl -w $ARG1$ -c $ARG2$
check_licenses_vbs=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_ctx_lic.vbs" $ARG1$ $ARG2$ $ARG3$ $ARG4$
check_num_servers_in_zone=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_num_servers_in_zone.vbs" $ARG1$ $ARG2$
check_active_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_active_session.vbs" $ARG1$ $ARG2$
check_disconnected_session=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_disconnected_session.vbs" $ARG1$ $ARG2$
check_metaframe_application_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_application_loadlevel.vbs" $ARG1$ $ARG2$
check_metaframe_server_loadlevel=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_metaframe_server_loadlevel.vbs" $ARG1$ $ARG2$
check_nbu_backup=cmd /c echo scriptscheck_nbu_backstat.ps1 -nbuClient $ARG1$; exit $LastExitCode | powershell.exe -command -
check_nbu_backup2=cscript.exe //nologo "C:Program FilesNSClient++scriptscheck_nbu_backstat.vbs" /nbuClient:$ARG1$ /filePath:"$ARG2$"
check_dcdiag=scriptscheck_ad.exe --dc
check_dcdiag2=perl scriptscheck_ad.pl --dc
check_dcdiag3=cscript.exe //nologo scriptscheck_AD.vbs


Please let me know if any further information is required here. Thank you in advance.







debugging powershell runtime-error nagios unary-operator






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Apr 27 '14 at 14:27









Paul Sweatte

19.2k691207




19.2k691207










asked Aug 6 '13 at 7:17









Santosh Panigrahi

111




111











  • Why go through all the trouble with echo-n-pipe the script to Powershell? You could simply pass scirpt name as an argument, like so: powershell -file c:myPathMyScript.ps1
    – vonPryz
    Aug 6 '13 at 7:48










  • Thank you Von! It is not working in NSclient++. Using your suggestion, I can execute a PS1 script in normal command prompt but not from inside Nsclient++ agent. NSClient++ suggest some specific way to execute a PS1 script. We are also passing few arguments sometimes to the script and return the $LastExitCode (Script return value) to the remote calling process (check_nrpe).
    – Santosh Panigrahi
    Aug 6 '13 at 10:59











  • At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues.
    – Santosh Panigrahi
    Aug 7 '13 at 16:01











  • Do you have the output of check, in nagios.log file ? I've the same problem, but it isn't hypen for me.
    – clarkseth
    Feb 12 '14 at 17:16
















  • Why go through all the trouble with echo-n-pipe the script to Powershell? You could simply pass scirpt name as an argument, like so: powershell -file c:myPathMyScript.ps1
    – vonPryz
    Aug 6 '13 at 7:48










  • Thank you Von! It is not working in NSclient++. Using your suggestion, I can execute a PS1 script in normal command prompt but not from inside Nsclient++ agent. NSClient++ suggest some specific way to execute a PS1 script. We are also passing few arguments sometimes to the script and return the $LastExitCode (Script return value) to the remote calling process (check_nrpe).
    – Santosh Panigrahi
    Aug 6 '13 at 10:59











  • At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues.
    – Santosh Panigrahi
    Aug 7 '13 at 16:01











  • Do you have the output of check, in nagios.log file ? I've the same problem, but it isn't hypen for me.
    – clarkseth
    Feb 12 '14 at 17:16















Why go through all the trouble with echo-n-pipe the script to Powershell? You could simply pass scirpt name as an argument, like so: powershell -file c:myPathMyScript.ps1
– vonPryz
Aug 6 '13 at 7:48




Why go through all the trouble with echo-n-pipe the script to Powershell? You could simply pass scirpt name as an argument, like so: powershell -file c:myPathMyScript.ps1
– vonPryz
Aug 6 '13 at 7:48












Thank you Von! It is not working in NSclient++. Using your suggestion, I can execute a PS1 script in normal command prompt but not from inside Nsclient++ agent. NSClient++ suggest some specific way to execute a PS1 script. We are also passing few arguments sometimes to the script and return the $LastExitCode (Script return value) to the remote calling process (check_nrpe).
– Santosh Panigrahi
Aug 6 '13 at 10:59





Thank you Von! It is not working in NSclient++. Using your suggestion, I can execute a PS1 script in normal command prompt but not from inside Nsclient++ agent. NSClient++ suggest some specific way to execute a PS1 script. We are also passing few arguments sometimes to the script and return the $LastExitCode (Script return value) to the remote calling process (check_nrpe).
– Santosh Panigrahi
Aug 6 '13 at 10:59













At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues.
– Santosh Panigrahi
Aug 7 '13 at 16:01





At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues.
– Santosh Panigrahi
Aug 7 '13 at 16:01













Do you have the output of check, in nagios.log file ? I've the same problem, but it isn't hypen for me.
– clarkseth
Feb 12 '14 at 17:16




Do you have the output of check, in nagios.log file ? I've the same problem, but it isn't hypen for me.
– clarkseth
Feb 12 '14 at 17:16












1 Answer
1






active

oldest

votes

















up vote
0
down vote














At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues







share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f18073929%2fmissing-expression-after-unary-operator-at-line1-char2%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote














    At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues







    share|improve this answer


























      up vote
      0
      down vote














      At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues







      share|improve this answer
























        up vote
        0
        down vote










        up vote
        0
        down vote










        At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues







        share|improve this answer















        At the end I am able to crack the issue and it was very difficult to find. Our administartor copied/pasted the command line for NSC.ini file from a MS-Word document (How To doc.) shared by me to them. In the original MS-Word doc the hypen (at the end of the line after the word command in the beow given command line) has automatically changed to a little bigger hypen during documentation, which also gone to the NSC.ini file and hence the error was coming for this particular command execution. After changing the hypen manually in the NSC.ini, it worked fine without any issues








        share|improve this answer














        share|improve this answer



        share|improve this answer








        answered Oct 25 '13 at 23:23


























        community wiki





        Paul Sweatte




























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f18073929%2fmissing-expression-after-unary-operator-at-line1-char2%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Barbados

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3