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.
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