pn-schrauber
Goto Top

AD-User mit mehrstelliger Nummer erstellen

Hallo,

ich sitze gerade vor einem Problem, wir haben ein Script (für die CMD) geschrieben, was automatisch das AD füllt.


wir nutzen folgen befehle dafür


for /l %%a in (1,1,23) do (
for /f "eol=; tokens=1-3 delims=," %%g in (%SCRIPTPATH%Abteilungen.txt) do (
dsadd user "cn=%%g_%%a,ou=Mitarbeiter,ou=%%g,ou=Kernabteilungen,ou=%STANDORT%,dc=%NETBIOSDOM%,dc=%NETBIOSTLD%" -samid %%g_%%a -upn %%g_%%a@%NETBIOSDOM%.AG -pwd Pa$$w0rd -memberof "cn=_G_%%g,ou=Gruppen,ou=%%g,ou=Kernabteilungen,ou=%STANDORT%,dc=%NETBIOSDOM%,dc=%NETBIOSTLD%" -mustchpwd no -disabled no
)
)


Nun wollen wir es besonders schön machen und möchten, das die Benutzer 1-9 mit 01 -09 angelegt werden

dazu müssten wir die lokale Variable in eine globale umwanden, aber wie machen wir das am bessten

wir haben schon den ganzen Tag probiert, bekommen die Variable jedoch nicht übergeben .

Content-Key: 259206

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

Printed on: April 23, 2024 at 17:04 o'clock

Mitglied: 114757
114757 Jan 08, 2015, updated at Jan 09, 2015 at 11:14:08 (UTC)
Goto Top
Moin,
Beispiel:
@echo off & setlocal enabledelayedexpansion
for /f "eol=; tokens=1-3 delims=," %%g in (%SCRIPTPATH%Abteilungen.txt) do @(  
  for /L %%a in (1 1 23) do @(
     set /a nummer=10%%a
     set lfdnr=!nummer:~-2!
     dsadd user "cn=%%g_!lfdnr!,ou=Mitarbeiter,ou=%%g,ou=Kernabteilungen,ou=%STANDORT%,dc=%NETBIOSDOM%,dc=%NETBIOSTLD%" -samid %%g_!lfdnr! -upn %%g_!lfdnr!^@%NETBIOSDOM%.AG -pwd Pa$$w0rd -memberof "cn=_G_%%g,ou=Gruppen,ou=%%g,ou=Kernabteilungen,ou=%STANDORT%,dc=%NETBIOSDOM%,dc=%NETBIOSTLD%" -mustchpwd no -disabled no  
     )
)
Tutorial zur FOR-Schleife

Gruß jodel32
Member: PN-Schrauber
PN-Schrauber Jan 08, 2015 updated at 16:18:56 (UTC)
Goto Top
Nochmal zum Verständnis für mich, bin wie gesagt noch in der Umschulung zum Admin

ich ersetzten meine FOR-Schleife, in welcher ich die Variable "%%a" mit einem Wert fülle

for /l %%a in (1,1,23) do (
....

durch


set /a nummer=101
.....
set /a number+=1


dann müsste ich noch de Zahl prüfen lassen, beispiels einer IF-Schleife um beim gewünschten Wert (indem Fall 23, bzw. 123) die FOR-Schleife zu verlassen


Wir haben halt schon versucht, die Werte (Zahlen) aus der FOR-Schleife in eine Textdokument zu leiten, dieses dann wieder auszulesen, um die Zahl in eine globale Variable umzuwandeln, um diese dann mittel dem Befehl

set variable=%<ERGEBNIS VOM AUSLESEN>:~-3%

zu packen, und damit dann den Nutzer zu erstellen, hat aber irgendwie nie geklappt, sprich er hat es nie ausgelesen.


genau über diesem Tutorial haben wir den anzen Tag gesessen, hat uns ja schon extrem geholfen, es werden ja auch alle Nutzer, OU´s, Gruppen usw. angelegt wie gewollt, aber wir wollten eben nicht einen Nutzer "IT_1" sondern es sollte IT_01" werden, damit man dann die bessere Übersicht hat

Klar kann man es mit 2 Forschleifen lösen , indem man erst die Benutzer 1-9 anlegen lässt, und eine Null vor die Variable "%%a" setzte und eine weitere Schleifen mit den Nutzern ab 10 aber wir haben uns gedacht, dass muss auch einfacher gehen


Danke erstmal für den Tipp, werden es morgen versuchen, heute ist ja schon Feierabend.
Mitglied: 114757
114757 Jan 08, 2015 updated at 17:47:41 (UTC)
Goto Top
Nur zum Verständnis, sehe ich das jetzt richtig das ihr pro Abteilung welche in der Textdatei stehen, 23 User erstellen wollt ?
Dann siehe oben die entsprechende Anpassung.

Folgende Zeile erstellt eine Zahl mit der Laufvariable der /L Schleife, somit ist bei einstelligen Zahlen sichergestellt das eine führende Null vorhanden ist.
set /a nummer=10%%a
Dann extrahiert die folgende Zeile immer die letzen zwei Stellen der obigen Zahl, welche nun der Variablen lfdnr zugewiesen werden.
set lfdnr=!nummer:~-2! 

Also im Beispiel ist die Laufvariable %%a = 8, dann wird die Variable nummer zu 108 und lfdnr wird dann zu 08 weil ja nur die letzen beiden Stellen der Zahl genommen werden 108

Bei 15 dann also 115
bei 20 dann 120
usw.

Diese Variable kannst du nun mit !lfdnr! in deinem dsadd Befehl benutzen.

Hoffe das war nun verständlich face-smile

Gruß jodel32
Member: PN-Schrauber
PN-Schrauber Jan 09, 2015 at 07:52:39 (UTC)
Goto Top
läuft soweit super durch, großes Danke

ABER
er verschluckt sich beim setzen des UPN, am "@" vor dem Domainnamen.

lass ich es ab dem @ weg, wird er zwar erstellt, aber es wird eben nicht gesetzte in den Kontoeinstellungen

kann man das irgenwie um gehen?

Gruß
PN-Schrauber
Mitglied: 114757
114757 Jan 09, 2015 updated at 11:00:52 (UTC)
Goto Top
Wenn du die weiteren Variablen wie z.B. %NETBIOSDOM% innerhalb der FOR-Schleifen mit set setzt musst du sie anstatt mit Prozentzeichen mit Ausrufezeichen umschließen !NETBIOSDOM!.
Stichwort delayedexpansion.
Member: PN-Schrauber
PN-Schrauber Jan 09, 2015 updated at 11:15:30 (UTC)
Goto Top
Die weiteren Variablen, werden am Script anfang gesetzt, da diese über das komplette Script genutzt werden

die FOR-Schleife, sieht 1:1 so aus wie oben beschrieben.

Ich würde das Script gern anhängen, doch leider ist es mir so nicht möglich, und es hier zu Posten,traue ich mich kaum, da es sehr lang ist

Lass ich den Teil, in welchem ich die Nummer 2-stellig erstellen lasse weg, dann funktioniert es mit dem UPN wie es soll
Mitglied: 114757
114757 Jan 09, 2015 updated at 11:13:32 (UTC)
Goto Top
Escape es mal zusätzlich mit einem Caret, dann müsste es gehen.
^@
Member: PN-Schrauber
PN-Schrauber Jan 09, 2015 at 11:45:55 (UTC)
Goto Top
Super läuft
vielen Dank,

ich werde es als gelöst markieren, bei Interesse, kann ich gern das Script zur verfügung stellen, ist wie gesagt nur für unsere Übungsmaschienen in der Schule erstellt
Mitglied: 114757
114757 Jan 09, 2015 updated at 12:42:42 (UTC)
Goto Top
bei Interesse, kann ich gern das Script zur verfügung stellen
Ich mach sowas lieber direkt mit Powershell,
simples Beispiel (enthält jetzt nicht alles von dir oben, lässt sich aber genauso ergänzen)
$abteilungen = @('Abteilung1','Abteilung2')  
$abteilungen | %{
    $abteilung = $_
    1..23 | %{New-Aduser "User_$($_)" -AccountPassword (Convertto-SecureString 'Pa$$word' -AsPlaintext -Force) -Path "OU=$abteilung,OU=Kernabteilungen,DC=domain,DC=local"}  
}
Alle Optionen für New-ADuser kannst du hier nachschlagen:
http://technet.microsoft.com/de-de/library/ee617253.aspx

Powershell ist die Zukunft, ich würde mich daher eher damit beschäftigen, anstatt noch die alten Batch Befehle zu nutzen face-wink

Gruß jodel32