You are not logged in.
Bonjour,
j'ai fais un petit script vbs qui me permet de mettre automatiquement mes PC dans la bonne OU de l'AD en fonction du reseau dans lesquels ils se trouvent dans GLPI.
Je m'explique. Chez moi j'ai autant de réseau dans GLPI que j'ai de site distant. En me basant sur cette information, mon script se connecte à la base GLPI prend un PC après l'autre et vérifie dans l'AD s'il est dans la bonne OU. S'il ne l'est pas il le déplace automatiquement.
Je le mets la au cas ou quelqu'un en aurait besoin même si c'est un besoin plutôt personnel mais c'est on jamais.
'##################################################################################################
'# Recherche l'OU d'appartenance d'un PC
'# Paramétre : nom du PC
'# Retourne l'OU
'# Créé le 23 avril 2008
'# LIENHARD Laurent
'##################################################################################################
Function TrouveOU(computer)
On Error Resume Next
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT ADsPath FROM 'LDAP://dc=cushabitat,dc=stbg' WHERE objectCategory='computer' AND name= '" & computer & "'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
Tableau=Split(objRecordSet.Fields("ADsPath").Value,",")
TrouveOU = Mid(Tableau(1),InStr(Tableau(1),"=")+1)
objRecordSet.MoveNext
Loop
End Function
'##################################################################################################
'##################################################################################################
'# Déplacement du PC vers l'OU
'# Paramétre 1 : affichage des info pour debug
'# Paramétre 2 : le nom du pc
'# Paramétre 3 : Ou d'origine
'# Paramétre 4 : Ou de destination
'# Créé le 24 avril 2008
'# LIENHARD Laurent
'##################################################################################################
Sub MoveComputer(infor,computer,OriOU,DestOu)
If infor = 1 Then WScript.Echo "Ordinateur " & computer & " de OU=" & OriOU & " vers OU=" & DestOu
If OriOU = "Computers" Then
If infor = 1 Then
WScript.Echo "OU de destination -> " & "LDAP://OU="& DestOU &",OU=Ordinateurs,OU=CUSHABITAT,DC=cushabitat,DC=stbg"
WScript.Echo "Objet source -> " & "LDAP://CN="& computer & ",CN=Computers,DC=cushabitat,DC=stbg", "CN="& computer
End If
Set objNewOU = GetObject("LDAP://OU="& DestOU &",OU=Ordinateurs,OU=CUSHABITAT,DC=cushabitat,DC=stbg")
Set objMoveComputer = objNewOU.MoveHere("LDAP://CN="& computer & ",CN=Computers,DC=cushabitat,DC=stbg", "CN="& computer)
Else
If infor = 1 Then
WScript.Echo "OU de destination -> " & "LDAP://OU="& DestOU &",OU=Ordinateurs,OU=CUSHABITAT,DC=cushabitat,DC=stbg"
WScript.Echo "Objet source -> " & "LDAP://CN="& computer & ",OU="&OriOU&",OU=Ordinateurs,OU=CUSHABITAT,DC=cushabitat,DC=stbg"
End If
Set objNewOU = GetObject("LDAP://OU="& DestOU &",OU=Ordinateurs,OU=CUSHABITAT,DC=cushabitat,DC=stbg")
Set objMoveComputer = objNewOU.MoveHere("LDAP://CN="& computer & ",OU="&OriOU&",OU=Ordinateurs,OU=CUSHABITAT,DC=cushabitat,DC=stbg", "CN="& computer)
End If
End Sub
'##################################################################################################
'##################################################################################################
'# Déplacement des Ordinateurs vers l'OU correspond à leur site réel.
'# Le script se connecte sur la base inventaire de GLPI
'# Créé le 21 avril 2008
'# LIENHARD Laurent
'##################################################################################################
'##################################################################################################
'# Road Map
'# 1 Faire le déplacement de n'importe quelle OU vers n'importe quelle OU (Fait le 24/04/2008 par LaLi)
'# 2 Se connecter directement à la base GLPI sans passer par une extraction (Fail le 28/04/2008 par LaLi)
'# 3 Ajout d'un fichier de log pour le suivi des actions.
'###################################################################################################
Const info = 0 'Active (1) ou pas (0) le debugage
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "DSN=hotline"
conn.Open
Set rows = CreateObject("ADODB.Recordset")
Set rows = conn.Execute("SELECT network.name, pc.name FROM glpi_computers AS pc, glpi_dropdown_network AS network WHERE pc.network = network.id AND network.name <> """ & "SIEGE-INFO" & """ ORDER BY pc.name ASC")
While Not rows.EOF
Select Case (rows.Fields(0).Value)
Case "AG_CRONENBOURG"
If TrouveOU(rows.Fields(1).Value) <> "Agence Cronenbourg" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Agence Cronenbourg"
End If
Case "AG_ELSAU"
If TrouveOU(rows.Fields(1).Value) <> "Agence Elsau" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Agence Elsau"
End If
Case "AG_HAUTEPIERRE"
If TrouveOU(rows.Fields(1).Value) <> "Agence Hautepierre" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Agence Hautepierre"
End If
Case "AG_MEINAU"
If TrouveOU(rows.Fields(1).Value) <> "Agence Meinau" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Agence Meinau"
End If
Case "AG_NEUDORF"
If TrouveOU(rows.Fields(1).Value) <> "Agence Neudorf" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Agence Neudorf"
End If
Case "AG_NEUHOF"
If TrouveOU(rows.Fields(1).Value) <> "Agence Neuhof" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Agence Neuhof"
End If
Case "AG_OSTWALD"
If TrouveOU(rows.Fields(1).Value) = "Computers" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,"Agence Ostwald"
End If
Case "AGENCE_CENTRE"
If TrouveOU(rows.Fields(1).Value) = "Computers" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,"Agence Centre"
End If
Case "ANT_PORTDURHIN"
If TrouveOU(rows.Fields(1).Value) = "Computers" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,"Antenne Port Du Rhin"
End If
Case "ANT_ROTTERDAM"
If TrouveOU(rows.Fields(1).Value) <> "Antenne Rotterdam" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Antenne Rotterdam"
End If
Case "ANT1_CRONENBOURG"
If TrouveOU(rows.Fields(1).Value) <> "Antenne Cronenbourg" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Antenne Cronenbourg"
End If
Case "ANT1_LINGOLSHEIM"
If TrouveOU(rows.Fields(1).Value) <> "Antenne Lingolsheim" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Antenne Lingolsheim"
End If
Case "ANT2_INGOLD"
If TrouveOU(rows.Fields(1).Value) <> "Antenne Ingold" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Antenne Ingold"
End If
Case "ANT2_SCHIRMECK"
If TrouveOU(rows.Fields(1).Value) = "Computers" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,"Antenne Schirmeck"
End If
Case "ANT3_MARSHALLHOF"
If TrouveOU(rows.Fields(1).Value) <> "Antenne Marshallhof" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Antenne Marshallhof"
End If
Case "ANT40_WATWILLER"
If TrouveOU(rows.Fields(1).Value) <> "Antenne Watwiller" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Antenne Watwiller"
End If
Case "ATELIER_CENTRAL"
If TrouveOU(rows.Fields(1).Value) <> "Atelier Central" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Atelier Central"
End If
Case "CHAUFFERIE_CHERBOURG"
If TrouveOU(rows.Fields(1).Value) <> "Chaufferie Cherbourg" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Chaufferie Cherbourg"
End If
Case "Gd_BLUM"
If TrouveOU(rows.Fields(1).Value) <> "Loge Gardien" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Loge Gardien"
End If
Case "RI_HAUTEPIERRE"
If TrouveOU(rows.Fields(1).Value) = "Computers" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,"Régie Hautepierre"
End If
Case "SIEGE"
If TrouveOU(rows.Fields(1).Value) <> "Siege" Then
If info =1 then WScript.Echo rows.Fields(1).Value & " : " & rows.Fields(0).Value & " : " & TrouveOU(rows.Fields(1).Value)
MoveComputer Info,rows.Fields(1).Value,TrouveOU(rows.Fields(1).Value),"Siege"
End If
Case Else
If info = 1 Then WScript.Echo rows.Fields(1).Value & " : " & TrouveOU(rows.Fields(1).Value)
End Select
rows.MoveNext
Wend
Ce n'est pas forcément ici qu'il faut le mettre mais je ne sais pas trop ou le poster sinon.
Si vous avez des modifications ou des avis à me donner pour optimiser la chose je suis tout ouie
Biensur il faut des pré-requis : un DSN sur le poste, les OU dans l'AD ...
Cus Habitat (Strasbourg)
Operating system: Linux 2.6.32-431.3.1.el6.x86_64
Prod : GLPI 0.84.5 / PHP 5.4.23 / MySQL: 5.5.35
Plugin : Behaviors 0.84, fusioninventory 0.84+3.5, Monitoring 0.84+1.0, Webservices 1.4, Timelinticket 0.84+1.2
Offline
Merci du retour ça en interessera certainement certains.
Bonne soirée.
JMD / Jean-Mathieu Doléans - Glpi-project.org - Association Indepnet
Apportez votre pierre au projet GLPI : Soutenir
Offline