You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2008-04-29 08:08:34

IronTUX
Member
From: Strasbourg
Registered: 2005-09-30
Posts: 837

Mettre les PC dans la bonne Ou en fonction de GLPI

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 smile

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

#2 2008-04-30 00:12:11

JMD
GLPI - Lead
Registered: 2004-09-13
Posts: 9,180
Website

Re: Mettre les PC dans la bonne Ou en fonction de GLPI

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

Board footer

Powered by FluxBB