unique24
Goto Top

OU des User Abfragen

über Script

Hallo

Ich möchte gerne über ein vbs Script, Netzwerk Freigaben mappen.

Beispiel:
User x aus der OU:Personal,OU:Elektrik soll mit Freigabe \\w03team3\Elektrik und LW U: verbunden werden.

per Batch:
net use U: \\w03team3\Elektrik /p:n

Nun möchte ich aber Variablen nutzen. Dazu müßte ich über das Script die OU´s herausbekommen, welcher der User angehört, der das Script ausführt.

Ich programmiere zwar mit vb.net aber die OU´s kann ich nicht auslesen.
Hat hier jemand eine kurze Hilfe?
Das Zuweisen in vb der Freigaben ist mir auch noch unbekannt ... aber da könnte ich ein .cmd mit Paramter des OU starten.
Den Rest müßte ich dann schon sellbst heraus bekommen.

Für einen Tipp den OU des Users zu bekommen, der das Script startet, wäre ich dankbar!

Hannes

PS: Wäre das auch mit reinem Batch möglich?

[Edit Biber 29.5.07] Wegen des Verlaufs des Beitrags und der schönen Skripting-Links am Ende (THX @bastla) verschoben von "Windows Server" nach "Batch & Shell" (dem Sammelbecken für Script-Lösungen hier im Forum).
[/Edit]

Content-Key: 56757

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

Printed on: April 16, 2024 at 12:04 o'clock

Member: datasearch
datasearch Apr 16, 2007 at 15:01:39 (UTC)
Goto Top
ich hab KA von VB, aber für andere zwecke mache ich einen ldap-query nach dem DN und nutze "=" und "," als trennzeichen. zb. die ausgabe "cn=user user,cn=builtin,dc=irgendwas,dc=irgendwas" zuerst per "," trennen und die benötigten felder dann nochmal mit "=" als trennzeichen zerlegen.

1. Stufe - Trennen mit "," als Feldtrenner
"cn=user user"
"cn=builtin" <<< Benötigte OU
"dc=rgendwas"
"dc=irgendwas"
2. Stufe - Die benötigten felder mit "=" nochmal trennen
"builtin"

Naja, ist nur nen ansatz. Vieleicht kannst das ja irgendwie in dem VB einsetzen.
Member: problemsolver
problemsolver Apr 16, 2007 at 15:24:57 (UTC)
Goto Top
Hi!

vielleicht geht es einfacher, wenn Du alle Benutzer der OU in eine Sicherheitsgruppe packst und dann mit ifmember die Gruppenzugehörigkeit abfragst? Hierbei kannst Du dann auch die Zugehörigkeit zu mehreren Gruppen geschickt im Script ausnutzen.

Gruß

Markus
Member: unique24
unique24 Apr 16, 2007 at 16:05:25 (UTC)
Goto Top
Hallo Markus

Beschäftige mich mit Win 2003 Server erst seit 2 Wochen ... im Moment lerne ich mir Active Directory.
Daher sind meine Kenntnisse noch sehr bescheiden.

In Punkto Sicherheitsgruppe wollt ich mich auch schon einlesen .. werde ich heute noch machen!

ifmember werde ich einmal googlen ... oder hast du eventuell ein Beispiel?

@datasearch
ein LDAP Query ist mir neu ... machst du das in einer Batch Umgebung?
Leider kann ich dadurch dein Beispiel nicht auflösen face-sad

Gruß
Hannes
Member: problemsolver
problemsolver Apr 16, 2007 at 18:50:29 (UTC)
Goto Top
Hi!

Klar hab ich ein Beispiel... Sorry. Hätte ich auch schon längst posten können face-wink

%logonserver%\netlogon\tools\ifmember "Geschaeftsleitungsteam"  
if %errorlevel% EQU 1 @net use g: \\fileserver\geschaeftsleitung$ /yes /persistent:yes

Sobald ein Benutzer ein Mitglied der Gruppe ist, wird von ifmember der errorcode 1 zurückgeliefert.
Durch eine Errorlevelabfrage kannst du somit bestimmen, ob jemand Mitglied ist oder nicht und dann dementsprechend einen nachfolgenden Befehl ausführen:
@net use g: \\fileserver\geschaeftsleitung$ /yes /persistent:yes

Schau dir einfach mal den Syntax von "net use" an. Start->Ausführen->CMD->net use /?
Ein Tipp: Ein $-Zeichen am Ende einer Freigabe versteckt die Freigabe vor allzu neugierigen Mitarbeitern, dich sich im Netz umschauen möchten. (aber man sollte dennoch die richtigen Sicherheitsberechtigungen stets setzen...)

Das Tool ifmember ist ein Bestandteil des Resource Kits von Microsoft. Das Tool lädst du hier herunter:

Ifmember Download

Lege Tools im Netlogon Verzeichnis deines Anmeldeservers in der Domäne ab. Für mich hat es sich bewährt ein Unterverzeichnis Tools anzulegen, so dass man den Überblick nicht verliert.

Ansonsten wünsch ich noch viel Erfolg. Eventuell würde ich dir noch ein paar Batch-Tutorials empfehlen, wenn Du dich dort einlesen möchtest.

Gruß

Markus
Member: unique24
unique24 Apr 17, 2007 at 05:00:36 (UTC)
Goto Top
Guten Morgen Markus

Ok, ifmember verstanden, vielen Dank.

Führt mich aber noch nicht zu meinem Ziel.
Ich möchte ja die Freigabe mit dem Namen der OU des Users verknüpfen.
Somit bräuchte ich die OU in einer Variable, welches ich dann in net use einsetzen kann:
net use U: \\w03team3\Abteilung\%1% /p:n

wobei %1 die OU darstellt ... eventuell starte ich das Script mit Parameter und trage es in jeder Abteilung ein.
Somit bekommt jeder das Netzlaufwerk verbunden, für seine Abteilung.

Interessant wäre eben gewesen, die OU auszulesen und somit ohne Paramter zu starten, was den Arbeitsaufwand eben etwas reduziert.

In Batch Tutorials würde ich mich SEHR gerne einlesen!

Gruß

Hannes
Member: Biber
Biber Apr 17, 2007 at 18:01:39 (UTC)
Goto Top
Moin unique24,

willkommen im Forum.

Für Deine zuletzt gepostete Strategie gibt es ein paar Standalone-ListGroup-Tools, aber das ist ja so schnell per VBS zusammengeklimpert, da lohnt sich ein Downloaden gar nicht.

Schnelles .VBS-Beispiel:
'----Snipp ListGroups.vbs [gedacht in einem Login/Mapping-Skript]  
Set objSysInfo = CreateObject("ADSystemInfo")  
Set objNetwork = CreateObject("Wscript.Network")  

strUserPath = "LDAP://" & objSysInfo.UserName  
Set objUser = GetObject(strUserPath)

For Each strGroup in objUser.MemberOf
    strGroupPath = "LDAP://" & strGroup  
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN
    wscript.echo strGroupName
'    Select Case strGroupName  
'        Case "Elektrik"  
'            objNetwork.MapNetworkDrive "U:" , "\\w03team3\Elektrik"   
'          
' eventuell Home-Laufwerk ?          
'            objNetwork.MapNetworkDrive "H:", "\\w03team\Users\" & objUser.sAMAccountName  
'              
'        Case "Beschwerdeabteilung"  
'            objNetwork.MapNetworkDrive "X:", "\\server666\Garbage  
' ........              
'    End Select  
Next
Der Schnipsel OHNE die mit "'" auskommentierten Zeilen würde nur die Gruppen auflisten, denen der User angehört.
Und das könntest Du dann wiederum im Batch mit einer FOR/F-Anweisung abfackeln.

Aufruf im Batch:
cscript //nologo DerSchipselOben.vbs
-bzw- 
For /f %%i in ('cscript //nologo DerSchipselOben.vbs') do (  
   if /i [%%i] == [Elektrik] net use U: \\w03team3\Elektrik /p:n
   if /i [%%i] == [Kantine] net use U: \\wuergteam\Reste /p:n
   ....
)

[ungetestete Skizzen!]

Gruss
Biber
Member: datasearch
datasearch Apr 19, 2007 at 16:02:05 (UTC)
Goto Top
hallo biber,

nicht schlecht, soviel zu VB.
Da kannst du sicher auch die OU aus dem LDAP$ parsen. face-wink

Denn, wenn das im VB geht kann ich mein for /f ... batch-konstrukt wegschmeissen -g-. (frag nicht für was aber ich brauch ne liste aller OU´s in der User liegen)

grüße,

datasearch
Member: Biber
Biber Apr 19, 2007 at 17:18:26 (UTC)
Goto Top
Moin datasearch,

alle OUs auflisten, in denen User sind? *kopfkratz*
Ungewöhnlich... weil, eigentlich müsstest Du die doch kennen...

Aber what shalls, wie der Lateiner sagt...

Schnell hingeschreddert wäre dieser Schnipsel für den Zweck:
'-----ListAllOUs.vbs  
Dim cn, rs, root, domain, strdomain, strtest
Set cn = CreateObject("ADODB.Connection")  
set rs = CreateObject("ADODB.Recordset")  
Set root = GetObject("LDAP://rootDSE")   
strdomain = root.Get("defaultNamingContext")   

Set domain = GetObject("LDAP://" & strdomain)   

cn.ConnectionString = "Data Source=Active Directory Provider;Provider=ADsDSOObject"   
cn.Open 

rs.ActiveConnection = cn 
rs.Source = "<" & domain.ADsPath & ">;(&(objectCategory=OrganizationalUnit));distinguishedName"   
' Anmerkung --- vielleicht reicht Dir statt "distinguishedname" auch einfach "name". Ausprobieren.  
rs.Open 

Do While Not rs.EOF 
    wscript.echo rs.Fields(0)
    rs.MoveNext 
Loop 

rs.Close 
cn.Close 
Set rs = Nothing 
Set cn = Nothing 
...aufzurufen wieder mit
cscript //nologo [Lw:\Pfad\]ListOUs.vbs
Auf die Gefahr hin, dass ich verkalkt erscheine.... wie ist denn Dein geplantes Vorgehen??
Ich dachte, Du wolltest über eine Gruppenzugehörigkeit der Benutzer (sprich: Benutzername ist der einzig feste Punkt im Raum) irgendwelche Mappings machen.

Kannst Du noch mal kurz den Plan/ die Anforderung skizzieren?

Gruss
Biber
Member: unique24
unique24 Apr 21, 2007 at 13:42:59 (UTC)
Goto Top
Hallo

Vielen Dank für das vb Beispiel. Werde ich mir demnächst genauer anschauen.

Ich benötige den Namen der OU, weil die Freigaben der einzelnen OU´s genau so heißen.
Daher möchte ich mit einem einzigen Script jeden User das zugehörige Laufwerk seiner OU (Abteilung) mappen.

Gruß

Hannes
Member: datasearch
datasearch Apr 23, 2007 at 08:18:28 (UTC)
Goto Top
Hallo Biber,

es funktioniert einfach nur. Ich sollte mich doch mal intensiv mit VB befassen.

Warum ich das brauche? Lange Geschichte, kurz gesagt, es geht um automatisierte Dokumentation der AD-Strukturen in mehreren Gesammtstrukturen.

Hast du vieleicht eine Buchempfehlung für VB Scripting? Sollte schon Deutsch sein. Der scriptingGuide der bei den PSPress Büchern dabei ist finde ich nicht unbedingt so ausführlich.
Member: Biber
Biber Apr 23, 2007 at 09:12:09 (UTC)
Goto Top
Moin datasearch,

bei Deiner Frage nach Literaturempfehlungen zu VBScripting muss ich auch passen - da könnte eventuell Kollege bastla besser weiterhelfen.

Ich habe gerade mal nachgeschaut, ob bei uns im Forum eventuell Buchtipps unter "Links" gepostet sind, bin aber nicht wirklich fündig geworden.

Als Einstiegspunkt für weitere Recherchen wäre evtl noch M$ Skript Center oder die M$-Scripting Guy-Seiten geeignet.

Falls Dir Besseres empfohlen wird, dann könntest Du bitte einen entsprechenden Link ins Forum einstellen.

Gruss
Biber
Member: bastla
bastla Apr 23, 2007 at 12:35:30 (UTC)
Goto Top
Hallo datasearch!

Mit einer Buchempfehlung kann ich leider nicht dienen, aber viel gebracht haben auch mir die von Biber genannten Codebeispiele bei MS selbst, ausgehend vom oben verlinkten Script Center die erwähnten Hey, Scripting Guy!-Kolumnen und natürlich das Script Center Script Repository (als Offline-Versionen: The Hey, Scripting Guy! Archive und TechNet Script Center Sample Scripts)

ergänzt durch WMI Tasks for Scripts and Applications sowie ADSI Scripting Primer (dazu als Downloads: WMI Code Creator v1.0 und ADSI Scriptomatic)

und viele weitere Code-Beispiele quer durch's Web:
Rob van der Woude's VBScript Scripting Techniques
JSWare VBScript Samples and Components
faq-o-matic.net

Die Bücher von Holger Schwichtenberg kenne ich nicht aus eigener Anschauung, aber seine Informationen zu Windows Scripting könntest Du vielleicht interessant finden.

Noch mehr Deutschsprachiges findest Du bei Frank's Exchange FAQ (verlinkt).

So, damit dürftest Du für die nächsten paar Stunden beschäftigt sein ... face-wink

Grüße
bastla