NSClient++
NSClient++ can be downloaded from http://nsclient.org/download/
NSClient++ 0.5.0.62, single package for 32- or 64-bit with configuration control
This package installs the 32-bit or 64-bit version of NSClient++, as appropriate, and opens the necessary holes in the firewall.
This package controls configuration with nscp.exe settings --path path to key -key key name --set value
instead of copying an INI file.
Note that when upgrading from 0.3.8, firewall rules need to be switched to point to the new nscp.exe
instead of nsclient++.exe
. This package handles that with netsh advfirewall
.
<package
id="nscp"
name="NSClient++"
revision="%version%-%configversion%"
reboot="false">
<variable name="version" value="0.5.0.62" />
<variable name="configversion" value="1" />
<!-- Set IP address or network of your monitoring system(s) -->
<variable name="myips" value="10.0.0.0/24" />
<check
type="uninstall"
condition="versiongreaterorequal"
value="%version%"
path="NSClient\+\+.*" />
<check
type="file"
condition="versiongreaterorequal"
path="%PROGRAMFILES%\NSClient++\nscp.exe"
value="%version%" />
<install cmd='msiexec /qn /norestart /i "%SOFTWARE%\NSclient\NSCP-%version%-x64.msi"' architecture="x64" />
<install cmd='msiexec /qn /norestart /i "%SOFTWARE%\NSclient\NSCP-%version%-Win32.msi"' architecture="x86" />
<install cmd="netsh advfirewall firewall set rule name="NSClient++ Monitoring Agent" profile="any" new remoteip="%myips%"" />
<!-- Handle upgrades from e.g. 0.3.8, where the binary was nsclient++.exe and the firewall rules will be wrong -->
<install cmd="netsh advfirewall firewall set rule name="NSClient++ Monitoring Agent" profile="any" new program="%PROGRAMFILES%\NSclient++\nscp.exe"" />
<!-- Example: Set your password-->
<!--
WARNING. This comment will cause a syntax error if left in, due to double minus in the cmd attribute
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /settings/default --key password --set "your secret password"" />
-->
<!-- Put settings here -->
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckDisk --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckEventLog --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckExternalScripts --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckHelpers --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckNSCP --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckSystem --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key CheckWMI --set 1" />
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /modules --key NSClientServer --set 1" />
<!-- Example: set alternate port -->
<!--
WARNING. This comment will cause a syntax error if left in, due to double minus in the cmd attribute
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /settings/NSClient/server --key port --set 1248" />
-->
<!-- Example: set allowed remote host -->
<!--
WARNING. This comment will cause a syntax error if left in, due to double minus in the cmd attribute
<install cmd=""%PROGRAMFILES%\NSClient++\nscp.exe" settings --path /settings/default --key "allowed hosts" --set 10.0.0.1" />
-->
<!-- This works around a bug in NSClient++ and must appear after ALL other configuration commands! -->
<install cmd='powershell -noprofile -command "(get-content \"%PROGRAMFILES%\NSClient++\\nsclient.ini") | %{$_ -replace \"^An alias is an internal command.*$\", \"\"} | set-content \"%PROGRAMFILES%\NSclient++\nsclient.ini\""' />
<install cmd="net stop nscp">
<exit code="any" />
</install>
<install cmd="net start nscp" />
<upgrade include="install" />
<remove cmd="net stop nscp">
<exit code="any" />
</remove>
<!-- Product code verified with 0.5.0.62 x64, check
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\
for correct GUID with future versions
-->
<remove cmd="MsiExec.exe /qn /x{1B7FBEBA-96B5-4837-82C8-B3EED3BFC9D8}">
<exit code="any" />
</remove>
<remove cmd='msiexec /qn /norestart /x "%SOFTWARE%\NSclient\NSCP-%version%-x64.msi"' architecture="x64" >
<exit code="any" />
</remove>
<remove cmd='msiexec /qn /norestart /x "%SOFTWARE%\NSclient\NSCP-%version%-Win32.msi"' architecture="x86" >
<exit code="any" />
</remove>
</package>
NSClient++ 0.4.1
One package for the 32bit-version, one for the 64bit.
I create an sample init-file, and copy it with each install/upgrade.
The remove-Tag is a bit crude, because i used the (maybe new) package for deinstalling, because i couldn't figure out, how to get the registry-key ...
<package
id="nsclient32"
name="NSClient++ 32bit"
revision="%version%"
priority="0"
reboot="false">
<variable name="version" value="0.4.1.102" />
<check type="logical" condition="or">
<check type="uninstall" condition="versiongreaterorequal" path="NSClient++ (Win32)" value="%version%"/>
<check type="file" condition="versiongreaterorequal" path="%ProgramFiles%\NSClient++\nscp.exe" value="%version%"/>
</check>
<!-- install new package -->
<install cmd='msiexec /quiet /norestart /i %SOFTWARE%\nsclientpp\NSCP-%version%-Win32.msi'/>
<!-- copy (new) Ini -->
<install cmd='xcopy %SOFTWARE%\nsclientpp\nsclient.ini "%ProgramFiles%\NSClient++\nsclient.ini" /q /y'/>
<!-- restart NSclient++ -->
<install cmd='net stop nscp'/>
<install cmd='net start nscp'/>
<upgrade include="install" />
<!-- remove -->
<remove cmd='net stop nscp'/>
<remove cmd='msiexec /quiet /norestart /x %SOFTWARE%\nsclientpp\NSCP-%version%-Win32.msi'/>
</package>
<package
id="nsclient64"
name="NSClient++ 64bit"
revision="%version%"
priority="0"
reboot="false">
<variable name="version" value="0.4.1.102" />
<check type="logical" condition="or">
<check type="uninstall" condition="versiongreaterorequal" path="NSClient++ (x64)" value="%version%"/>
<check type="file" condition="versiongreaterorequal" path="%ProgramFiles%\NSClient++\nscp.exe" value="%version%"/>
</check>
<!-- install new package -->
<install cmd='msiexec /quiet /norestart /i %SOFTWARE%\nsclientpp\NSCP-%version%-x64.msi'/>
<!-- copy (new) ini -->
<install cmd='xcopy %SOFTWARE%software\nsclientpp\nsclient.ini "%ProgramFiles%\NSClient++\nsclient.ini" /q /y'/>
<!-- restart NSclient++ -->
<install cmd='net stop nscp'/>
<install cmd='net start nscp'/>
<upgrade include="install" />
<!-- remove -->
<remove cmd='net stop nscp'/>
<remove cmd='msiexec /quiet /norestart /x %SOFTWARE%software\nsclientpp\NSCP-%version%-x64.msi'/>
</package>
NSClient++ Plugins
If you have own scripts for NSClient++, this package may be useful.
Because i haven't set a version number for the scripts, i use the date and write it to a file on the local computer. A batch-skript in the tools-directory compare xml-version with installed-version (see below), to call it i used a %SETTINGS%-Variable from WPKG, which link on the WPKG-Root (I should define a own Variable for that, i now ... maybe later :-)
<package
id="nsclientplugins"
name="NSClient++ Plugins"
revision="%version%"
priority="0"
reboot="false">
<variable name="version" value="2013-05-27" />
<variable name="versionfile" value="%ProgramFiles%\NSClient++\scripts\pluginsversion.txt" />
<check type="execute" path='%SETTINGS%tools\compareStringAndFile.bat "%version%" "%versionfile%"' condition="exitcodeequalto" value="0"/>
<!-- stop NSclient++ -->
<install cmd='net stop nscp'>
<exit code="0" />
<!-- If Nsclient++ already stopped, continue too. -->
<exit code="2" />
</install>
<!-- copy new skripts -->
<install cmd='xcopy %SOFTWARE%\nsclientpp\scripts\* "%ProgramFiles%\NSClient++\scripts\" /q /y'/>
<!-- set version -->
<install cmd='%ComSpec% /c echo %version%>"%versionfile%"'/>
<!-- to be sure: set executionpolicy of the powershell (If you don't have powershellskripts, you don't need this) -->
<install cmd='powershell Set-ExecutionPolicy remotesigned -Confirm:$false'/>
<!-- and start NSclient++ -->
<install cmd='net start nscp'/>
<upgrade include="install" />
</package>
</packages:packages>
And the compareStringAndFile.bat:
@echo off
REM compare parameter 1 (string) with content of parameter 2 (file)
set /p FILECONTENT=<%2
set FILECONTENT="%FILECONTENT%"
REM echo %FILECONTENT%
REM echo %1
if %1 == %FILECONTENT% exit /B 0
REM echo "Die Strings sind ungleich!"
exit /B 1