<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/index.php?action=history&amp;feed=atom&amp;title=PowerShell%3A_ActiveDirectory_monitooringuskript</id>
	<title>PowerShell: ActiveDirectory monitooringuskript - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/index.php?action=history&amp;feed=atom&amp;title=PowerShell%3A_ActiveDirectory_monitooringuskript"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PowerShell:_ActiveDirectory_monitooringuskript&amp;action=history"/>
	<updated>2026-05-07T09:37:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=PowerShell:_ActiveDirectory_monitooringuskript&amp;diff=48451&amp;oldid=prev</id>
		<title>Mpihelga: Leht loodud</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=PowerShell:_ActiveDirectory_monitooringuskript&amp;diff=48451&amp;oldid=prev"/>
		<updated>2012-05-22T12:18:22Z</updated>

		<summary type="html">&lt;p&gt;Leht loodud&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;Source lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#&lt;br /&gt;
.SYNOPSIS&lt;br /&gt;
  Nagios monitoring script for Active Directory status.&lt;br /&gt;
 &lt;br /&gt;
.DESCRIPTION&lt;br /&gt;
  This script checks Active Directory status. A user description is queried and checked whether proper result is &lt;br /&gt;
  returned.&lt;br /&gt;
  &lt;br /&gt;
.Parameter UserName&lt;br /&gt;
  Specifies SamAccountName for the user to search. Required.&lt;br /&gt;
&lt;br /&gt;
.Parameter SearchString&lt;br /&gt;
  Specifies string to search from the account &amp;quot;Description&amp;quot; field. Optional argument. No spaces allowed.&lt;br /&gt;
&lt;br /&gt;
.Parameter SearchRoot&lt;br /&gt;
  Specifies an Active Directory path to search under. Optional, however recommended for optimal performance. No spaces allowed.&lt;br /&gt;
  &lt;br /&gt;
.Example&lt;br /&gt;
  check_ad.ps1 -UserName monit -SearchString postkastiga -SearchRoot CN=Users,DC=deploy,DC=local&lt;br /&gt;
  &lt;br /&gt;
  Searches Active Directory under path &amp;#039;CN=Users,DC=deploy,DC=local&amp;#039; for SamAccountName &amp;#039;monit&amp;#039; Description field &lt;br /&gt;
  for string &amp;#039;postkastiga&amp;#039;.&lt;br /&gt;
 &lt;br /&gt;
.Example&lt;br /&gt;
  check_ad.ps1 -UserName monit -SearchString postkastiga&lt;br /&gt;
  &lt;br /&gt;
  Searches Active Directory for SamAccountName &amp;#039;monit&amp;#039; Description field for string &amp;#039;postkastiga&amp;#039; from localhost &lt;br /&gt;
  server. Optional parameters have not been included.&lt;br /&gt;
&lt;br /&gt;
.Outputs&lt;br /&gt;
  System.String.  Script sends backup status description to standard output.  The return code is also provided:&lt;br /&gt;
  Return code    Service Status&lt;br /&gt;
  ---------------------------&lt;br /&gt;
       0         Ok&lt;br /&gt;
       1         Warning&lt;br /&gt;
       2         Critical&lt;br /&gt;
       3         Unknown&lt;br /&gt;
&lt;br /&gt;
.NOTES&lt;br /&gt;
  Author:  Mauno Pihelgas&lt;br /&gt;
  Version: 0.5&lt;br /&gt;
  Date:    24.04.2012&lt;br /&gt;
  Changes: Backward compatible (with Server 2003 and 2008) .NET classes used for searching AD.&lt;br /&gt;
&lt;br /&gt;
  Version history:&lt;br /&gt;
  v0.1      - Initial implementation with AD module cmdlet Get-ADUser. Not compatible with pre 2008 R2 releases.&lt;br /&gt;
  v0.2&amp;amp;v0.3 - Improvments to initial release.&lt;br /&gt;
  v0.4      - OS detection added for backward compatibility.&lt;br /&gt;
  &lt;br /&gt;
.LINK&lt;br /&gt;
  http://technet.microsoft.com/en-us/library/ff730967.aspx&lt;br /&gt;
#&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[cmdletbinding(DefaultParameterSetName=&amp;quot;Action&amp;quot;)]&lt;br /&gt;
Param(  [parameter(Mandatory=$true)]&lt;br /&gt;
        [Alias(&amp;quot;UN&amp;quot;)]&lt;br /&gt;
        [string]&lt;br /&gt;
        $UserName,&lt;br /&gt;
&lt;br /&gt;
        [Alias(&amp;quot;SS&amp;quot;)]&lt;br /&gt;
        [string]&lt;br /&gt;
        $SearchString = &amp;quot;&amp;quot;,&lt;br /&gt;
  &lt;br /&gt;
        [Alias(&amp;quot;SR&amp;quot;)]&lt;br /&gt;
        [string[]]&lt;br /&gt;
        $SearchRoot = &amp;quot;&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Set-StrictMode -Version Latest&lt;br /&gt;
[string[]]$Prefix = &amp;quot;OK:&amp;quot;, &amp;quot;WARNING:&amp;quot;, &amp;quot;CRITICAL:&amp;quot;, &amp;quot;UNKNOWN:&amp;quot;&lt;br /&gt;
[int]$Status = 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Join the $SearchRoot array back to a string (if argument is given).&lt;br /&gt;
# This is due to NSClient++ security limitations. Blocking nasty characters like &amp;quot;&amp;#039;`´;&amp;amp; etc.&lt;br /&gt;
if ($SearchRoot[0] -eq &amp;quot;&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    [string]$SearchRoot = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    [string]$SearchRoot = [string]::join(&amp;quot;,&amp;quot;, $SearchRoot)&lt;br /&gt;
    $SearchRoot = &amp;quot;LDAP://$SearchRoot&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Get results&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
    Write-Verbose &amp;quot;Querying user `&amp;quot;$UserName`&amp;quot; info from AD with a SearchRoot of $SearchRoot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    $objDomain = New-Object System.DirectoryServices.DirectoryEntry(&amp;quot;$SearchRoot&amp;quot;)&lt;br /&gt;
    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher&lt;br /&gt;
    $objSearcher.SearchRoot = $objDomain&lt;br /&gt;
    $objSearcher.ClientTimeout = &amp;quot;00:00:10&amp;quot;&lt;br /&gt;
    $objSearcher.Filter = &amp;quot;(&amp;amp;(objectCategory=User)(SAMAccountName=$UserName))&amp;quot;&lt;br /&gt;
    $objSearcher.SearchScope = &amp;quot;Subtree&amp;quot;&lt;br /&gt;
    $null = $objSearcher.PropertiesToLoad.Add(&amp;quot;description&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    $Result = $objSearcher.FindOne()&lt;br /&gt;
    [string]$Result = $Result.Properties.description&lt;br /&gt;
}&lt;br /&gt;
catch&lt;br /&gt;
{&lt;br /&gt;
    $Status = 2&lt;br /&gt;
    Write-Verbose &amp;quot;Problem retrieving data. Please verify server settings and given arguments.&amp;quot;&lt;br /&gt;
    Write-Host $Prefix[$Status]&amp;quot;Could not retrieve information from AD&amp;quot;&lt;br /&gt;
    exit $Status&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Search description field for $SearchString&lt;br /&gt;
if ($Result.Contains($SearchString))&lt;br /&gt;
{&lt;br /&gt;
    $Status = 0&lt;br /&gt;
    Write-Verbose &amp;quot;Everything seems OK. Found user: $Username`nFound description: $Result&amp;quot;&lt;br /&gt;
    Write-Host $Prefix[$Status]&amp;quot;AD seems to be operating normally&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
    $Status = 1&lt;br /&gt;
    Write-Verbose &amp;quot;Found string: $Result`nSearched for string: $SearchString&amp;quot;&lt;br /&gt;
    Write-Host $Prefix[$Status]&amp;quot;Expected user description not found&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
exit $Status&lt;/div&gt;</summary>
		<author><name>Mpihelga</name></author>
	</entry>
</feed>