diff --git a/doc/3-monitoring-basics.md b/doc/3-monitoring-basics.md
index 0a3703ada..73160ea54 100644
--- a/doc/3-monitoring-basics.md
+++ b/doc/3-monitoring-basics.md
@@ -1,7 +1,10 @@
# Monitoring Basics
This part of the Icinga 2 documentation provides an overview of all the basic
-monitoring concepts you need to know to run Icinga 2.
+monitoring concepts you need to know to run Icinga 2.
+Keep in mind these examples are made with a linux server in mind, if you are
+using Windows you will need to change the services accordingly. See the [ITL reference](7-icinga-template-library.md#windows-plugins)
+ for further information.
## Hosts and Services
diff --git a/doc/7-icinga-template-library.md b/doc/7-icinga-template-library.md
index 77c448d77..0f7a1ef16 100644
--- a/doc/7-icinga-template-library.md
+++ b/doc/7-icinga-template-library.md
@@ -775,6 +775,200 @@ Name | Description
users_wgreater | **Optional.** The user count warning threshold. Defaults to 20.
users_cgreater | **Optional.** The user count critical threshold. Defaults to 50.
+
+# Icinga 2 Windows plugins
+
+To allow a basic monitoring of Windows clients Icinga 2 comes with a set of Windows only plugins. While trying to mirror the functionalities of their linux cousins from the monitoring-plugins package, the differences between Windows and Linux are too big to be able use the same CheckCommands for both systems.
+
+A check-commands-windows.conf comes with Icinga 2, it asumes that the Windows Plugins are installed in the PluginDir set in your constants.conf. To enable them the following include directive is needed in you icinga2.conf:
+
+ include
+
+One of the differences between the Windows plugins and their linux counterparts is that they consistently do not require thresholds to run, functioning like dummies without.
+
+
+## Threshold syntax
+
+So not specified differently the thresholds for the plugins all follow the same pattern
+
+Threshold | Meaning
+:------------|:----------
+"29" | The threshold is 29.
+"!29" | The threshold is 29, but the negative of the result is returned.
+"[10-40]" | The threshold is a range from (including) 20 to 40, a value inside means the threshold has been exceeded.
+"![10-40]" | Same as above, but the result is inverted.
+
+
+## disk-windows
+
+Check command object for the `check_disk.exe` plugin.
+Aggregates the free disk space of all volumes and mount points it can find, or the ones defined in `disk_win_path`. Ignores removable storage like fash drives and discs (CD, DVD etc.).
+
+Custom attributes:
+
+Name | Description
+:---------------|:------------
+disk\_win\_warn | **Optional**. The warning threshold.
+disk\_win\_crit | **Optional**. The critical threshold.
+disk\_win\_path | **Optional**. Check only these paths, default checks all.
+disk\_win\_unit | **Optional**. Use this unit to display disk space, thresholds are interpreted in this unit. Defaults to "mb", possible values are: b, kb, mb, gb and tb.
+
+
+## load-windows
+
+Check command object for the `check_load.exe` plugin.
+This plugin collects the inverse of the performance counter `\Processor(_Total)\% Idle Time` two times, with a wait time of one second between the collection. To change this wait time use [`perfmon-windows`](7-icinga-template-library.md#windows-plugins-load-windows).
+
+Custom attributes:
+
+Name | Description
+:---------------|:------------
+load\_win\_warn | **Optional**. The warning threshold.
+load\_win\_crit | **Optional**. The critical threshold.
+
+
+## memory-windows
+
+Check command object for the `check_memory.exe` plugin.
+The memory collection is instant.
+
+Custom attributes:
+
+Name | Description
+:-----------------|:------------
+memory\_win\_warn | **Optional**. The warning threshold.
+memory\_win\_crit | **Optional**. The critical threshold.
+memory\_win\_unit | **Optional**. The unit to display the received value in, thresholds are interpreted in this unit. Defaults to "mb" (megabye), possible values are: b, kb, mb, gb and tb.
+
+
+## network-windows
+
+Check command object for the `check_network.exe` plugin.
+Collects the total Bytes inbount and outbound for all interfaces in one second, to itemise interfaces or use a different collection interval use [`perfmon-windows`](7-icinga-template-library.md#windows-plugins-load-windows).
+
+Custom attributes:
+
+Name | Description
+:------------------|:------------
+network\_win\_warn | **Optional**. The warning threshold.
+network\_win\_crit | **Optional**. The critical threshold.
+
+
+## perfmon-windows
+
+Check command object for the `check_perfmon.exe` plugin.
+This plugins allows to collect data from a Performance Counter. After the first data collection a second one is done after `perfmon_win_wait` milliseconds. When you know `perfmon_win_counter` only requires one set of data to provide valid data you can set `perfmon_win_wait` to `0`.
+
+To recieve a list of possible Performance Counter Objects run `check_perfmon.exe --print-objects` and to view an objects instances and counters run `check_perfmon.exe --print-object-info -P "name of object"`
+
+Custom attributes:
+
+Name | Description
+:---------------------|:------------
+perfmon\_win\_warn | **Optional**. The warning threshold.
+perfmon\_win\_crit | **Optional**. The critical threshold.
+perfmon\_win\_counter | **Required**. The Performance Counter to use. Ex. `\Processor(_Total)\% Idle Time`.
+perfmon\_win\_wait | **Optional**. Time in milliseconds to wait between data collection (default: 1000).
+perfmon\_win\_type | **Optional**. Format in which to expect perfomance values. Possible are: long, int64 and double (default).
+
+
+## ping-windows
+
+Check command object for the `check_ping.exe` plugin.
+ping-windows should automaticly detect whether `ping_win_address` is an IPv4 or IPv6 address, if not use ping4-windows and ping6-windows. Also note that check\_ping.exe waits at least `ping_win_timeout` milliseconds between the pings.
+
+Custom attributes:
+
+Name | Description
+:------------------|:------------
+ping\_win\_warn | **Optional**. The warning threshold. RTA and package loss seperated by comma.
+ping\_win\_crit | **Optional**. The critical threshold. RTA and package loss seperated by comma.
+ping\_win\_address | **Required**. An IPv4 or IPv6 address
+ping\_win\_packets | **Optional**. Number of packages to send. Default: 5.
+ping\_win\_timeout | **Optional**. The timeout in milliseconds. Default: 1000
+
+
+## procs-windows
+
+Check command object for `check_procs.exe` plugin.
+When useing `procs_win_user` this plugins needs adminstratice privileges to access the processes of other users, to just enumerate them no additional privileges are required.
+
+Custom attributes:
+
+Name | Description
+:----------------|:------------
+procs\_win\_warn | **Optional**. The warning threshold.
+procs\_win\_crit | **Optional**. The critical threshold.
+procs\_win\_user | **Optional**. Count this useres processes.
+
+
+## service-windows
+
+Check command object for `check_service.exe` plugin.
+This checks thresholds work different since the binary decision whether a service is running or not does not allow for three states. As a default `check_service.exe` will return CRITICAL when `service_win_service` is not running, the `service_win_warn` flag changes this to WARNING.
+
+Custom attributes:
+
+Name | Description
+:---------------------|:------------
+service\_win\_warn | **Optional**. Warn when service is not running.
+service\_win\_service | **Required**. The critical threshold.
+
+
+## swap-windows
+
+Check command object for `check_swap.exe` plugin.
+The data collection is instant.
+
+Custom attributes:
+
+Name | Description
+:---------------|:------------
+swap\_win\_warn | **Optional**. The warning threshold.
+swap\_win\_crit | **Optional**. The critical threshold.
+swap\_win\_unit | **Optional**. The unit to display the received value in, thresholds are interpreted in this unit. Defaults to "mb" (megabyte).
+
+
+## update-windows
+
+Check command object for `check_update.exe`plugin.
+Querying Microsoft for Windows updates can take multiple seconds to minutes. An update is treated as important when it has the WSUS flag for SecurityUpdates or CriticalUpdates.
+
+Custom attributes:
+
+Name | Description
+:-------------------|:------------
+update\_win\_warn | If set returns warning when important updates are available
+update\_win\_crit | If set return critical when important updates that require a reboot are available.
+update\_win\_reboot | Set to treat 'may need update' as 'definitely needs update'
+
+
+## uptime-windows
+
+Check command opject for `check_uptime.exe` plugin.
+Uses GetTickCount64 to get the uptime, so boot time is not included.
+
+Custom attributes:
+
+Name | Description
+:-----------------|:------------
+uptime\_win\_warn | **Optional**. The warning threshold.
+uptime\_win\_crit | **Optional**. The critical threshold.
+uptime\_win\_unit | **Optional**. The unit to display the received value in, thresholds are interpreted in this unit. Defaults to "s"(seconds), possible values are ms (milliseconds), s, m (minutes), h (hours).
+
+
+## users-windows
+
+Check command object for `check_users.exe` plugin.
+
+Custom attributes:
+
+Name | Description
+:----------------|:------------
+users\_win\_warn | **Optional**. The warning threshold.
+users\_win\_crit | **Optional**. The critical threshold.
+
+
# NSClient++ Check Commands
Icinga 2 can use the `nscp client` command to run arbitrary NSClient++ checks.
diff --git a/etc/CMakeLists.txt b/etc/CMakeLists.txt
index ed07e49c0..5a52d8846 100644
--- a/etc/CMakeLists.txt
+++ b/etc/CMakeLists.txt
@@ -27,12 +27,13 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
endif()
install_if_not_exists(${CMAKE_CURRENT_BINARY_DIR}/icinga2/init.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
-install_if_not_exists(icinga2/icinga2.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
if(NOT WIN32)
install_if_not_exists(${CMAKE_CURRENT_BINARY_DIR}/icinga2/constants.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
+ install_if_not_exists(icinga2/icinga2.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
else()
install_if_not_exists(${CMAKE_CURRENT_SOURCE_DIR}/icinga2/win32/constants.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
+ install_if_not_exists(icinga2/win32/icinga2.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
endif()
install_if_not_exists(icinga2/zones.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2)
@@ -42,13 +43,14 @@ install_if_not_exists(icinga2/conf.d/groups.conf ${CMAKE_INSTALL_SYSCONFDIR}/ici
if(NOT WIN32)
install_if_not_exists(icinga2/conf.d/hosts.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
+ install_if_not_exists(icinga2/conf.d/services.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
else()
install_if_not_exists(icinga2/conf.d/win32/hosts.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
+ install_if_not_exists(icinga2/conf.d/win32/services.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
endif()
install_if_not_exists(icinga2/conf.d/notifications.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
install_if_not_exists(icinga2/conf.d/satellite.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
-install_if_not_exists(icinga2/conf.d/services.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
install_if_not_exists(icinga2/conf.d/templates.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
install_if_not_exists(icinga2/conf.d/timeperiods.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
install_if_not_exists(icinga2/conf.d/users.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
diff --git a/etc/icinga2/conf.d/win32/services.conf b/etc/icinga2/conf.d/win32/services.conf
new file mode 100644
index 000000000..48345fff3
--- /dev/null
+++ b/etc/icinga2/conf.d/win32/services.conf
@@ -0,0 +1,76 @@
+/*
+ * Service apply rules.
+ *
+ * The CheckCommand objects `ping4`, `ping6`, etc
+ * are provided by the plugin check command templates.
+ * Check the documentation for details.
+ *
+ * Tip: Use `icinga2 object list --type Service` to
+ * list all service objects after running
+ * configuration validation (`icinga2 daemon -C`).
+ */
+
+/*
+ * This is an example host based on your
+ * local host's FQDN. Specify the NodeName
+ * constant in `constants.conf` or use your
+ * own description, e.g. "db-host-1".
+ */
+
+/*
+ * These are generic `ping4` and `ping6`
+ * checks applied to all hosts having the
+ * `address` resp. `address6` attribute
+ * defined.
+ */
+apply Service "ping4" {
+ import "generic-service"
+
+ check_command = "ping4-windows"
+
+ assign where host.address
+}
+
+apply Service "ping6" {
+ import "generic-service"
+
+ check_command = "ping6-windows"
+
+ assign where host.address6
+}
+
+apply Service "load" {
+ import "generic-service"
+
+ check_command = "load-windows"
+
+ /* Used by the ScheduledDowntime apply rule in `downtimes.conf`. */
+ vars.backup_downtime = "02:00-03:00"
+
+ assign where host.name == NodeName
+}
+
+apply Service "procs" {
+ import "generic-service"
+
+ check_command = "procs-windows"
+
+ assign where host.name == NodeName
+}
+
+apply Service "swap" {
+ import "generic-service"
+
+ check_command = "swap-windows"
+
+ assign where host.name == NodeName
+}
+
+apply Service "users" {
+ import "generic-service"
+
+ check_command = "users-windows"
+
+ assign where host.name == NodeName
+}
+
diff --git a/etc/icinga2/win32/icinga2.conf b/etc/icinga2/win32/icinga2.conf
new file mode 100644
index 000000000..814940ed6
--- /dev/null
+++ b/etc/icinga2/win32/icinga2.conf
@@ -0,0 +1,58 @@
+/**
+ * Icinga 2 configuration file
+ * - this is where you define settings for the Icinga application including
+ * which hosts/services to check.
+ *
+ * For an overview of all available configuration options please refer
+ * to the documentation that is distributed as part of Icinga 2.
+ */
+
+/**
+ * The constants.conf defines global constants.
+ */
+include "constants.conf"
+
+/**
+ * The zones.conf defines zones for a cluster setup.
+ * Not required for single instance setups.
+ */
+include "zones.conf"
+
+/**
+ * The Icinga Template Library (ITL) provides a number of useful templates
+ * and command definitions.
+ * Common monitoring plugin command definitions are included separately.
+ */
+include
+include
+// include
+
+/**
+ * This includes the Icinga 2 Windows plugins
+ */
+include
+
+
+
+/**
+ * The features-available directory contains a number of configuration
+ * files for features which can be enabled and disabled using the
+ * icinga2 feature enable / icinga2 feature disable CLI commands.
+ * These commands work by creating and removing symbolic links in
+ * the features-enabled directory.
+ */
+include "features-enabled/*.conf"
+
+/**
+ * The repository.d directory contains all configuration objects
+ * managed by the 'icinga2 repository' CLI commands.
+ */
+include_recursive "repository.d"
+
+/**
+ * Although in theory you could define all your objects in this file
+ * the preferred way is to create separate directories and files in the conf.d
+ * directory. Each of these files must have the file extension ".conf".
+ */
+include_recursive "conf.d"
+
diff --git a/itl/CMakeLists.txt b/itl/CMakeLists.txt
index d1d1e1927..cb6d37832 100644
--- a/itl/CMakeLists.txt
+++ b/itl/CMakeLists.txt
@@ -18,6 +18,6 @@
add_subdirectory(plugins-contrib.d)
install(
- FILES itl command.conf command-icinga.conf hangman timeperiod.conf plugins command-plugins.conf manubulon command-plugins-manubulon.conf command-nscp-local.conf nscp plugins-contrib
+ FILES itl command.conf command-icinga.conf hangman timeperiod.conf plugins command-plugins.conf manubulon command-plugins-manubulon.conf windows-plugins command-plugins-windows.conf nscp command-nscp-local.conf plugins-contrib
DESTINATION ${CMAKE_INSTALL_DATADIR}/icinga2/include
)
diff --git a/itl/command-plugins-windows.conf b/itl/command-plugins-windows.conf
new file mode 100644
index 000000000..420658555
--- /dev/null
+++ b/itl/command-plugins-windows.conf
@@ -0,0 +1,321 @@
+/******************************************************************************
+ * Icinga 2 *
+ * Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org) *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU General Public License *
+ * as published by the Free Software Foundation; either version 2 *
+ * of the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software Foundation *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ******************************************************************************/
+
+object CheckCommand "disk-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_disk.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$disk_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$disk_win_crit$"
+ description = "Critical threshold"
+ }
+ "-p" = {
+ value = "$disk_win_path$"
+ description = "Optional paths to check"
+ }
+ "-u" = {
+ value = "$disk_win_unit$"
+ description = "Use this unit to display disk space"
+ }
+ }
+
+ vars.disk_win_unit = "mb"
+ //The default
+}
+
+object CheckCommand "load-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_load.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$load_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$load_win_crit$"
+ description = "Critical threshold"
+ }
+ }
+}
+
+object CheckCommand "memory-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_memory.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$memory_win_warn$"
+ description = "Warning Threshold"
+ }
+ "-c" = {
+ value = "$memory_win_crit$"
+ description = "Critical Threshold"
+ }
+ "-u" = {
+ value = "$memory_win_unit$"
+ description = "Use this unit to display memory"
+ }
+ }
+ vars.memory_win_unit = "mb"
+ //The default
+}
+
+object CheckCommand "network-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_network.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$network_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$network_win_crit$"
+ description = "Critical threshold"
+ }
+ }
+}
+
+object CheckCommand "perfmon-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_perfmon.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$perfmon_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$perfmon_win_crit$"
+ description = "Critical threshold"
+ }
+ "-P" = {
+ value = "$perfmon_win_counter$"
+ description = "The Performance Counter string"
+ required = true
+ }
+ "--performance-wait" = {
+ value = "$perfmon_win_wait$"
+ description = "Wait time between two counter collections in ms"
+ }
+ "--fmt-countertype" = {
+ value = "$perfmon_win_type$"
+ description = "Performance counter type"
+ }
+ }
+
+ vars.performance-wait = "1000"
+ vars.fmt-countertype = "double"
+ //The default values
+}
+
+
+template CheckCommand "ping-common-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_ping.exe" ]
+
+ arguments = {
+ "-H" = {
+ value = "$ping_win_address$"
+ required = true
+ description = "Address to ping"
+ }
+ "-w" = {
+ value = "$ping_win_wrta$,$ping_win_wpl$%"
+ description = "Warning threshold: RTA and package loss seperated by comma"
+ }
+ "-c" = {
+ value = "$ping_win_crta$,$ping_win_cpl$%"
+ description = "Warning threshold: RTA and package loss seperated by comma"
+ }
+ "-p" = {
+ value = "$ping_win_packets$"
+ description = "Number of packages to send"
+ }
+ "-t" = {
+ value = "$ping_win_timeout$"
+ description = "Timeout in ms"
+ }
+ }
+
+ vars.ping_win_packets = "5"
+ vars.ping_win_timeout = "1000"
+ //The default values
+}
+
+object CheckCommand "ping-windows" {
+ import "ping-common-windows"
+ import "ipv4-or-ipv6"
+
+ vars.ping_win_address = "$check_address$"
+}
+
+object CheckCommand "ping4-windows" {
+ import "ping-common-windows"
+
+ command += [ "-4" ]
+
+ vars.ping_address = "$address$"
+}
+
+object CheckCommand "ping6-windows" {
+ import "ping-common-windows"
+
+ command += [ "-6" ]
+
+ vars.ping_address = "$address6$"
+}
+
+object CheckCommand "procs-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_procs.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$procs_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$procs_win_crit$"
+ description = "Critical threshold"
+ }
+ "-u" = {
+ value = "$procs_win_user$"
+ description = "Count only procs of this user"
+ }
+ }
+}
+
+object CheckCommand "service-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_service.exe" ]
+
+ arguments = {
+ "-w" = {
+ set_if = "$service_win_warn$"
+ description = "Warn instead of critical when service is not running"
+ }
+ "-s" = {
+ value = "$service_win_service$"
+ required = true
+ description = "Service to check"
+ }
+ }
+}
+
+object CheckCommand "swap-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_swap.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$swap_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$swap_win_crit$"
+ description = "Critical threshold"
+ }
+ "-u" = {
+ value = "$swap_win_unit$"
+ description = "Unit to display swap in"
+ }
+ }
+
+ vars.swap_win_unit = "mb"
+ //The default
+}
+
+object CheckCommand "update-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_update.exe" ]
+
+ arguments = {
+ "-w" = {
+ set_if = "$update_win_warn$"
+ description = "Warn if there are important updates available"
+ }
+ "-c" = {
+ set_if = "$update_win_crit$"
+ description = "Critical if there are important updates that require a reboot"
+ }
+ "--possible-reboot" = {
+ set_if = "$update_win_reboot$"
+ description = "Treat 'may need update' as 'definitely needs update'"
+ }
+ }
+
+}
+
+object CheckCommand "uptime-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_uptime.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$uptime_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$uptime_win_crit$"
+ description = "Critical threshold"
+ }
+ "-u" = {
+ value = "$uptime_win_unit$"
+ description = "Time unit to use"
+ }
+ }
+
+ vars.uptime_win_unit = "s"
+ //The default
+}
+
+object CheckCommand "users-windows" {
+ import "plugin-check-command"
+
+ command = [ PluginDir + "/check_users.exe" ]
+
+ arguments = {
+ "-w" = {
+ value = "$users_win_warn$"
+ description = "Warning threshold"
+ }
+ "-c" = {
+ value = "$users_win_crit$"
+ description = "Critical threshold"
+ }
+ }
+}
\ No newline at end of file
diff --git a/itl/windows-plugins b/itl/windows-plugins
new file mode 100644
index 000000000..5cb489f7f
--- /dev/null
+++ b/itl/windows-plugins
@@ -0,0 +1,20 @@
+/******************************************************************************
+ * Icinga 2 *
+ * Copyright (C) 2012-2015 Icinga Development Team (http://www.icinga.org) *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU General Public License *
+ * as published by the Free Software Foundation; either version 2 *
+ * of the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software Foundation *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ******************************************************************************/
+
+ include "command-plugins-windows.conf"
\ No newline at end of file