win-hesse
Goto Top

VB LDAP AD Computer Konto auslesen (managedBy)

Hallo Zusammen,

ich suche nach einem Script wie ich das Feld "managedBy" von einem einzelen AD Computer Konto auslesen kann

Set objDomain = GetObject("LDAP://rootDse")  

objDC = objComputer.Get("managedBy")  

Wscript.Echo "Hier die Info:" & objDC  



leider geht diese nicht so einfach oder was mach ich falsch ?

Gruß

Content-ID: 171924

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

Ausgedruckt am: 26.11.2024 um 15:11 Uhr

bastla
bastla 23.08.2011 um 15:20:42 Uhr
Goto Top
Hallo win-hesse!

Wenn Du dem Script noch eine Zeile der Art
Set objComputer = GetObject("LDAP://CN=Der_PC,CN=Computers,DC=firma,DC=de")
spendierst (nur, damit vielleicht auch klar wird, welchen Computer Du meinst), sollte das Deine Chancen wesentlich verbessern ...

Grüße
bastla
win-hesse
win-hesse 24.08.2011 um 12:44:54 Uhr
Goto Top
hi bastla,

leider bekomme ich es nicht so richtig hin

hast du noch eine idee oder tipp für mich ?

Set oWSH = CreateObject("WScript.Shell")   
computer = oWSH.ExpandEnvironmentStrings("%COMPUTERNAME%")  
domain = oWSH.ExpandEnvironmentStrings("%USERDOMAIN%")  

Set objComputer = GetObject ("LDAP://CN=computer,CN=Computers,DC=domain,DC=com")  

objDC = objComputer.Get("managedBy")  

Wscript.Echo "Hier die Info:" & objDC  
bastla
bastla 24.08.2011 um 15:08:20 Uhr
Goto Top
Hallo win-hesse!

Wenn es um den aktuellen Rechner geht, dann etwa so:
Set objComputer = GetObject("LDAP://" & CreateObject("ADSystemInfo").ComputerName)  

On Error Resume Next
Manager = objComputer.Get("managedBy")  
On Error Goto 0

If Manager <> "" Then  
    WScript.Echo Manager
    WScript.Echo Split(Split(Manager, ",")(0), "=")(1)  
Else
    WScript.Echo "Kein Eintrag vorhanden!"  
End If
Grüße
bastla
win-hesse
win-hesse 24.08.2011 um 15:39:50 Uhr
Goto Top
hi,

das läuft sehr gut

na ja ich dachte ich könne es dann ganz einfach anpassen an eine eingabe feld
davor basteln aber

ich bekomme immer einen fehler face-sad

meinst du könntest das kurz machen ?

danke
bastla
bastla 24.08.2011 um 16:22:28 Uhr
Goto Top
Hallo win-hesse!

Vielleicht fängst Du ganz vorn vorne an und erklärst, was genau Du wie erreichen willst ...

Grüße
bastla
win-hesse
win-hesse 25.08.2011 um 09:16:27 Uhr
Goto Top
Hi,

ok ist wohl das beste

bei uns läuft zur Zeit der Win7 Rollout
und wir haben ein Tool das den PC in die Domain aufnimmt und einen eine PC Namen vergibt
dieses war bis lang nicht so und man konnte aus der alten Syntax erkennen zu welcher Abteilung und Standort diese gerät gehört

die Infos stehen aber im AD Konto vom Computer
daher Baste ich gerade mit Visual Basic 2010 Express so ein kleine VB Anwendung
die uns die Arbeit erleichtern soll
zb. kann ich die User ID eingeben und gleich mehr Infos anzeigen lassen (Account gesperrt und so weiter)
durch den teil kann ich immer weiter User AD Infos raus bekommen... oUser.IsAccountLocked...
       Vpuser = TB2.Text
        getrimmt = Vpuser.Trim(" ")  

        oUser = GetObject("WinNT://domain/" & Vpuser)  

        TB9.Text = "Benutzer: " & oUser.FullName & vbCrLf  
        TB9.Text = TB9.Text & "Kennwortalter: " & (oUser.PasswordAge / 3600) \ 24.0  

jetzt will ich das Computer Konto auch befragen können da die info im managedBy sehr Wichtig für uns ist
es soll so sein as ich Problem los weiter Infos herraus ziehen kann

verstanden ?

Gruß
win-hesse
win-hesse 26.08.2011 um 09:40:46 Uhr
Goto Top
Hi,

ich brauch eigentlich nur eine erklärung zu dem Teil
bzw. wie ich hier die Computer Variabel hinzufügen kann

Set objComputer = GetObject("LDAP://" & CreateObject("ADSystemInfo").ComputerName)

danke für eure hilfe
bastla
bastla 26.08.2011 um 11:04:39 Uhr
Goto Top
Hallo win-hesse!

Sorry - ich verstehe die Frage nicht ganz; mit der angegebenen Zeile (lass Dir einfach einmal das Ergebnis von
CreateObject("ADSystemInfo").ComputerName
anzeigen) wird ja das Computer-Objekt anhand des AD-Pfades erzeugt - wenn Du also einen anderen Computer ansprechen wolltest, wären wir wieder ganz oben in diesem Thread ...

Grüße
bastla
win-hesse
win-hesse 26.08.2011 um 12:52:16 Uhr
Goto Top
habe ien Lösung gefunden

mit objCommand.CommandText = "Select ManagedBy from 'LDAP://

geht super bei Intresse PM
bastla
bastla 26.08.2011 um 13:58:57 Uhr
Goto Top
Hallo win-hesse!

Wie ist
bei Intresse PM
gemeint?

Grüße
bastla
BigWim
BigWim 26.08.2011 um 14:58:35 Uhr
Goto Top
[OT]
@bastla

Vielleicht kannst Du ja noch etwas lernen face-wink

Ok, ich halt mich raus.

Schönes Wochenende
Markus

[/OT]
bastla
bastla 26.08.2011 um 16:14:37 Uhr
Goto Top
[OT]
@BigWim
Vielleicht kannst Du ja noch etwas lernen face-wink
Das würde ich nie ausschließen - aber eigentlich ging's mir eher darum, wie win-hesse den Sinn eines Forums sieht ...

Grüße
bastla
[/OT]
win-hesse
win-hesse 29.08.2011 um 10:30:15 Uhr
Goto Top
Hi,

so war das nicht gemeid...
hier ist die lösung aber ich kann diese nicht erklären bzw. verstehe diese auch nicht

Gruß

        Vpc = TB1.Text

        Const ADS_SCOPE_SUBTREE = 2

        objFSO = CreateObject("scripting.filesystemobject")  

        objConnection = CreateObject("ADODB.Connection")  
        objCommand = CreateObject("ADODB.Command")  
        objConnection.Provider = "ADsDSOObject"  
        objConnection.Open("Active Directory Provider")  
        objCommand.ActiveConnection = objConnection
        objCommand.CommandText = "Select ManagedBy from 'LDAP://OU=,DC=,DC=,DC=,DC=com' where Name='" & Vpc & "'"  
        objCommand.Properties("Page Size") = 1000  
        objCommand.Properties("Timeout") = 30  
        objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
        objCommand.Properties("Cache Results") = False  
        objRecordSet = objCommand.Execute
        Manager = (objRecordSet.Fields("ManagedBy").Value)  
        objRecordSet.MoveNext()

        TB9.Text = (Split(Split(Manager, ",")(0), "=")(1))  
win-hesse
win-hesse 30.08.2011 um 20:38:19 Uhr
Goto Top
hi,
habt ihr das ganze verstanden ? kann es mir jemand in etwa erklären ?

hätte da noch eine frage face-wink

errorlevel wie und wo müsste ich diese einbauen
weil aktuell stürtzt das script ab wenn der PC nicht im AD ist

Gruß
bastla
bastla 30.08.2011 um 21:32:38 Uhr
Goto Top
Hallo win-hesse!

Ich weiß ja nicht, wo Du das Script oben aufgetrieben hast, aber einige Details sind nicht ganz astrein - besser sollte es so gehen:
Vpc = TB1.Text

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.CommandText = _
    "Select Name, ManagedBy from " & _  
        "'LDAP://DC=firma,DC=com' where objectClass='computer'and name='" & Vpc & "'"  
objCommand.Properties("Page Size") = 1000  
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE   

Set objRecordSet = objCommand.Execute

If objRecordSet.EOF Then 
    Manager = "Computer nicht gefunden"  
Else
    objRecordSet.MoveFirst
    Manager = objRecordSet.Fields("ManagedBy").Value  
    If Manager <> "" Then  
        Manager = Split(Split(Manager, ",")(0), "=")(1)  
    Else
        Manager = "kein Eintrag"  
    End If
End If

TB9.Text = Manager
Was das Script macht, ist relativ einfach - es wird, ausgehend von der angegebenen Ebene (eine OU bzw im Beispiel hier die gesamte Domäne) nach einem Computer mit dem vorgegebnen Namen gesucht. Die Abfrage ist dabei im SQL-Stil formuliert. Das Ergebnis ist ein RecordSet, das üblicher Weise mit einer Schleife der Art
Do Until objRecordSet.EOF
...
Loop
durchlaufen wird. Wenn nur der erste (und einzige) Eintrag interessiert, kann dieser auch direkt abgefragt werden - falls er existiert und nicht bereits vorweg "EOF" erreicht ist.

Grüße
bastla
win-hesse
win-hesse 31.08.2011 um 08:30:51 Uhr
Goto Top
langsamm komm ich dahinter face-wink

nur das mit der Schleife habe ich noch nicht so ganz verstanden
da ich mehre Wert ausgeben will

mit dem alten Teil von mir hatte ich immer das Problem das ich das Feld "serialNumber" nicht raus bekommen habe
bzw. das der Typ Object() nicht definiert ist

andere felder wie "operatingSystem" "whenCreated" "title" alle kein Problem

Gruß
bastla
bastla 31.08.2011 um 10:22:41 Uhr
Goto Top
Hallo win-hesse!
nur das mit der Schleife habe ich noch nicht so ganz verstanden
da ich mehre Wert ausgeben will
Die Schleife läuft über alle Objekte - bei Abfrage eines bestimmten Computers anhand seines Namens ist das dann eben nur eines (oder keines) - wenn Du Computer mit einem bestimmten OS suchst, werden mehrere Objekte zurückgegeben. Welche und wieviele Werte Du für das jeweilige Objekt abfragen willst, hat mit der Schleife nix zu tun ...
Hinsichtlich der einzelnen Werte / Felder hat zB Yusuf hier eine Übersicht zusammengestellt ...

Grüße
bastla
win-hesse
win-hesse 01.09.2011 um 18:36:41 Uhr
Goto Top
Also ist das so nicht richtig ??

klappt aber bis auf wenn ich Manager3 hinzufüge
dann bekomme ich immer FM: InvalidCastException wurde nicht behandel. Der Operator & ist für Zeichenfolge .... und Typ Objekte() nicht definiert.

hast noch eine idee für mich ?


        objRecordSet = objCommand.Execute

        If objRecordSet.EOF Then
            MsgBox("Computer nicht gefunden")  
            'Manager = "Computer nicht gefunden"  
        Else
            objRecordSet.MoveFirst()
            Manager = objRecordSet.Fields("ManagedBy").Value  
            Manager2 = (objRecordSet.Fields("Location").Value)  
            Manager3 = (objRecordSet.Fields("serialNumber").Value)  
            Manager4 = (objRecordSet.Fields("dNSHostName").Value)  
            Manager5 = (objRecordSet.Fields("operatingSystem").Value) & " " & (objRecordSet.Fields("operatingSystemVersion").Value)  
            Manager7 = (objRecordSet.Fields("whenCreated").Value)  
            Manager8 = (objRecordSet.Fields("title").Value)  

            If Manager <> "" Then  
                Manager = Split(Split(Manager, ",")(0), "=")(1)  
            Else
                Manager = "kein Eintrag"  
            End If

        End If

        TB9.Text = Manager & vbCrLf
        TB9.Text = TB9.Text & Manager2 & vbCrLf
        TB9.Text = TB9.Text & Manager3 & vbCrLf
        TB9.Text = TB9.Text & Manager5 & vbCrLf
        TB9.Text = TB9.Text & Manager7 & vbCrLf
        TB9.Text = TB9.Text & Manager8 & vbCrLf
bastla
bastla 01.09.2011 um 18:49:03 Uhr
Goto Top
Hallo win-hesse!

Versuch es mit folgender Zeile 10:
Manager3 = Join(objRecordSet.Fields("serialNumber").Value)  
BTW: Die (äußeren) Klammern in den Zeilen 9 und 11 - 14 solltest Du ersatzlos streichen können ...

Grüße
bastla
win-hesse
win-hesse 08.09.2011 um 16:53:26 Uhr
Goto Top
hi,

habe das ganze mit den Klammer noch weg genommen und ein par keinigkeiten verbesser face-wink
super danke für deine top hilfe

Gruß