Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VBScript: ActiveDirectory (https://www.delphipraxis.net/51068-vbscript-activedirectory.html)

faux 5. Aug 2005 08:49


VBScript: ActiveDirectory
 
Hallo!

Weiß jemand wie man in VBScript abfrägt, in welcher Organisational Unit (Container) ein Computer eines ActiveDirectorys (Domain) ist? Ich brauche das für ein Logon-Script in einer Domain.
Wär echt wichtig.

Danke schon mal.
Faux

PS: Eine Organisational Unit ist ein "Ordner", in dem PCs, User und Gruppen eingeteilt sind.

jensw_2000 5. Aug 2005 08:54

Re: VBScript: ActiveDirectory
 
Spontan habe ich die Befehle nicht auf Lager, aber lade dir doch den "ADSI Scriptomatic" von Microsoft runter.

Da findest du auf alle Fälle was passendes.

:hi:

faux 5. Aug 2005 09:37

Re: VBScript: ActiveDirectory
 
Hallo!

Das is schon sowas in der Richtung, was ich suche. Aber das Script, das ich wirklich brauche, ist leider nicht dabei.

Das (passendste) Skript vom ADSI:

Liest die Daten (OS, User, etc.) eines Computers aus, dessen Organisational Unit bekannt ist.
bsp:
Eingabe: LDAP://cn=ATSRVLNZ001,ou=Linz,ou=Austria
Ausgabe: Windows Server 2003

Ich suche:

Ließt Organisational Unit eines Computers aus.
bsp:
Eingabe: LDAP://ATSRVLNZ001
Ausgabe: Austria\Linz (oder) ou=Linz,ou=Austria (oder ähnlich)

Danke schon mal.
Faux

Edit: Ich will im Endeffekt ein Skript machen (Loginskript), das überprüft, ob der User und der Computer in der selben Organisational Unit sind und andernfalls eine (Fehler)meldung ausgibt.

jensw_2000 11. Aug 2005 08:46

Re: VBScript: ActiveDirectory
 
Hm...

und wenn du mal versuchst anders heranzugehen ?

CN's sund ja innerhalb eines Active Directorys eindeitig.

Durchlaufe per Script die untergeordneten Objekte der OU's, in denen die User- und Computerobjekte sein sollten.
Wenn das Script nicht beide Objekte innerhalb einer OU findet > Fehler...

Das ist sicher etwas langsamer, aber ich könnte mir schon vorstellen das es funktioniert..

jensw_2000 12. Aug 2005 19:10

Re: VBScript: ActiveDirectory
 
Hier ist das, was du suchst ...
Ich bin ebend eher durch Zufall drauf gestoßen ...

ldapquery.vbs

Code:
In diesem Skript wird eine Anfrage an Active Directory gestellt und das Ergebnis an der Standardausgabe zurückgegeben. Es wird in SynServer benutzt, um alle Benutzer herauszufinden, die zur SynServer-Gruppe gehören und prinzipiell so aufgerufen (in einer Zeile):


cscript //nologo ldapquery.vbs
  "(memberOf=CN=Domänen-Admins,CN=Users,DC=synserver,DC=de)"
  "sAMAccountName"


Natürlich müssen Sie den Domänen-Namen DC=synserver,DC=de an Ihr System anpassen, wenn Sie mit dem Skript experimentieren. Das Skript habe ich aus Beispielen von Microsoft zusammengebaut.


Set ArgObj = WScript.Arguments
if ArgObj.Count<>2 then
  wscript.stderr.writeline "ldapquery: Argumentenliste pass nicht"
  wscript.quit(0)
else
  ' Das ADO connection object und ADO command object anlegen
  Set Con = CreateObject("ADODB.Connection")
  Con.Provider = "ADsDSOObject"
  Con.Open "Active Directory Provider"
  Set ocommand = CreateObject("ADODB.Command")
  ocommand.ActiveConnection = Con
  ' Den ADsPath für die Domäne setzen
  Set root = GetObject("LDAP://rootDSE")
  sDomain = root.Get("defaultNamingContext")
  Set domain = GetObject("LDAP://" & sDomain)
  ' Den Befehl zusammensetzen und ausführen
  sADsPath = "<" & domain.ADsPath & ">"
  sFilter = ArgObj.Item(0)
  sAttribsToReturn = ArgObj.Item(1)
  sDepth = "subTree"
  ocommand.CommandText = sADsPath & ";" & sFilter & ";" &
    sAttribsToReturn & ";" & sDepth
  Set rs = ocommand.Execute
  if not rs.EOF then
    rs.MoveFirst
    While Not rs.EOF
      For i = 0 To rs.Fields.Count - 1
        if (isArray(rs.Fields(i))) then
          for each e in rs.Fields(i).Value
            wscript.echo rs.Fields(i).Name&"="&e
          next
        else
          wscript.echo rs.Fields(i).Name & "=" & rs.Fields(i).Value
        end if
      Next
      rs.MoveNext
      wscript.echo ""
    Wend
  end if
end if
Schöne Grüße,
Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz