15858
Goto Top

Überprüfen ob Computer Mitglied einer OU ist

Hi,

ich möchte per Script, am besten mit VB-Script überprüfen ob ein Computer Mitglied einer OU des Active Directory ist? Ich habe mitlerweile schon ettliche Foren durchsucht aber kein Beitrag konnte mir so richtig helfen.

Vielen Dank für eure Hilfe.

mfg 0per8or

Content-ID: 55624

Url: https://administrator.de/contentid/55624

Ausgedruckt am: 26.11.2024 um 11:11 Uhr

dsmcg
dsmcg 02.04.2007 um 11:53:19 Uhr
Goto Top
Wozu soll das gut sein?

Beschreib ein wenig was du ereichen willst.
15858
15858 02.04.2007 um 12:00:27 Uhr
Goto Top
Bei uns wird die Clientinstallation per RIS-Server bereitgestellt. Als letzte Aktion wird am Ende einer Installation noch ein Script ausgeführt. In diesem Script kann jetzt ja alles mögliche gemacht werden, was noch auf dem Client ausgeführt werden soll.

Nun möchte ich eine Softwareinstallation anstoßen, die aber nur auf PCs in der OU Notebooks ausgeührt werden soll.

Ich hoffe das das verständlich war. face-smile

mfg 0per8or
catachan
catachan 02.04.2007 um 12:08:40 Uhr
Goto Top
wieso machst du die installation nicht über die group policy ?? dann hättest du genau was du willst
15858
15858 02.04.2007 um 12:16:16 Uhr
Goto Top
Das hatte ich auch schon. Hat auch soweit funktioniert. Das hat nur ein Problem. Die Software die ich installieren möchte nennt sich Safeguard und verschlüsselt das Notebook. Bei jedem Start des PC, startet SafeGuard und es muss ein Passwort eingegeben werden.

Das bedeutet sobald der PC die GPO zieht führt er beim nächsten Neustart die Installation von SafeGuard aus. Die RIS Installation dauert aber weiter an und es werden immer noch Pakete von der Erstinstallation installiert. Ich muss also bei jedem Neustart das Safeguard Passwort eingeben.

Einfacher wäre es nun wenn Safeguard am Ende der RIS-Installation ausgeführt wird. Deshalb möchte per VBS überprüfen ob der PC Mitglied einer OU ist. Wenn ja wird dann die Installation ausgeführt.

mfg 0per8or
catachan
catachan 02.04.2007 um 12:23:12 Uhr
Goto Top
solange der ris nicht fertig ist führt er so weit ich weiß keine gpo aus
bastla
bastla 02.04.2007 um 12:25:05 Uhr
Goto Top
Hallo Oper8or!

Als Grundgerüst:
strComputer = "TestRechner"  
strOU = "TestOU"  

Set objConnection = CreateObject("ADODB.Connection")  
Set objCommand =   CreateObject("ADODB.Command")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
    "Select Name, Location from 'LDAP://OU=" & strOU & ",DC=firma,DC=local' " _  
        & "Where objectClass='computer'"    
objCommand.Properties("Page Size") = 1000  
Set objRecordSet = objCommand.Execute
If objRecordSet.EOF Then
	WScript.Echo "In OU " & strOU & " keine Computer gefunden!"  
	WScript.Quit(1)
End If
objRecordSet.MoveFirst
bolInOU = False
Do Until objRecordSet.EOF
    If UCase(objRecordSet.Fields("Name").Value) = UCase(strComputer) Then  
		bolInOU = True
		Exit Do
	End If
    objRecordSet.MoveNext
Loop
If bolInOU Then
    WScript.Echo strComputer & " ist in der OU " & strOU  
Else
    WScript.Echo strComputer & " ist nicht in der OU " & strOU  
    WScript.Quit(1)
End If

Grüße
bastla
15858
15858 02.04.2007 um 12:28:03 Uhr
Goto Top
Die RIS-Installation ist modifiziert, und da werden nach der Windows Installation weitere Pakete ausgeführt zwischen denen ein Neustart erforderlich ist. Da werden dann alle GPOs gezogen. Leider kann ich die Installation von Safeguard nicht in die Reihenfolge einfügen, deshalb möchte ich es anders realisieren.

Ist es möglich das mit VBS zu realisieren?
15858
15858 02.04.2007 um 12:32:12 Uhr
Goto Top
Danke. Damit komm ich zurecht!

mfg 0per8or
Biber
Biber 02.04.2007 um 12:52:25 Uhr
Goto Top
Moin 0per8or,

eine Winzigkeit schlanker als bastla's Vorlage wäre die (wiederverwendbare) Funktion IsMember() als VBS-Schnipsel.
'....irgendwo in Deinem VBS-krams...  
....
Function IsMember(strGroup)

Set objNetwork = CreateObject("WScript.Network")  

  strDomain = objNetwork.UserDomain
  strADUser = objNetwork.UserName
  bIsMember = False
 strCompGrp = UCase(strGroup)
' mit LDAP User in Active Directory finden und binden  
Set strADUser = GetObject("WinNT://" & strDomain & "/" & strADUser & ",user")  
  For Each objGroup In strADUser.Groups 
    If UCase(objGroup.Name) = strCompGrp Then
      bIsMember = True
      Exit For
    End If
  Next
  IsMember = bIsMember
End Function

Gruss
Biber
[Edit] vorletzte Zeile (falscher Variablenname) korrigiert, s. bastla's Folgepost.
@bastla Thx, und bzgl. "Zu schlank ist ja nicht so unbedingt mein Fall":
Soll ich Dir meine Ex-Schwiegermutter vorstellen?face-wink [/Edit]
bastla
bastla 02.04.2007 um 13:17:29 Uhr
Goto Top
@Biber

Zu schlank ist ja nicht so unbedingt mein Fall, aber wiederverwendbar ist gut:
WScript.Echo CompIsOUMember("TestRechner", "TestOU", "DC=firma,DC=local")  

Function CompIsOUMember(strComputer, strOU, strDom)
Set objConnection = CreateObject("ADODB.Connection")  
Set objCommand =   CreateObject("ADODB.Command")  
objConnection.Provider = "ADsDSOObject"  
objConnection.Open "Active Directory Provider"  
Set objCOmmand.ActiveConnection = objConnection

objCommand.CommandText = _
    "Select Name from 'LDAP://OU=" & strOU & "," & strDom & "' " & _  
    "Where objectClass='computer' And Name='" & strComputer & "'"  

Set objRecordSet = objCommand.Execute
If objRecordSet.EOF Then
	bolInOU = False
Else
	bolInOU = True
End If
CompIsOUMember = bolInOU
End Function

Grüße
bastla

P.S.: In Deiner vorletzten Zeile ist war ein Tippfehler, ansonsten ging's hier mehr um Computer und OU ...
bastla
bastla 02.04.2007 um 15:01:53 Uhr
Goto Top
@Biber

Soll ich Dir meine Ex-Schwiegermutter vorstellen?
Obwohl ich bisher erst sehr wenig über sie weiß ("Social Engineering" ist ja mehr die Stärke von LSW), muss ich Dich trotzdem fragen: Womit hätte ich das verdient?

Grüße
bastla

P.S.: Anderes P.S. an die veränderte Code-Lage angepasst ...