Folgenden Artikel habe ich für das Online-Magazin Hakin9 geschrieben.

Manuelle und automatisierte Administration einer Active Directory Domäne und Grundlagen der Gruppenrichtlinien


Einleitung

Kaum ein größeres Unternehmen kommt heutzutage noch ohne ein komplexes Computernetzwerk aus. Die Überwachung, Steuerung und Verwaltung eines solchen Netzwerkes erfordert neben dem umfangreichen Fachwissen des verantwortlichen IT-Administrators auch ein elaboriertes Netzwerksystem. In diesem Artikel wird die grundlegende Administration eines Windows Netzwerkes basierend auf einer Active Directory Domäne erklärt und veranschaulicht.

In diesem Artikel erfahren Sie…

  • Grundlegendes zu Active Directory Domänen,
  • wie Sie mit einem beliebigen Client die Domäne administrieren können,
  • welche Objekte mit welchen Einstellungen enthalten sind,
  • welche administrativen Tools zur Vergügung stehen und
  • welche Möglichkeiten Gruppenrichtlinien in einer Domäne bieten.

Was Sie vorher wissen sollten…

  • Eine bestehende Active Directory Domäne ist nützlich, weil praxisnahe Tipps jederzeit nachvollzogen werden können.

Inhalt

  • Seite 1: Das Active Directory
  • Seite 1: Administrationstools einrichten
  • Seite 3: Domänenadministration – Namenskonvention
  • Seite 3: Domänenadministration – Objekte und Struktur
  • Seite 4: Grafische Darstellung der Domänenstruktur
  • Seite 4: Domänenadministration – automatisierte Administration
  • Seite 4: Abfragen mit CSVDE
  • Seite 5: Abfragen mit PowerShell
  • Seite 6: Gruppenrichtlinien – Überblick
  • Seite 7: Gruppenrichtlinien – Einstellungen

Download

Dieser Artikel erschien in der Hakin9 Ausgabe 8/2011. Da es mein Artikel ist stelle ich ihn aber auch seperat zur Verfügung.
Download -> Hakin9 8/2011
Download -> nur der Artikel

Gewinnspiel

Hakin9 verkündete gerade im Newsletter ein Gewinnspiel, hier der Auszug:
Beantworten Sie nur unsere Frage: Aus welchem Artikel kommt der u.a. Satz?
Die Namenskonventionen sollten die hierarchischen Ebenen verdeutlichen, diese sind somit allein aufgrund des Namens in die Struktur exakt einzuordnen.
Die ersten fünf Personen, die die richtige Antwort zuschicken, bekommen von uns das Buch von Sachar Paulus „Basiswissen Sichere Software“.
Sie sollen nennen: die Ausgabe, den Autor, den Titel, die Seite.
Die Antwort schicken Sie an karolina.sokolowska@software.com.pl an, aber erst ab 17.08.2011, ab 10 Uhr.
Ich machs euch mal leicht, hier die Antwort für meine Leser 😉: dieser Satz stammt aus meinem Artikel, Ausgabe 8/2011, Seite 18. Schreibt der Dame morgen früh eine Mail und holt euch das Buch zum Thema Sichere Software.

.vbs und .wsf Fehler

Folgende Fehler haben mich jetzt echt lange aufgehalten:

.vbs per Doppelklick:
Skriptmodul „VBScript“ für Skript „C:\test.vbs“ wurde nicht gefunden.
Can’t find script engine „VBScript“ for script „C:\test.vbs“.

.vbs per CMD:
CScript-Fehler: Skriptmodul „VBScript“ für Skript „C:\test.vbs“ wurde nicht gefunden.

.wsf:
Immer ein Fehler in Zeile 0.


6 Lösungsmöglichkeiten!

1)
Die einfachste Lösung, die auf so ziemlich jeder Internetseite steht, ist ein Set aus 3 CMD Befehlen:

regsvr32.exe VBScript

,

regsvr32.exe jscript.dll

und/oder

regsvr32.exe jscript.dll

. Darauf folgt jeweils ein Popup, die Komponente sei erfolgreich registriert werden o.Ä.

2)
Von diesen 6 hier präsentierten Lösungsmöglichkeiten hat nur dieser hier bei mir funktioniert, also, lesen!
In der Registry wurde dieser Schlüssel

HKEY_CLASSES_ROOT\CLSID\{B54F3741-5B07-11cf-A4B0-00AA004A55E8}\InprocServer32

von einem Antivirensystem modifiziert.

Dem (Standard) Key wurde folgender Wert zugewiesen:

C:\\Program Files\\Common Files\\McAfee\\SystemCore\\ScriptSn.20110513152421.dll

und keine Änderungen waren ohne Weiteres erlaubt. Deswegen konnte regsvr32 diesen Key nicht updaten.

Also Rechtsklick auf InprocServer32 -> Berechtigungen und dem aktuellem Nutzer oder Jeder Vollzugriff geben. Den Wert auf

C:\Windows\system32\vbscript.dll

setzen und die Berechtigungen wieder normalisieren.

Fertig! Ein Hoch auf die einzigen 2 Webseiten im Netz auf denen ich diesen Lösungsansatz gefunden habe: 1 und 2 !

3)
Schaut in eurem Windows\system32\ Ordner nach der vbscript.dll. Merkt euch Dateigröße; die exakte Größe in Bytes(!) findet ihr in den Eigenschaften der Datei. Schaut auf einem Vergleichssystem (selbes OS, funktionierendes VBScript) nach dieser Datei und vergleicht Größe und Daten. Wenn sie auffällig unterschiedlich sind ersetzt ihr die Datei auf dem fehlerhaften System mit der Datei auf dem fehlerfreien System (selber OS!). Wiederholt Schritt 1).
Downloadet euch alternativ Windows Script 5.7, entpackt die .exe und nutzt die darin enthaltenen .dll Dateien. Allerdings ist der Download nur für Windows XP Systeme, keine Garantie, dass das funktioniert!

4)
In den Internet Optionen kann man im Scripting Bereich noch die 2 Einstellungen von Active Scripting and Java Applets überprüfen, sollten beide Enabled sein.

5)
Mir fiel noch ein Tool aus meinem vorletzten Windows 7 Seminar ein: sfc.exe! Das System File Checker Programm scannt alle wichtigen Systemdateien nach Änderungen und kann korrupte Dateien auf den Standard wiederherstellen. Dafür nutzt es die Windows Resource Protection, die Änderungen an Systemdateien mit speziellen DACLs und ACLs erkennt.
Also:

sfc.exe /scannow

und abwarten. Möglicherweise werden keine „Integritätsverletzungen“ festgestellt, möglicherweise wurden welche festgestellt und konnten behoben werden, vielleicht wurden auch welche festgestellt und konnten nicht behoben werden.
Dann hilft der Befehl

findstr /c:"[SR]" %windir%\logs\cbs\cbs.log >sfcdetails.txt

um alle nicht reparierbaren Fälle in eine neue .txt Datei zu filtern.

Mehr zu sfc

6)
Windows XP User können testweise Windows Script neu installieren. „Windows Script 5.7“ für Windows XP gibt es hier als Download. Windows Vista/7 Nutzer brauchen es gar nicht erst zu probieren, die Installation lässt sich auch mit Kompatibilitätseinstellungen nicht durchführen.
Aber die .exe kann man mit fähigen Programmen entpacken. Enthalten sind viele wichtige .dll und .exe Dateien, die nützlich sein könnten.

Ich hoffe einer dieser Tipps hat für euch funktioniert und eure .vbs und .wsf Scripte funktionieren wieder. Bei mir hat Punk 3) zumindest für beide Scripttypen die Lösung gebracht.

Ich bin vielleicht nicht der einzige und letzte Admin, der GIMP im Netzwerk silent, mit Logs via Batch installieren möchte. Also halte ich das hier kurz fest.

Ziel:

GIMP 2.6.11 soll in einer Domäne via Batch Startscript installiert werden, ohne dass der Nutzer etwas davon mitbekommt und diese Installation beeinflussen (z.B. verhindern) kann. Dabei sollen Logs erstellt werden. Für jeden ausführenden Computer wird eine Logdatei erstellt und falls auf einem Computer die Installation fehlschlägt wird zusätzlich eine ausführliche Logdatei der GIMP Installation zur Verfügung stehen.
Zusätzlich wird die Verteilung mit Hilfe von Clientfiltern gesteuert (natürlich optional).

Zuerst die coolste Info:

gimp-installer.exe /?

Die GIMP Entwickler haben eine Dokumentation zu Parametern, Fehlercodes und anderen Optionen in den Installer gepackt. Daraus lässt sich eine zuverlässige Installation basteln.

Die installer.bat:

@echo off
cls
title GIMP Installer
set wd=\\huiqb38c.user.hu-berlin.de\IQBInstitut\System\Sonstiges\GIMP
set chkd=\\huiqb38c.user.hu-berlin.de\IQBInstitut\System\Sonstiges\GIMP\checkdirs\%computername%
set log=\\huiqb38c.user.hu-berlin.de\IQBInstitut\System\Sonstiges\GIMP\logs\%computername%.txt
:: predef vars
set done=0
set gimpel=9999
set /a run=0

if exist %chkd% set done=1 & goto end

REM Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto install
goto end

REM Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
::for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end

:install
set /a run=%run%+1
if "%run%"=="2" echo %date% %time% - Zweiter Versuch >> %log%
echo %date% %time% - Installation startet >> %log%
%wd%\gimp2611.exe /verysilent /norestart /nocancel /suppressmsgboxes /restartexitcode=3010 /log="%log%.log" /mergetasks="!desktopicon"
set gimpel=%errorlevel%

if "%gimpel%"=="0" md %chkd% & del /f /q %log%.log & echo %date% %time% - Installation erfolgreich abgeschlossen >> %log%
:: if "%gimpel%"=="3010" md %chkd% & del /f /q %log%.log & shutdown -r -f -t 120 -c "Um die GIMP Installation erfolgreich abzuschliessen muss der Computer neugestartet werden. Der Computer wird in 120 Sekunden neugestartet!"
if "%gimpel%"=="3010" md %chkd% & del /f /q %log%.log & echo %date% %time% - Installation abgeschlossen, 3010 - Restart eigentlich notwendig. >> %log%
if "%run%"=="2" echo %date% %time% # 2. Installationsversuch ebenfalls fehlgeschlagen, Fehlercode %gimpel% >> %log% & goto end
if "%gimpel%"=="1" echo %date% %time% # EL 1 - Initialisierung fehlgeschlagen, warte 600 Sekunden... >>%log% & ping 127.0.0.1 -n 600 >>nul & goto install
if "%gimpel%"=="2" echo %date% %time% # EL 2 - Abbruch durch den User, warte 600 Sekunden... >>%log% & ping 127.0.0.1 -n 600 >>nul & goto install
if "%gimpel%"=="4" echo %date% %time% # EL 4 - Install Error, warte 600 Sekunden... >>%log% & ping 127.0.0.1 -n 600 >>nul & goto install
if "%gimpel%"=="5" echo %date% %time% # EL 5 - Install Error, warte 600 Sekunden... >>%log% & ping 127.0.0.1 -n 600 >>nul & goto install
if "%gimpel%"=="9999" echo %date% %time% # hier ist etwas schief gelaufen... >> %log%

:end
if "%done%"=="1" echo %date% %time% - Bereits installiert >> %log%

Anpassungen:

In Zeile 4-6 natürlich die Serverpfade anpassen.
Der Clientfilter (siehe Zeile 14 bis 19) ist natürlich optional. Aktiviert Zeile 15 und 16 oder Zeile 19 für den gewünschten Effekt.
Je nach Clientfilter ist noch eine allowedPCs.txt oder eine deniedPCs.txt nötig. In dieser steht pro Zeile 1 Computername.
Die Parameter des Installers in Zeile 25 können selbstverständlich den eigenen Bedürfnissen angepasst werden. Siehe dazu die

installer.exe /?

Dokumentation (siehe oben).
Zeile 29 und 30 behandeln den Fall, wenn der Installer nach der Installation neustarten möchte. Zeile 29 startet den Rechner dann nach 2 Minuten automatisch neu und zeigt vorher eine Meldung an. Zeile 30 ignoriert das Verhalten und trägt es nur vollständigkeitshalber in die Logdatei ein.

Logs und Checkdirs:

Der Installer legt im Ordner \logs\ für jeden ausführenden Computer 1 Logdatei ab. Diese enthält bei einer erfolgreichen Installation beispielsweise folgenden Inhalt:
01.08.2011 18:14:01,26 – Installation startet
01.08.2011 18:15:26,59 – Installation erfolgreich abgeschlossen

Schlägt die Installation fehl wird in diesem Ordner eine zusätzliche Datei [computername].txt.log zur Verfügung stehen, in der ausführliche Debug Informationen des Installers gelistet sind. Zusätzlich steht in der [computername].txt eine Kurzbeschreibung des Fehlers.

Anhand des Checkdirs erkennt das Script, ob es bereits ausgeführt wurde. Dieses leere Verzeichnis wird nur bei den Fehlercodes 0 (erfolgreich) und 3010 (erfolgreich mit Neustart) erstellt.

Sowohl für die Logs als auch für die Checkdirs muss das ausführende Objekt Schreibzugriff auf diesen Serverordner haben. Beim Startscript das Computerobjekt, beim manuellen Ausführen das Benutzerobjekt.

Der meistbesuchteste Beitrag meines Blog ist praktisch seit Anbeginn des Posts: „Windows XP inkl. SATA Treiber erstellen – XP ISO Builder
Auch jetzt noch erreicht er fast täglich die meisten Besucherzahlen.

Auch ich habe am Wochenende mit meinem Beitrag gearbeitet. Auf meinem Tisch stand ein Thinkpad T60. Dieser sollte mit Windows XP bespielt werden und damit es – wie so oft im Leben – nicht zu einfach wird kam bei der Windows Installation natürlich dieser Output:

Es konnten keine installierten Festplattenlaufwerke gefunden werden.
Stellen Sie sicher, dass alle Festplattenlaufwerke eingeschaltet und richtig mit dem Computer verbunden sind
[…]“

Na gut, dann wollen wir mal.

Diesen Thinkpad T60 neugestartet, Windows XP CD in eingelegt, Winfuture XP ISO Builder heruntergeladen, Windows CD eingelesen (wird lokal kopiert) und die einzelnen Schritte durchgegangen.

Wichtig wird es jetzt bei den Controllertreibern, die bei der Windows XP Installation die Festplatten erkennen sollen. Benötigt wird eine txtsetup.oem, die irgendwelche Treiber enthält.
Okay, auf der Thinkpad Support Seite des Thinkpad T60 Models gibt es im „Hard Drive“ Bereich einen „Intel Matrix Storage Manager“. Dieser wird bestimmt alle Festplattentreiber beinhalten.
Heruntergeladen, entpackt, tatsächlich eine txtsetup.oem enthalten. Zusätzlich dazu habe ich noch den Festplattentyp des T60 herausgefunden und auf der Herstellerseite noch ein 2. Paket geladen und ebenfalls hinzugefügt.
Resultat:

Treiber rein, Winfuture Update Pack rein, Windows Einstellungen gemacht, das ganze HickHack halt. ISO erstellt, gebrannt und rein in den T60.

Reboot und:

Eine Windows XP mit Treibern, Einstellungen und Updates. Mal wieder erweist sich der XP ISO Builder als ein Wundertool!

Ziel: Aus einem Batch Script E-Mails verschicken können ohne vorher Programme installieren oder konfigurieren zu müssen.
Extra: 1-Zeiler

Lösung:
Aus dem Script einen PHP Webmailer fernsteuern. Wenn die Ansprüche nicht zu hoch sind ist diese Lösung in 2, 3 Minuten einsatzbereit und absolut ausreichend.
Einzige Voraussetzung ist hierbei natürlich ein PHP fähiger Webserver. Auf den (Windows) Clients sind keine weiteren Anforderungen gegeben.

Voraussetzung: PHP fähiger Webserver für den Mailer und eine Internetverbindung am Client

Scriptbeispiel:

start "iexplore" "http://php.webserver.de/webmailer.php?submitcode4f3d2s1a&contactname=Testserver 110&subject=Backup fehlgeschlagen&email=edv@iqb.hu-berlin.de&message=Das NAS Backup ist fehlgeschlagen&mailto=hannes.schurig@online.de"

PHP Mailer Code:

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

<?php
$sendMailFeedback = "";
 
if (isset($_GET['submitcode44gf902jd284'])) {
 
    if (trim($_GET['contactname']) == '') { 
			$sendMailFeedback = "no contact name"; 
		} else { 
			$name = trim($_GET['contactname']); 
		}
 
    if (trim($_GET['subject']) == '') { 
			$sendMailFeedback = "no subject";
		} else {
      $realsubject = trim($_GET['subject']);
      $subject = 'PHP Mailer: "'.$realsubject.'"'; 
    }
 
    if (trim($_GET['email']) == '')  { 
			$sendMailFeedback = "no email";
		} else if (!preg_match("/[a-z0-9._+-]*@[a-z0-9._+-]+/", trim($_GET['email']))) { 
			$sendMailFeedback = "no valid email"; 
		} else { 
			$email = trim($_GET['email']); 
		}
 
    if (trim($_GET['message']) == '') { 
			$sendMailFeedback = "no message"; 
		} else {
        if (function_exists('stripslashes')) { 
					$comments = stripslashes(trim($_GET['message'])); 
				} else { 
					$comments = trim($_GET['message']); 
				} 
		}
 
    if ($sendMailFeedback=="") {
        $emailTo = $_GET['mailto'];
        $datum = date("d.m.Y",$timestamp);
        $uhrzeit = date("H:i",$timestamp);
        $body = "\n###############\nPHP Mailer\n###############\n\nVersendet am $datum um $uhrzeit Uhr\nAn: $emailTo \nVon: $name \nEmail: $email \nBetreff: $realsubject \n\nText:\n$comments";
        $headers = 'From: PHP Mailer <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;
 
        mail($emailTo, $subject, $body, $headers);
        $sendMailFeedback = "success";
    }
} else {
	$sendMailFeedback = "submitcode missing or wrong";
}
echo $sendMailFeedback;
?>

Erläuterung:
Das Batch Script startet den Internet Explorer (bzw. den als Standard eingestellten Browser) mit einer URL als Parameter, die dann also aufgerufen wird.
Da der Prozess

iexplore

angesprochen wird sollte es ein Windows PC mit installiertem Internet Explorer sein. Computer ohne IE oder mit anderem OS müssen den Pfad zu einem Browser einsetzen, der URLs per Parameter annimmt und aufruft.

Die URL ruft das PHP Script auf, das ihr vorher auf einen Webserver geparkt habt.
Mein erster Parameter ist so etwas wie ein Passwort. Damit nicht jeder im Web diesen Webmailer einfach so gebrauchen kann wird im PHP Code ganz am Anfang mit

if(isset($_GET['submitcode4f3d2s1a'])) {

überprüft, ob ein bestimmter Parameter gesetzt ist, den am besten nur ihr wisst und auch anpassen solltet. Ohne diesen Key funktioniert der Webmailer nicht, gibt ihn also nur bedingt weiter.
Alle weiteren Parameter sind beliebig anpassbar, müssen natürlich den GET Abfragen der PHP entsprechen.

Diese Variante ist also recht flexibel. Ihr könnt den Mailer beliebig anpassen, abspecken, aufrüsten usw.

Beispielnutzung: automatisierte Server Backup Batch Lösung

So heißt eine Komponente der neuen Google Anwendung „Google Correlate„.
Google Correlate kann die Aktivität von Suchanfragen grafisch darstellen. So kann man die Häufigkeit und Popularität einer Suchanfrage seit 2004 mit anderen Suchanfragen vergleichen oder kann Suchanfragen mit ähnlicher Aktivität von Google finden lassen.
Intelligente Menschen können aus diesen Zusammenhängen sicher eine Menge machen, für mich ist es erstmal nur grundlegend interessant 😀

Aber noch besser: „Search by Drawing“
Ihr braucht Suchbegriffe, Events oder andere Dinge mit einer ganz bestimmten zeitlichen Aktivität? Ein Suchbegriff, der Anfang 2005 aktiv war, dann erst Mitte 2009 wieder aufkam und nach 2010 nie wieder gesehen wurde? Google findet es 🙂
Malt selber eine Aktivitätskurve und Google ermittelt Suchbegriffe, die diese Kurve hatten, so gut es geht.

via

In so ziemlich jedem Unternehmen wird

net use

verwendet um Netzlaufwerke zu verbinden. Mit

net use /delete

lassen sich Netzlaufwerke trennen. Fast immer werden diese Befehle im Hintergrund ausgeführt, ohne, dass der Benutzer das mitkriegen soll.
Schlecht wäre es also, wenn das Script hängen bleibt und auf Benutzereingaben wartet.

Wie zum Beispiel hier:

Die Lösung:
Es gibt einen undokumentierten Parameter, der das Löschen erzwingt.

net use x: /delete /yes

via