You are currently viewing Paket zum Verschieben eines PCs in OU im AD

Paket zum Verschieben eines PCs in OU im AD

Wer die Verwaltung und die Gruppenzuweisung seine Softwareverteilung in DSM7 regelt, muss oft auch noch im Active Directory (AD) ran und den Computer in seine entsprechende Organisation Unit (OU) verschieben. Das ist zwar nur ein kleiner Klick, doch dieser kann einem erspart bleiben.

Gehen wir z.B. davon aus, das wir eine Active Directory OU Struktur haben, die unseren Standort angibt und unter diesem danach die Hardware in Computer, Notebooks und Server aufteilt.

Bei neuen Computern müssten wir nun erst herausfinden, welchem Hardwaretyp unser neuer Computer entspricht und ihn dann händisch in die entsprechende OU verschieben.Haben wir allerdings in DSM7 eine dynamische Hardwaregruppe angelegt, filtern darunter z.B. nach Hersteller und danach nach Modell können wir der Gruppe Dell – Latitude E6320 ein Paket zuweisen, welches die PCs dieser Gruppe bei Ausführung in die AD OU Notebooks verschiebt. Genauso können wir davon ausgehen, dass alle PCs der Gruppe HP – G5434de Desktop PCs sind und somit z.B. in die AD OU Computer gehören. Also weisen wir G5434de das  entsprechende Paket zu.

 

Doch welches Paket eigentlich? Dazu jetzt:

 

Wir erstellen ein neues e-Script Package, gehen ins Projektverzeichnis und fügen folgenden Code in die Script.inc ein:

				
					!---------------------------------------------------------------------------------------------------------------

!Beschreibung: Script zum Verschieben eines PCs in eine OU im AD

!Voraussetzungen: Servicebenutzer muss Domänenadmin sein

!Autor: Joe Glockner (IDERI GmbH) (www.ideri.com)

!Anmerkunden: VB-Script basiert auf Script von MS TECHNET

!(http://blogs.technet.com/b/heyscriptingguy/archive/2006/06/23/how-can-i-move-a-computer-from-an-unknown-ou-into-a-known-ou.aspx)

!---------------------------------------------------------------------------------------------------------------

!Variablen

!---------------

!Domain hier eintragen: (z. B Microsoft.com -> _Domain01: Microsoft / _Domain02: com)

Set('_Domain01','ideri')

Set('_Domain02','world')

!Ziel OU hier eintragen: (von links nach rechts (tiefste OU nach links))

!Bsp: OU=UNTERSTEOU,OU=MITTLEREOU,OU=HÖCHSTEOU

Set('FinalAdPath','OU=COMPUTER,OU=CHICAGO')

!

!Script

!---------------

Set('VBFile','%windir%\moveou.vbs')

Delete('%VBFile%')/F/TS

!

Set('_Domain','%_Domain01%.%_Domain02%')

Set('RealFinalAdPath','%FinalAdPath%,DC=%_Domain01%,DC=%_Domain02%')

!

ModifyOemEx('%VBFile%','','','',moAppend+moOverwriteExisting)

 On Error Resume Next



 Const ADS_SCOPE_SUBTREE = 2



 Set objOU = GetObject("LDAP://%RealFinalAdPath%")



 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=%_Domain01%,dc=%_Domain02%' WHERE objectCategory='computer' " & _

         "AND Name='%Computername%'"

 Set objRecordSet = objCommand.Execute



 objRecordSet.MoveFirst



 Do Until objRecordSet.EOF

     strADsPath = objRecordSet.Fields("ADsPath").Value

     objOU.MoveHere strADsPath, vbNullString

     objRecordSet.MoveNext

 Loop

EndProc/TS

!

!Falls Servicebenutzer kein Domänenadmin ist CallScript auskommentieren und RunAs aktivieren.

!Zum Schluss noch bei RunAs einen User mit Domänenadminrechten hinterlegen.

!---------------

CallScript('%VBFile%')/TS

!RunAs('%WINSYSDIR%\cscript.exe ','%VBFile%','Domänenadmin','','1',WaitForExecution+UndoneContinueParentScript)
				
			

Zurück im Scripteditor sollte das Ganze dann so aussehen:

Und was genau macht dieses Paket?

Ohne Anpassung auf jeden Fall nichts von Wert. Denn zuerst müssen wir die Variablen auf unsere Umgebung anpassen. Fangen wir mit der Domain an:

 

Wie sie erkennen können heißt unsere Domäne „ideri.world“. Dementsprechend haben wir die Variablen _Domain01 und _Domain02angepasst.

Danach geht es weiter zur Variable FinalAdPath. Hier geben wir die gewünschte Ziel OU im AD an. Dabei müssen wir darauf achten, dass die OU Struktur richtig abgebildet ist, also jede OU bis zur Ziel-OU durch ein „OU=IhreOU“ und danach durch ein Komma getrennt in der Variable angegeben ist. Dabei muss die tiefste OU (also die Ziel-OU) ganz links geschrieben werden. Von dort an geht es aufsteigend weiter.


Beispiel:


Wir wollen, dass einen Computer in ideri.world-CHICAGO-Computer verschoben wird. Also geben wir bei _Domain01 „ideri“, bei _Domain02 „world“ und bei FinalAdPath„OU=Computer,OU=CHICAGO“ an. Wollen wir den Computer in ideri.world-CHICAGO-Computer-Desktops verschieben müssten wir bei FinalAdPath„OU=Desktops,OU=Computer,OU=CHICAGO“ eingeben.


Nun kann es losgehen:


Das Paket erstellt ein Visual Basic-Script unter C:\Windows\moveou.vbs , welches auf einem Script von MS Technet basiert. (Das komplette Script und dessen Beschreibung finden Sie hier). Dieses durchsucht das AD nach dem entsprechenden Computernamen und verschiebt ihn in die angegebene Ziel-OU.

ACHTUNG:

Von Haus aus wird das Script mit dem CallScript-Befehl mit dem NI Service Benutzerausgeführt. Dieser muss allerdings Domänenadmin sein, damit der Computer im AD verschoben werden kann. Sollte bei Ihnen der Service Benutzer keine Domänenadmin-Rechte besitzen, sollten Sie den CallScript-Befehl auskommentieren und dafür den darunter stehenden RunAs-Befehl verwenden. Dort muss jedoch noch ein Benutzer mit Domänenadmin-Rechten angeben und das Kennwort hinterlegt werden. Außerdem sollte der RunAs noch als computerbezogener Befehl geflaggt werden, damit dieser nicht jedes Mal beim Starten des AutoInstallers ausgeführt wird.