Difference between revisions of "Windows Server 2008"

From Blue-IT.org Wiki

(Time Server)
 
(7 intermediate revisions by the same user not shown)
Line 25: Line 25:
  
 
= AD User export / import =
 
= AD User export / import =
Option Explicit
+
 
'****************************************************
+
Many thanks to T. Hopf.
'Variablen Deklaration
+
 
'****************************************************
+
'''WARNING: The script will alter you AD without any prompts! Be shure to know what you are doing!'''
Dim fso, f, Zeile, Feld, Counter
+
 
Const DateiName="ad_exportierte_benutzerliste.txt" ' File mit den Benutzern
+
Therefore three files are necessary laying in the same directory:
Const Passwort = "geheimespasswort"
+
 
Const Domain = "domänenname"
+
=== 1. Export a list of users from the Active Directory ===
Const TopLeveldomain = "toplevel_postfix"
+
and save it as: '''user.txt'''
Const OU = "Organisationseinheit"
+
 
Const ProfilPfad = "\\PDC\sharename$\"
+
=== 2. Save this as '''ChangePWonLogon.vbs''' ===
'****************************************************
+
@echo off
'ZugriffsMethode
+
net user %1 /logonpasswordchg:yes
'1 = Lesen
+
 
'2 = Schreiben
+
=== 3. Save this as '''import_users.vbs''' ===
'8 = Anhaengen
+
Option Explicit
'****************************************************
+
'****************************************************
Const Zugriff=1 ' Nur zum lesen
+
'Variablen Deklaration
call BenutzerEinlesen()
+
'****************************************************
'*****************************************************************
+
Dim fso, f, Zeile, Feld, Counter
'Unterfunktion zum einlesen der Benutzer
+
Const DateiName="ad_exportierte_benutzerliste.txt" ' File mit den Benutzern
'*****************************************************************
+
Const Passwort = "geheimespasswort"
 +
Const Domain = "domänenname"
 +
Const TopLeveldomain = "toplevel_postfix"
 +
Const OU = "Organisationseinheit"
 +
Const ProfilPfad = "\\PDC\sharename$\"
 +
'****************************************************
 +
'ZugriffsMethode
 +
'1 = Lesen
 +
'2 = Schreiben
 +
'8 = Anhaengen
 +
'****************************************************
 +
Const Zugriff=1 ' Nur zum lesen
 +
call BenutzerEinlesen()
 +
'*****************************************************************
 +
'Unterfunktion zum einlesen der Benutzer
 +
'*****************************************************************
 
  Sub BenutzerEinlesen()
 
  Sub BenutzerEinlesen()
Dim Nachname,Vorname,Name,Benutzer,PrincipalName,Passwort
+
Dim Nachname,Vorname,Name,Benutzer,PrincipalName,Passwort
Set fso = CreateObject("Scripting.FileSystemObject")'Objekt zum lesen einer Datei
+
Set fso = CreateObject("Scripting.FileSystemObject")'Objekt zum lesen einer Datei
Counter=0
+
Counter=0
'Testet ob Datei vorhanden
+
'Testet ob Datei vorhanden
If fso.FileExists(DateiName) Then
+
If fso.FileExists(DateiName) Then
Set f = fso.OpenTextFile (DateiName,Zugriff,false)'Oeffnet die Datei
+
Set f = fso.OpenTextFile (DateiName,Zugriff,false)'Oeffnet die Datei
'Schleife die alle Benutzer in ein Array liesst
+
'Schleife die alle Benutzer in ein Array liesst
Do while not f.AtEndOfLine
+
Do while not f.AtEndOfLine
Zeile = f.readLine
+
Zeile = f.readLine
Feld = split(Zeile,",")
+
Feld = split(Zeile,",")
Nachname = Feld(0)'Vorname
+
Nachname = Feld(0)'Vorname
Vorname = Feld(1)'Nachname
+
Vorname = Feld(1)'Nachname
Name = Feld(2)'Voller Name
+
Name = Feld(2)'Voller Name
PrincipalName=Feld(3)'VollQualifizierterName
+
PrincipalName=Feld(3)'VollQualifizierterName
Benutzer = Feld(4)'Anmeldename
+
  Benutzer = Feld(4)'Anmeldename
Counter=Counter+1
+
Counter=Counter+1
'Ruft Funkktion zum Schreiben der Benutzer in das AD Objekt auf
+
'Ruft Funkktion zum Schreiben der Benutzer in das AD Objekt auf
Call BenutzerAnlegen(Benutzer,Vorname,Nachname,PrincipalName,Name)
+
Call BenutzerAnlegen(Benutzer,Vorname,Nachname,PrincipalName,Name)
Loop
+
Loop
f.Close'SChliesst die Datei
+
f.Close'SChliesst die Datei
Else
+
Else
WScript.Echo ("Datei ist nicht vorhanden")
+
WScript.Echo ("Datei ist nicht vorhanden")
End If
+
End If
 
  End Sub
 
  End Sub
 
   
 
   
Line 77: Line 92:
 
  '*****************************************************************
 
  '*****************************************************************
 
  Sub BenutzerAnlegen(Benutzer,Vorname,Nachname,PrincipalName,Name)
 
  Sub BenutzerAnlegen(Benutzer,Vorname,Nachname,PrincipalName,Name)
'On Error Resume Next
+
'On Error Resume Next
'****************************************************
+
'****************************************************
'Variablen Deklaration
+
'Variablen Deklaration
'****************************************************
+
'****************************************************
Dim ouo, b, LDAPPfad
+
Dim ouo, b, LDAPPfad
LDAPPfad="LDAP://OU=" & OU & ",DC=" & Domain & ",DC=" & TopLeveldomain
+
LDAPPfad="LDAP://OU=" & OU & ",DC=" & Domain & ",DC=" & TopLeveldomain
'****************************************************
+
'****************************************************
'Setzt den LDAP Pfad
+
'Setzt den LDAP Pfad
'****************************************************
+
'****************************************************
Set ouo = GetObject(LDAPPFAD)
+
Set ouo = GetObject(LDAPPFAD)
Set b = ouo.Create("user", "CN=" & Name)
+
Set b = ouo.Create("user", "CN=" & Name)
'****************************************************
+
'****************************************************
'Zum Aufruf der Bat Datei
+
'Zum Aufruf der Bat Datei
'****************************************************
+
'****************************************************
Dim WshShell, ret
+
Dim WshShell, ret
Set WshShell = WScript.CreateObject("WScript.Shell")
+
Set WshShell = WScript.CreateObject("WScript.Shell")
 
+
'****************************************************
+
'****************************************************
'Schreibt die Benutzer Daten
+
'Schreibt die Benutzer Daten
'****************************************************
+
'****************************************************
b.Put "sAMAccountName", Benutzer
+
b.Put "sAMAccountName", Benutzer
b.Put "displayName", Name
+
b.Put "displayName", Name
b.Put "givenName", Vorname
+
b.Put "givenName", Vorname
b.Put "sn", Nachname
+
b.Put "sn", Nachname
b.Put "userAccountControl", 66082 And Not 65536
+
b.Put "userAccountControl", 66082 And Not 65536
b.Put "userPrincipalName", PrincipalName
+
b.Put "userPrincipalName", PrincipalName
b.Put "profilePath", ProfilPfad & Benutzer
+
b.Put "profilePath", ProfilPfad & Benutzer
b.Put "pwdLastSet",0
+
b.Put "pwdLastSet",0
b.SetInfo
+
b.SetInfo
b.SetPassword Passwort
+
b.SetPassword Passwort
b.AccountDisabled = False
+
b.AccountDisabled = False
b.SetInfo
+
b.SetInfo
WScript.Sleep(1000)
+
WScript.Sleep(1000)
'****************************************************
+
'****************************************************
ret = WshShell.Run ("ChangePWonLogon.cmd " & Benutzer)
+
ret = WshShell.Run ("ChangePWonLogon.cmd " & Benutzer)
 
  End Sub
 
  End Sub
 
   
 
   
 
  WScript.Echo(Counter & " Benutzer wurden angelegt !")
 
  WScript.Echo(Counter & " Benutzer wurden angelegt !")
 
  WScript.Quit(0)
 
  WScript.Quit(0)
 +
 +
[[Category:Windows Server]]

Latest revision as of 20:18, 8 January 2012

Time Server

Setting the primary domain controller to use an internet timeserver:

echo Setting timeserver
REM w32tm /config /manualpeerlist:ptbtime1.ptb.de /syncfromflags:manual /reliable:yes /update

w32tm /config /manualpeerlist:"ptbtime1.ptb.de ptbtime2.ptb.de ptbtime3.ptb.de de.pool.ntb.org" /syncfromflags:manual /reliable:yes
w32tm /config /update

net stop w32time
REM w32tm /unregister
REM w32tm /register
net start w32time

echo Send time to clients
w32tm /resync

w32tm /monitor

net time

If you have an environment with more than one machine, you can set a local server (e.g. the primary domain controller) as ntp server:

w32tm /config /manualpeerlist:"192.168.x.x ptbtime1.ptb.de ptbtime2.ptb.de ptbtime3.ptb.de de.pool.ntb.org" /syncfromflags:manual /reliable:yes

AD User export / import

Many thanks to T. Hopf.

WARNING: The script will alter you AD without any prompts! Be shure to know what you are doing!

Therefore three files are necessary laying in the same directory:

1. Export a list of users from the Active Directory

and save it as: user.txt

2. Save this as ChangePWonLogon.vbs

@echo off
net user %1 /logonpasswordchg:yes

3. Save this as import_users.vbs

Option Explicit
'****************************************************
'Variablen Deklaration
'****************************************************
Dim fso, f, Zeile, Feld, Counter
Const DateiName="ad_exportierte_benutzerliste.txt" ' File mit den Benutzern
Const Passwort = "geheimespasswort"
Const Domain = "domänenname"
Const TopLeveldomain = "toplevel_postfix"
Const OU = "Organisationseinheit"
Const ProfilPfad = "\\PDC\sharename$\"
'****************************************************
'ZugriffsMethode
'1 = Lesen
'2 = Schreiben
'8 = Anhaengen
'****************************************************
Const Zugriff=1 ' Nur zum lesen
call BenutzerEinlesen()
'*****************************************************************
'Unterfunktion zum einlesen der Benutzer
'*****************************************************************
Sub BenutzerEinlesen()
	Dim Nachname,Vorname,Name,Benutzer,PrincipalName,Passwort
	Set fso = CreateObject("Scripting.FileSystemObject")'Objekt zum lesen einer Datei
	Counter=0
	'Testet ob Datei vorhanden
	If fso.FileExists(DateiName) Then
		Set f = fso.OpenTextFile (DateiName,Zugriff,false)'Oeffnet die Datei
		'Schleife die alle Benutzer in ein Array liesst
		Do while not f.AtEndOfLine
			Zeile = f.readLine
			Feld = split(Zeile,",")
			Nachname = Feld(0)'Vorname
			Vorname = Feld(1)'Nachname
			Name = Feld(2)'Voller Name
			PrincipalName=Feld(3)'VollQualifizierterName
 			Benutzer = Feld(4)'Anmeldename
			Counter=Counter+1
			'Ruft Funkktion zum Schreiben der Benutzer in das AD Objekt auf
			Call BenutzerAnlegen(Benutzer,Vorname,Nachname,PrincipalName,Name)
		Loop
		f.Close'SChliesst die Datei
	Else
		WScript.Echo ("Datei ist nicht vorhanden")
	End If
End Sub

'*****************************************************************
'Unterfunktion zum erstelllen der Benutzer
'*****************************************************************
Sub BenutzerAnlegen(Benutzer,Vorname,Nachname,PrincipalName,Name)
	'On Error Resume Next
	'****************************************************
	'Variablen Deklaration
	'****************************************************
	Dim ouo, b, LDAPPfad
	LDAPPfad="LDAP://OU=" & OU & ",DC=" & Domain & ",DC=" & TopLeveldomain
	'****************************************************
	'Setzt den LDAP Pfad
	'****************************************************
	Set ouo = GetObject(LDAPPFAD)
	Set b = ouo.Create("user", "CN=" & Name)
	'****************************************************
	'Zum Aufruf der Bat Datei
	'****************************************************
	Dim WshShell, ret
	Set WshShell = WScript.CreateObject("WScript.Shell")

	'****************************************************
	'Schreibt die Benutzer Daten
	'****************************************************
	b.Put "sAMAccountName", Benutzer
	b.Put "displayName", Name
	b.Put "givenName", Vorname
	b.Put "sn", Nachname
	b.Put "userAccountControl", 66082 And Not 65536
	b.Put "userPrincipalName", PrincipalName
	b.Put "profilePath", ProfilPfad & Benutzer
	b.Put "pwdLastSet",0
	b.SetInfo
	b.SetPassword Passwort
	b.AccountDisabled = False
	b.SetInfo
	WScript.Sleep(1000)
	'****************************************************
	ret = WshShell.Run ("ChangePWonLogon.cmd " & Benutzer)
End Sub

WScript.Echo(Counter & " Benutzer wurden angelegt !")
WScript.Quit(0)