Autoit Souvent dans les entreprises, il y a un nommage des postes par bâtiments ou encore agence. J'ai souvent eu a chercher dans l'Active Directory un nom de poste disponible afin de préparer un nouveau. Ce script a pour but de verifier dans l'annuaire de l'AD le prochaine ordinateur de libre.

Dans mon exemple, il y a trois site :

  • Site 1
  • Site 2
  • Site 3

Le site 1 à 5 etage :

  • RDC avec nomage "SITE1-000" à "SITE1-099"
  • 1er avec nomage "SITE1-100" à "SITE1-199"
  • 2eme avec nomage "SITE1-200" à "SITE1-299"
  • 3eme avec nomage "SITE1-300" à "SITE1-399"
  • 4eme avec nomage "SITE1-400" à "SITE1-499"

Le site 2 à 4 etage :

  • RDC avec nomage "SITE2-000" à "SITE2-099"
  • 1er avec nomage "SITE2-100" à "SITE2-199"
  • 2eme avec nomage "SITE2-200" à "SITE2-299"
  • 3eme avec nomage "SITE2-300" à "SITE2-399"

Le site 3 à 3 etage :

  • RDC avec nomage "SITE3-000" à "SITE3-099"
  • 1er avec nomage "SITE3-100" à "SITE3-199"
  • 2eme avec nomage "SITE3-200" à "SITE3-299"
  • 3eme avec nomage "SITE3-300" à "SITE3-399"

Par exemple, lorsque l'on aura cliqué sur "Site 3" puis "2eme Etage", il va chercher dans l'active directory si "SITE3-200" est libre. Si c'est le cas, il vous l'affichera et vous pouvez l'utiliser sinon, il incrémentera jusqu’à trouver un poste de libre puis vous l'afficher.

ordinateur_libre1.png Ordinateur_libre2.png Ordinateur_libre3.png

Voici le code :

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=ordi.ico
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Excel.au3>
#include <AD.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <Excel.au3>
Global $site1, $site2, $site3, $dDisplay, $nbEnd, $quit, $computer, $i, $nbStart, $suffix, $nbhote
GUICreate("Ordinateur de libre", 300, 300, 192, 124)
_AD_Open()
start()
 
func start()
GUICtrlCreateLabel("Veuillez cliquer sur l'un des boutons :", 20, 10, 200, 17)
$site1 = GUICtrlCreateButton("Site 1", 10, 40, 140, 50)
$site2 = GUICtrlCreateButton("Site 2", 150, 40, 140, 50)
$site3 = GUICtrlCreateButton("Site 3", 10, 90, 140, 50)
 
$quit = GUICtrlCreateButton("Quitter", 160,250,120,40)
 
GUISetState(@SW_SHOW)
while 1
	    $nMsg = GUIGetMsg()
    Switch $nMsg
		case $site1
			clear()
			site1()
 
		case $site2
			clear()
			site2()
 
		case $site3
			clear()
			site3()
 
        Case $GUI_EVENT_CLOSE
			_AD_Close()
            Exit
		Case $quit
			_AD_Close()
			Exit
    EndSwitch
WEnd
EndFunc
 
 
func clear()
			Global $dDisplay[4] = [$site1, $site2, $site3, $quit]
			For $i = 0 To UBound($dDisplay) - 1
				GUICtrlDelete($dDisplay[$i])
			Next
EndFunc
 
func site1()
			GUICtrlCreateGroup("Site N°1", 10, 40, 280, 155)
			$site10 = GUICtrlCreateButton("Rez-de-chaussé", 35,60,100,40)
			$site11 = GUICtrlCreateButton("1er Etage", 160,60,100,40)
			$site12 = GUICtrlCreateButton("2eme Etage", 35,105,100,40)
			$site13 = GUICtrlCreateButton("3eme Etage", 160,105,100,40)
			$site14 = GUICtrlCreateButton("4eme Etage", 35,150,100,40)
			$suffix = "SITE1-"
			$nbhote = "3"
 
			$retour = GUICtrlCreateButton("Retour", 20,250,120,40)
			$quit = GUICtrlCreateButton("Quitter", 160,250,120,40)
				while 1
					$nMsg = GUIGetMsg()
						Switch $nMsg
							case $site10
								$nbStart = "000"
								$nbEnd = "099"
					 			verif()
 
							case $site11
								$nbStart = "100"
								$nbEnd = "199"
					 			verif()
 
							case $site12
								$nbStart = "200"
								$nbEnd = "299"
					 			verif()
 
							case $site13
								$nbStart = "300"
								$nbEnd = "399"
					 			verif()
 
							case $site14
								$nbStart = "400"
								$nbEnd = "499"
					 			verif()
 
							Case $GUI_EVENT_CLOSE
								_AD_Close()
								Exit
 
							Case $quit
								_AD_Close()
								Exit
 
							Case $retour
								GUICtrlDelete($site14)
								GUICtrlDelete($site13)
								GUICtrlDelete($site12)
								GUICtrlDelete($site11)
								GUICtrlDelete($site10)
								GUICtrlDelete($retour)
								clear()
								start()
 
							EndSwitch
				WEnd
EndFunc
 
func site2()
			GUICtrlCreateGroup("Site N°2", 10, 40, 280, 120)
			$site20 = GUICtrlCreateButton("Rez-de-chaussé", 35,60,100,40)
			$site21 = GUICtrlCreateButton("1er Etage", 160,60,100,40)
			$site22 = GUICtrlCreateButton("2eme Etage", 35,105,100,40)
			$site23 = GUICtrlCreateButton("3eme Etage", 160,105,100,40)
 
			$suffix = "site2-"
			$nbhote = "3"
 
			$retour = GUICtrlCreateButton("Retour", 20,250,120,40)
			$quit = GUICtrlCreateButton("Quitter", 160,250,120,40)
				while 1
					$nMsg = GUIGetMsg()
						Switch $nMsg
							case $site20
								$nbStart = "000"
								$nbEnd = "099"
					 			verif()
 
							case $site21
								$nbStart = "100"
								$nbEnd = "199"
					 			verif()
 
							case $site22
								$nbStart = "200"
								$nbEnd = "299"
					 			verif()
 
							case $site23
								$nbStart = "300"
								$nbEnd = "399"
					 			verif()
 
 
							Case $GUI_EVENT_CLOSE
								_AD_Close()
								Exit
 
							Case $quit
								_AD_Close()
								Exit
 
							Case $retour
								GUICtrlDelete($site23)
								GUICtrlDelete($site22)
								GUICtrlDelete($site21)
								GUICtrlDelete($site20)
								GUICtrlDelete($retour)
								clear()
								start()
 
 
							EndSwitch
				WEnd
EndFunc
 
func site3()
			GUICtrlCreateGroup("Site N°3", 10, 40, 280, 110)
			$site30 = GUICtrlCreateButton("Rez-de-chaussé", 35,60,100,40)
			$site31 = GUICtrlCreateButton("1er Etage", 160,60,100,40)
			$site32 = GUICtrlCreateButton("2eme Etage", 35,105,100,40)
 
			$suffix = "site3-"
			$nbhote = "3"
 
			$retour = GUICtrlCreateButton("Retour", 20,250,120,40)
			$quit = GUICtrlCreateButton("Quitter", 160,250,120,40)
				while 1
					$nMsg = GUIGetMsg()
						Switch $nMsg
							case $site30
								$nbStart = "000"
								$nbEnd = "099"
					 			verif()
 
							case $site31
								$nbStart = "100"
								$nbEnd = "199"
					 			verif()
 
							case $site32
								$nbStart = "200"
								$nbEnd = "299"
					 			verif()
 
 
							Case $GUI_EVENT_CLOSE
								_AD_Close()
								Exit
 
							Case $quit
								_AD_Close()
								Exit
 
							Case $retour
								GUICtrlDelete($site32)
								GUICtrlDelete($site31)
								GUICtrlDelete($site30)
								GUICtrlDelete($retour)
								clear()
								start()
 
 
							EndSwitch
				WEnd
EndFunc
 
func verif()
for $i = $nbStart -1  to $nbEnd - 1 step 1
	$computer = $i + 1
	if NOT _AD_ObjectExists(_AD_GetObjectAttribute($suffix&StringRight("00"&$computer,$nbhote) & "$", "sAMAccountName"))Then
		MsgBox(0,"",$suffix&StringRight("00"&$computer,$nbhote))
		ExitLoop
	EndIf
Next
EndFunc

A bientôt,
Romain