Butterbrot 10 Geschrieben 11. Februar 2004 Melden Teilen Geschrieben 11. Februar 2004 Hey Leute! Ich habn kleines Problem und bin schon seit gut 2 Tagen auf der suche nach der Lösung... und zwar geht es um eine LDAP-Abfrage die als Input eine Workstation-Nr und als Output den LDAP-Name leifern soll. Das Script sollte jedoch die ganze Domain durchsuchen, da die Workstation auf verschiedene OU's verteilt sind. Bis anhin konnte ich ein Scriptchen entwerfen, dass den LDAP-Name einer spezifischen OU ausspuckte: str_ws_id = inputbox ("WS-ID: ") set obj_workstation = GetObject("LDAP://CN=" & ws_id & ",OU=Desktops,OU=CH,DC=home,DC=net") str_output = obj_workstation.get("distinguishedName") MsgBox str_output Könnt ihr mir helfen? thx 4 helping. Gruss !-Butterbrot-! Zitieren Link zu diesem Kommentar
deubi 10 Geschrieben 11. Februar 2004 Melden Teilen Geschrieben 11. Februar 2004 ich kann Dir keine komplette Lösung anbieten, aber ich würde's mit einer "foreach"-Schlaufe zu lösen versuchen. Das kannst Du ineinander verschachteln: Die erste foreach-Schlaufe für die OU's, die darin enthaltene, nächste Schlaufe für die in der jeweiligen OU enthaltenen WS. Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 11. Februar 2004 Autor Melden Teilen Geschrieben 11. Februar 2004 ahh.. okey ich glaubs ich verstehe dein Gedankengang. Aber könntest du mir nicht vielleicht EINEN dieser foreach-Schlaufen liefern? Das würde mein Verständnis massiv erhöhen ;) thx Zitieren Link zu diesem Kommentar
deubi 10 Geschrieben 11. Februar 2004 Melden Teilen Geschrieben 11. Februar 2004 Auf MS' Technet gibt's massenhaft brauch- und modifizierbare Samplescripts zu allen Angelegenheiten; ich habe den Link schon zig-mal gepostet :rolleyes: Hast Du mal die Boardsuche ausprobiert? :suspect: Hier findest Du mehr: http://www.microsoft.com/technet/treeview/default.asp?url=/technet/scriptcenter/default.asp Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 11. Februar 2004 Autor Melden Teilen Geschrieben 11. Februar 2004 mal vorbeischauen... thx Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 11. Februar 2004 Autor Melden Teilen Geschrieben 11. Februar 2004 zu viele informationen... ich blick hier ainfach noch nicht durch! Gibts vielleicht sonst no hilfreiche Tipps? Zitieren Link zu diesem Kommentar
deubi 10 Geschrieben 11. Februar 2004 Melden Teilen Geschrieben 11. Februar 2004 Na, ein bischen Zeit must Du Dir schon nehmen! Von andern abschreiben ist übrigens wesentlich weniger lehrreich als selber aktiv werden ;) MSPress hat übrigens gute Titel zu Scripting im Programm. Das eine Buch ist "Scripting für Administratoren", das andere "Inside Scripting Host". Ich verwende die beiden regelmässig, als Referenzen, nebst dem Technet-Scriptcenter. Eine andere gute Ressource ist: http://www.activevb.de/startseite/index.html Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 12. Februar 2004 Autor Melden Teilen Geschrieben 12. Februar 2004 nun hab ich mich mal durch einige samplescripts durchgearbeitet.. mein jetztiges Script kann schon mal alle OUs der ersten hierarchischen Stufe ausgeben. set objRoot = GetObject("LDAP://rootDSE")strDomain = objRoot.Get("DefaultNamingContext")set objDom = getObject("LDAP://" & strDomain) objDom.Filter = array("organizationalUnit")for each objOU in objDom strOU = strOU & ";" & objOU.distinguishedName WScript.Echo objOU.distinguishedNamenext[/Code] Wie kann ich nun von jeder OU aus in die nächst tiefere Stufe switchen? Auf welchen Parameter müssen sich die "Foreach"-Schlaufen beziehen? thx :) Gruess !-Butterbrot-! Zitieren Link zu diesem Kommentar
deubi 10 Geschrieben 12. Februar 2004 Melden Teilen Geschrieben 12. Februar 2004 was meinst Du mit "nächst tiefere Stufe"? WS & Users oder verschachtelte OU's? Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 12. Februar 2004 Autor Melden Teilen Geschrieben 12. Februar 2004 ich meinte eigentlich die verschachtelten OUs.. aber das hab ich nun hin gekriegt. Set objRootDSE = GetObject("LDAP://RootDSE")Set objDomain = GetObject("LDAP://" & objRootDSE.Get("DefaultNamingContext"))Call BrowseOU(objDomain.ADsPath)Sub BrowseOU(sADsPath) Set objContainer = GetObject(sADsPath) objContainer.Filter = Array("OrganizationalUnit") For Each objOU in objContainer strpfad = objOU.get("distinguishedName") WScript.Echo strpfad BrowseOU(objOU.ADsPath) NextEnd Sub[/Code] Wie kann ich nun die dort enthaltenen WS ausgeben? Zitieren Link zu diesem Kommentar
deubi 10 Geschrieben 12. Februar 2004 Melden Teilen Geschrieben 12. Februar 2004 Drucken oder auf den Bildschirm? Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 12. Februar 2004 Autor Melden Teilen Geschrieben 12. Februar 2004 mit ausgeben meinte ich die Ausgabe am Bildschirm... schlussendlich sollte ich eine WS-Nr. eingeben und der dazugehörige LDAP-Name erscheint (am Bildschirm ;) Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 12. Februar 2004 Melden Teilen Geschrieben 12. Februar 2004 Hi Probiers mal hiermit aus dem Scripting Guide ---- Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = objConnection objCommand.CommandText = _ "<LDAP://dc=NA,dc=fabrikam,dc=com>;(objectCategory=computer)" & _ ";distinguishedName,name;subtree" Set objRecordSet = objCommand.Execute While Not objRecordSet.EOF Wscript.Echo objRecordSet.Fields("Name") Wscript.Echo "[" & _ objRecordSet.Fields("distinguishedName") & "]" objRecordSet.MoveNext Wend objConnection.Close ---- musst halt den Domainnamen noch anpassen und in die While Schleife eine If-Abfrage nach deinem Workstationnamen einbauen. Wenn du mehr als 1000 Rechner in deiner Domäne hast, sag nochmal Bescheid. Dann brauchst du noch einen Befehl cu blub Zitieren Link zu diesem Kommentar
Butterbrot 10 Geschrieben 12. Februar 2004 Autor Melden Teilen Geschrieben 12. Februar 2004 Wie mainst du das mit der IF-Abfrage in der While Schleife? Der Input des Workstationnamen wollte ich einfach wie inputbox realisieren.. Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 12. Februar 2004 Melden Teilen Geschrieben 12. Februar 2004 Wscript.StdOut.Write "Workstationname eingeben: " strwkst = Wscript.StdIn.ReadLine . . While Not objRecordSet.EOF if lcase(objRecordSet.Fields("Name")=lcase(strwkst) then wscript. echo objRecordSet.Fields("Name") &vbtab& objRecordSet.Fields("distinguishedName") exit while Wend Ich habs jetzt nicht ausprobiert, aber in etwa läufts so. cu blub Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.