Auf dieser Seite finden Sie einige Beispiele für Batchdateien + VBS-Scripte, die in erster Linie als Anregung / Hilfe bei der Erstellungen von eigenen Scripten dienen sollen. Einige Scripte sind inzwischen etwas überholt, da es inzwischen einfachere Wege gibt, um zum gleichen Ziel zu kommen, andere Scripte sind aber durchaus praxistauglich und nützlich.

Download + Einsatz selbstverständlich auf eigene Gefahr!

 

==========================================================================

\Systemtools\GetPatchDates.cmd (14.02.2004 12:22:40)

==========================================================================

 

@echo off

REM GetPatchDates.cmd / Stand: 13.02.04

REM Funktion:

REM     Liste der installierten Patches + Installationsdatum erstellen.

set Tempdatei=c:\temp\%~n0.tmp

set Ausgabedatei=\\server\freigabe\Verteilung\Logs\PCs\%computername%-InstalledPatches.txt

regedit /a "%Tempdatei%" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates"

    REM = alle Updates, auch IE, MediaPlayer etc.

 

REM Oder nur Windows-Updates:

REM regedit /a "%Tempdatei%" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows 2000"

REM     REM Versuchen, den Windows2000-Schlüssel zu exportieren

REM if not exist %Tempdatei% regedit /a "%Tempdatei%" "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP"

REM     REM Falls erfolglos, den entsprechenden WindowsXP-Schlüssel exportieren

 

findstr "InstalledDate HKEY" %Tempdatei% | find /v /i "filelist" >%Ausgabedatei%

    REM Ausgabe z.B.:

    REM     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP2\Q819696]

    REM     "InstalledDate"="9/4/2003"

    REM     ...

 

==========================================================================

\Systemtools\LogMacAdr.cmd (14.02.2004 12:27:56)

==========================================================================

 

@echo off

REM LogMacAdr.cmd / Stand: 10.02.04 / Br

REM Funktion:

REM     Mac-Adresse des aktuellen PCs ermitteln und in die entsprechende

REM     Ini-Datei eintragen

REM Voraussetzungen:

REM   - ab Windows 2000 werden Datum + Zeit mit ausgegeben

REM   - verwendet das Tool GetMac.exe (W2K Resource Kit) im Toolsverzeichnis

 

set ToolsVerzeichnis=\\server\freigabe\Verteilung\Tools

set MacAdrIniDatei2=\\\\server\\freigabe\\Verteilung\\Logs\\Allg\\MacAdressen.ini

    REM für AutoIt.exe wird der Pfad mit doppeltem Backslash benötigt (s.u.)!

 

for /f "tokens=* delims= " %%a in ('%Toolsverzeichnis%\getmac.exe') do call :CheckLine %%a

    REM Ausgabe des GetMac-Befehls z.B.:

    REM     Transport Address  Transport Name

    REM     -----------------  --------------

    REM     00-00-00-00-00-00  \Device\NetbiosSmb

    REM     00-30-84-6D-E1-BD  \Device\NetBT_Tcpip_{6B203555-801C-4BBB-9A80-ED77851FFE89}

    REM     00-30-05-26-60-7C  \Device\NetBT_Tcpip_{A6A333E8-096B-4F3D-906E-410C058F6E1D}

    REM Die erste Mac-Adresse, die nicht aus Nullen besteht, ist die primäre

    REM (vgl. Systemsteuerung - Netzwerk - Menü "Erweitert")

set Abschnitt=MacAdressen

set Einstellung=%Computername%

set Wert=%MACAdresse%=%username%=%date:~-10% %time:~0,5%

"%ToolsVerzeichnis%\autoit" /c "IniWrite, %Wert%, %MacAdrIniDatei2%, %Abschnitt%, %Einstellung%"

    REM Format der INI-Datei:

    REM     [MacAdressen]

    REM     <Computername>=<Mac-Adresse>=<Benutzername>=<Datum> <Zeit>

 

goto :EOF

 

:CheckLine

    set /a Zeilennummer="Zeilennummer+1"

    if %Zeilennummer%_==4_ set MACAdresse=%1

    goto :EOF

 

 

==========================================================================

\Systemtools\GetLastPatchDate.cmd (14.02.2004 12:24:12)

==========================================================================

 

@echo off

REM GetLastPatchDate.cmd / Stand: 10.02.04

REM Funktion:

REM     Ermittelt das Datum, an dem das letzte Windows Update installiert wurde

REM     und schreibt dieses zusammen mit der Beschreibung des Updates in die

REM     u.g. INI-Datei.

set Tempdatei=c:\temp\%~n0.log

set ToolsVerzeichnis=\\server\freigabe\Verteilung\Tools

set IniDatei=\\server\freigabe\Verteilung\Logs\Allg\LastPatchDate.ini

set IniDatei2=\\\\server\\freigabe\\Verteilung\\Logs\\Allg\\LastPatchDate.ini

    REM für AutoIt.exe wird der Pfad mit doppeltem Backslash benötigt (s.u.)!

 

%ToolsVerzeichnis%\psloglist \\%computername% -o "Automatic Updates" -i 19 -n 1 -s -t @ >%Tempdatei%

    REM Letzten Eintrag im Ereignisprotokoll auslesen, der als

    REM Quelle "Automatic Updates" und Event ID 21 enthält.

    REM Ausgabe z.B.:

    REM     2664|System|Automatic Updates|INFORMATION|R1178|Wed Feb 04 12:41:27 2004|21|None|KB123456 installiert

for /f "tokens=6,9 delims=@" %%a in (%Tempdatei%) do (

    set PatchDate=%%a

    set PatchText=%%b

)

set Tag=%PatchDate:~8,2%

set Monat=%PatchDate:~4,3%

set Jahr=%PatchDate:~20,4%

set Uhrzeit=%PatchDate:~11,8%

set PatchDate=%Tag%.%Monat%.%Jahr% %Uhrzeit%

 

set Abschnitt=LastPatchDate

set Einstellung=%Computername%

set Wert=%PatchDate%=%username%=%date:~-10% %time:~0,5%=%PatchText%

"%ToolsVerzeichnis%\autoit" /c "IniWrite, %Wert%, %IniDatei2%, %Abschnitt%, %Einstellung%"

    REM Format der INI-Datei:

    REM     [LastPatchDate]

    REM     <Computername>=<PatchDatum>=<Benutzername>=<Aktuelles Datum>=<PatchBeschreibung>

 

 

==========================================================================

\Systemtools\GetRemotePatches.cmd (14.02.2004 12:23:32)

==========================================================================

 

@echo off

REM GetRemotePatches.cmd / Stand: 13.02.04

set ToolsVerzeichnis=\\server\freigabe\Verteilung\Tools

set SysToolsVerzeichnis=\\server\freigabe\System\Systemtools

 

echo.

echo Auf welchem Computer sollen die installierten Patches abgefragt werden?

echo.

set /p RemotePC=Bitte geben Sie den Rechnernamen ein:

if %RemotePC%_==_ goto :Abbruch

echo.

%Toolsverzeichnis%\alive /timeout=1 /repeat=1 %RemotePC%

if %Errorlevel% EQU 0 goto :Weiter

echo Der Rechner %RemotePC% ist nicht erreichbar!

pause

goto :EOF

 

:Weiter

echo.

echo Mit welcher Benutzerkennung soll die Abfrage erfolgen (z.B. domäne/administrator)?

echo (Domänen-Benutzer mit lok. Admin-Rechten erforderlich)

set /p ADKennung=Benutzerkennung:

if %ADKennung%_==_ goto :Abbruch

 

%Toolsverzeichnis%\psexec \\%RemotePC% -u domäne\%ADKennung% \\server\freigabe\Verteilung\Tools\GetPatchDates.cmd

start notepad \\server\freigabe\Verteilung\Logs\PCs\%RemotePC%-InstalledPatches.txt

pause

goto :EOF

 

:Abbruch

echo Abbruch durch Benutzer.

pause

goto :EOF

 

 

==========================================================================

\AD-Tools\ExportMemberOf.vbs (19.10.2005 18:39:04)

==========================================================================

 

Option Explicit

' ExportMemberOf.vbs / Stand: 19.10.05 (Br)

' Funktion:

'     Liest alle Gruppenmitgliedschaften eines AD-Objekts aus

'     und schreibt diese in eine Logdatei.

' Aufruf:

'     ExportMemberOf [<samAccountName>] [/q]

' Parameter:

'     <samAccountName> = samAccountName des AD-Objekts, dessen Gruppen-

'                        mitgliedschaften abgefragt werden sollen

'                        (normalerweise der Anmeldename des Benutzers)

'     /q               = Quiet Mode / Bildschirmausgabe wird unterdrückt

Dim objADUser, varGroup, strText, strSamAccountName

Dim varGroupList, strLDAPPfad, objGroup, strNetBIOSDomain

Dim objWSHShell, objFileSystem, strLogdatei, objLogdatei

Dim blnQuietMode, varArgument, strADUserName

 

Const strLDAPPrefix = "LDAP://myDomainController/"

 

blnQuietMode = False

 

For Each varArgument in WScript.Arguments

    If LCase(varArgument) = "/q" Then

        ' QuietMode: Das Ergebnis wird in die Logdatei geschrieben,

        ' diese aber nicht am Bildschirm ausgegeben.

        blnQuietMode = True

    Else

        strSamAccountName = varArgument

    End If

Next

 

If strSamAccountName = "" Then

    ' Kein Name als Parameter übergeben ==> Eingabe durch den Benutzer

    strSamAccountName = InputBox("Bitte geben Sie den Anmeldenamen " _

        & "(samAccountName) des Benutzers/der Gruppe ein, dessen (direkte) " _

        & "Gruppenmitgliedschaften ausgegeben werden sollen:")

End If

If strSamAccountName = "" Then WScript.Quit

 

' z.B. strSamAccountName="MeierE"

strNetBIOSDomain="myDomain"

strLDAPPfad=GetLDAPPath(strSamAccountName, strNetBIOSDomain)

    ' z.B. "CN=Muster\, Manfred,OU=Benutzer,OU=myOrganisation,DC=myDomain,DC=de"

 

Set objADUser = GetObject(strLDAPPrefix & strLDAPPfad)

strADUserName = objADUser.cn

 

Set objWSHShell = CreateObject("WScript.Shell")

Set objFileSystem = CreateObject("Scripting.FileSystemObject")

If strADUserName = strLogdatei Then

    strLogdatei = "\\server\freigabe$\AD-Gruppenmitgliedschaften\" _

        & strSamAccountName & "_" & DateinameUngueltigeZeichenEntfernen( _

        strADUserName) & ".txt"

Else

    strLogdatei = "\\server\freigabe$\AD-Gruppenmitgliedschaften\" _

        & strSamAccountName & ".txt"

End If

Set objLogdatei = objFileSystem.CreateTextFile(strLogdatei)

 

varGroupList = objADUser.Get("memberof")

objLogdatei.WriteLine "Gruppenmitgliedschaften des AD-Objekts " & vbTab _

    & strSamAccountName & vbTab & strADUserName & vbTab & "Stand " & Date & ":"

For Each varGroup In varGroupList

    Set objGroup = GetObject(strLDAPPrefix & varGroup)

    objLogdatei.WriteLine vbTab & objGroup.samAccountName & vbTab _

        & objGroup.distinguishedName

Next

objLogdatei.Close

If blnQuietMode Then

    ' Keine Ausgabe des Ergebnisses am Bildschirm

Else

    ' Logdatei in Notepad anzeigen

    objWSHShell.Run "notepad """ & strLogdatei & """"

End If

 

Set objFileSystem = Nothing

Set objLogdatei = Nothing

Set objGroup = Nothing

Set objADUser = Nothing

Set objWSHShell = Nothing

 

WScript.Quit

 

' ==========================================================================

' Ende des Hauptprogramms

' ==========================================================================

 

Public Function GetLDAPPath(strSamAccountName, strNetBIOSDomain)

' Gibt den LDAP-Pfad zu dem mit SAM-Account-Namen übergebenen AD-Benutzer

' bzw. der AD-Gruppe zurück

' Beispiel:

'       MsgBox GetLDAPPath("MeierE", "mydomain")

'           ' Ausgabe: CN=Meier\, Egon,OU=Benutzer,OU=myOrganisation,DC=myDomain,DC=de

Dim objNetwork, objTranlate

 

' SAM-Account-Namen in LDAP-Namen übersetzen

Set objTranlate = CreateObject("NameTranslate")

objTranlate.Init 1, strNetBIOSDomain

objTranlate.Set 3, strNetBIOSDomain & "\" & strSamAccountName

GetLDAPPath = objTranlate.Get(1)

 

End Function

 

' ==========================================================================

 

Function DateinameUngueltigeZeichenEntfernen(strDateiname)

' Entfernt aus einer Zeichenfolge alle Zeichen, die nicht in einem

' Dateinamen erlaubt sind.

' Beispiel:

'     MsgBox DateinameUngueltigeZeichenEntfernen(" ABC!DE\Fghij:klm/nop*qrs?tuv.xyz")

'         Ausgabe:  ABCDEFghijklmnopqrstuvxyz

Const strUngueltigeZeichen = "!/?*\.:|"

Dim intZaehler

 

For intZaehler = 1 To Len(strUngueltigeZeichen)

    ' Liste der ungültigen Zeichen abarbeiten und - falls im Dateinamen

    ' enthalten - Zeichen aus dem Dateinamen entfernen

    strDateiname = Replace(strDateiname, Mid(strUngueltigeZeichen, intZaehler, 1), "")

Next

DateinameUngueltigeZeichenEntfernen = strDateiname

 

End Function

 

==========================================================================

\AD-Tools\ListNewUsers.cmd (19.10.2005 18:39:26)

==========================================================================

 

@echo off

REM ListNewUsers.cmd / Stand: 19.10.05 (Br)

REM Funktion:

REM     Auflisten aller Benutzer im Active Directory, die nach einem

REM     bestimmten Datum angelegt wurden.

REM Vorausetzungen:

REM     Benötigt adsearch.vbs im Toolsverzeichnis.

 

set Toolsverzeichnis=\\server\freigabe$\Tools

set BatchVerzeichnis=%~dp0

set BatchVerzeichnis=%BatchVerzeichnis:~,-1%

    REM = Verzeichnis, in dem sich diese Batchdatei befindet (ohne abschlieŒenden

    REM   Backslash)

 

color f0

title %~f0

echo.

echo ListNewUsers.cmd - Batchdatei zum Auflisten aller AD-Benutzer, die nach

echo einem bestimmten Datum angelegt wurden.

echo.

echo Bitte geben Sie das gewünschte Datum ein (z.B. 01.08.05):

echo (Enter = Abbruch)

set /p Eingabe=

if %Eingabe%_==_ goto :Ende

set Jahr=%Eingabe:~6,4%

set Monat=%Eingabe:~3,2%

set Tag=%Eingabe:~0,2%

if %Jahr:~2,2%_==_ set Jahr=20%Jahr%

    REM Falls Jahr 2-stellig angegeben wurde, "20" davorschreiben

 

set DatumAb=%Jahr%%Monat%%Tag%

    REM Datum von Format TT.MM.JJJJ ins Format JJJJMMTT umwandeln

 

REM Per LDAP-Abfrage alle Benutzer suchen, die nach 00:00 Uhr GMT des

REM o.g. Datums angelegt wurden, und die Attribute "name" und "samAccountName"

REM ausgeben:

cscript /nologo "%Toolsverzeichnis%\adsearch.vbs" "ldap://OU=Benutzer,OU=MyOrganisation,DC=mydomain,DC=de" /P:name,samAccountName /S:SubTree /C:"(&(objectclass=user)(whenCreated>=%DatumAb%000000.0Z))" /q! | findstr /v /i /r "^$"

    REM per FINDSTR werden Leerzeilen herausgefiltert

goto :Ende

 

:FalschesDatumsformat

echo Falsches Datumsformat!

echo Bitte geben Sie das Jahr 4-stellig ein!

echo.

pause

goto :Start

 

:Ende

pause

 

 

==========================================================================

\Client-Checks\CheckRunningPCs-Eventlogs.cmd (19.10.2005 18:31:46)

==========================================================================

 

@echo off

REM CheckRunningPCs-Eventlogs.cmd / Stand: 19.10.05 (Br)

REM Durchläuft eine Liste von PCs und führt für jeden PC die in

REM der Unterroutine "CheckPC" angegebenen Befehle aus.

REM Hier: Ereignisprotokoll nach verschiedenen Kriterien filtern + das

REM       Ergebnis in eine CSV-Datei ausgeben.

REM Voraussetzungen:

REM     Benötigt WriteText.exe + psloglist.exe im Toolsverzeichnis

 

mode con cols=100 lines=30

title %~f0

color f0

set Toolsverzeichnis=\\server\freigabe$\Tools

set Path=%Path%;%Toolsverzeichnis%

set BatchVerzeichnis=%~dp0

set BatchVerzeichnis=%BatchVerzeichnis:~,-1%

    REM = Verzeichnis, in dem sich diese Batchdatei befindet (ohne abschlieîenden

    REM   Backslash)

set PCListe=%BatchVerzeichnis%\PCListe.txt

 

set Tempdatei=%temp%\%~n0.tmp

if exist %Tempdatei% del %Tempdatei%

set Logdatei=%temp%\%~n0.log

 

REM set Befehl=cscript /nologo %BatchVerzeichnis%\GetPCListe.vbs ^^^| sort

    REM alle im AD / in ausgewählten AD-Containern enthaltenen PCs

set Befehl=type "%PCListe%"

    REM alle in der Textdatei aufgelisteten PCs

REM set Befehl=echo PC0100

    REM einzelner PC - zum Testen

for /f %%a in ('%Befehl%') do call :CheckPC %%a

 

REM Überflüssige Zeilen + Leerzeilen entfernen:

type %Tempdatei% | findstr /i /v "psloglist copyright sysinternals" | findstr /i /v /c:"application log on" | findstr /i /v /c:"system log on" | findstr /i /v "Microsoft (R) Windows (R)" | findstr /v /r "^$" >%Logdatei%

del %Tempdatei%

pause

 

goto :EOF

 

REM ==========================================================================

REM Beginn / Befehle, die für jeden PC ausgeführt werden sollen

REM ==========================================================================

 

:CheckPC

set PCName=%1

echo.

WriteText "%PCName%|";

 

nslookup %PCName% 2>&1 | find /i "nicht gefunden" 1>NUL

if %Errorlevel% equ 0 WriteText "NSlookup fehlgeschlagen.";

 

ping -n 1 -w 50 %PCName% 1>NUL 2>NUL

if %Errorlevel% neq 0 WriteText "Nicht erreichbar."; & goto :EOF

WriteText "Erreichbar.";

 

REM Ereignisprotokoll nach VIS-Fehlern durchsuchen

set DateAfter=08/15/05

psloglist \\%PCName% -s -t ^| -x -a %DateAfter% -o VIS -f ew Application >>%Tempdatei%

    REM Meldungen im Application-Protokoll mit Quelle "VIS"

psloglist \\%PCName% -s -t ^| -x -a %DateAfter% System | findstr /i "vis" >>%Tempdatei%

    REM Meldungen im System-Protokoll, die das Wort "vis" enthalten

psloglist \\%PCName% -s -t ^| -x -a %DateAfter% -o Eventlog System >>%Tempdatei%

    REM Meldungen im System-Protokoll mit Quelle "Eventlog"

psloglist \\%PCName% -s -t ^| -x -a %DateAfter% Application -o MSIInstaller| findstr /i "viskompakt" | findstr /i "installationsvorgang" >>%Tempdatei%

    REM Meldungen wie "VISkompakt Client wurde installiert"

REM psloglist \\%PCName% -s -t ^| -x -a %DateAfter% -o Userenv Application >>%Tempdatei%

    REM Meldungen im System-Protokoll mit Quelle "Userenv"

 

    REM -s          = Ausgabe im CSV-Format (aber auf dem Bildschirm)

    REM -t ^|       = senkrechter Strich als Trennzeichen

    REM -x          = inkl. Feld "Beschreibung"

    REM -a          = nur Ereignisprotokoll-Einträge NACH dem angegebenen

    REM               Datum (Format mm/dd/yy) ausgegeben

    REM -o VIS      = nur Ereignisquelle "VIS"

    REM -f ew       = Einträge vom Typ "Error" und "Warning" anzeigen

    REM Application = nur in dem Ereignisprotokoll "Anwendung" suchen

    REM (Zeilen, die die Begriffe "application" oder "log" enthalten,

    REM  werden nicht mit ausgegeben)

 

REM ==========================================================================

REM Ende / Befehle, die für jeden PC ausgeführt werden sollen

REM ==========================================================================

goto :EOF

 

==========================================================================

\Client-Checks\CheckRunningPCs-Registry.cmd (19.10.2005 18:27:48)

==========================================================================

 

@echo off

REM CheckRunningPCs-Registry.cmd / Stand: 19.10.05 (Br)

REM Funktion:

REM     Durchläuft eine Liste aller im AD enthaltenen PCs und führt

REM     für jeden PC die in der Unterroutine "CheckPC" angegebenen Befehle

REM     aus.

REM     Hier: Bestimmte Registry-Keys überprüfen und ausgeben

REM Voraussetzungen:

REM     - benötigt GetPCListe.vbs im gleichen Verzeichnis

REM     - benötigt WriteText.exe im Tools-Verzeichnis

 

mode con cols=100 lines=30

title %~f0

color f0

set BatchVerzeichnis=%~dp0

set BatchVerzeichnis=%BatchVerzeichnis:~,-1%

    REM = Verzeichnis, in dem sich diese Batchdatei befindet (ohne abschlieîenden

    REM   Backslash)

set ToolsVerzeichnis=\\server\freigabe$\Tools

set Path=%Path%;%Toolsverzeichnis%

 

set Befehl=cscript /nologo %BatchVerzeichnis%\GetPCListe.vbs

rem set Befehl=type K:\PCListe.txt

 

for /f %%a in ('%Befehl%') do call :CheckPC %%a

pause

goto :EOF

 

REM ==========================================================================

 

:CheckPC

set PCName=%1

WriteText "%PCName%|";

 

REM nslookup %PCName% 2>&1 | find /i "nicht gefunden" 1>NUL

REM if %Errorlevel% equ 0 WriteText "NSlookup fehlgeschlagen."; & goto :EOF

 

ping -n 1 -w 50 %PCName% 1>NUL 2>NUL

if %Errorlevel% neq 0 WriteText "Nicht erreichbar." & goto :EOF

WriteText "Erreichbar.|";

 

reg query "\\%PCName%\HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v AutoAdminLogon | find /i "AutoAdminLogon"

reg query "\\%PCName%\HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon" /v DefaultUserName | find /i "DefaultUserName"

goto :EOF

 

==========================================================================

\Client-Checks\CheckRunningPCs-PCTypen.cmd (19.10.2005 18:26:40)

==========================================================================

 

@echo off

REM CheckRunningPCs-PCTypen.cmd / Stand: 19.10.05 (Br)

REM Durchläuft eine PC-Liste und führt für jeden PC die in

REM der Unterroutine "CheckPC" angegebenen Befehle aus.

REM Hier: Mit Hilfe von PSINFO div. PC-Infos (cpu memory speed date)

REM       abfragen.

REM Benötigt psinfo.exe + WriteText.exe im Toolsverzeichnis

 

mode con cols=100 lines=30

title %~f0

color f0

set Toolsverzeichnis=\\server\freigabe$\Tools

set BatchVerzeichnis=%~dp0

set BatchVerzeichnis=%BatchVerzeichnis:~,-1%

    REM = Verzeichnis, in dem sich diese Batchdatei befindet (ohne abschlieîenden

    REM   Backslash)

set Path=%Path%;%Toolsverzeichnis%

set PCListe=%BatchVerzeichnis%\PCListe.txt

 

set Tempdatei=%temp%\%~n0.tmp

if exist %Tempdatei% del %Tempdatei%

set Logdatei=%temp%\%~n0.log

 

set Befehl=cscript /nologo %BatchVerzeichnis%\GetPCListe.vbs ^^^| sort

    REM alle im AD / in ausgewählten AD-Containern enthaltenen PCs

REM set Befehl=type "%PCListe%"

    REM alle in der Textdatei aufgelisteten PCs

REM set Befehl=echo PC0100

    REM einzelner PC - zum Testen

for /f %%a in ('%Befehl%') do call :CheckPC %%a

type %Tempdatei% >%Logdatei%

del %Tempdatei%

pause

 

goto :EOF

 

REM ==========================================================================

REM Beginn / Befehle, die für jeden PC ausgeführt werden sollen

REM ==========================================================================

 

:CheckPC

set PCName=%1

echo.

WriteText "%PCName%|";

    REM PC-Namen + "|" aber ohne darauffolgenden Zeilenumbruch

 

nslookup %PCName% 2>&1 | find /i "nicht gefunden" 1>NUL

if %Errorlevel% equ 0 WriteText "NSlookup fehlgeschlagen.";

 

ping -n 1 -w 50 %PCName% 1>NUL 2>NUL

if %Errorlevel% neq 0 WriteText "Nicht erreichbar."; & goto :EOF

WriteText "Erreichbar.";

 

echo %PCName% >>%Tempdatei%

psinfo \\%PCName% | findstr /i "cpu memory speed date" >>%Tempdatei%

    REM Mit PSINFO div. PC-Infos abfragen aber nur die Zeilen, die eines

    REM der Wörter "cpu memory speed date" enthalten, ausgeben

 

REM ==========================================================================

REM Ende / Befehle, die für jeden PC ausgeführt werden sollen

REM ==========================================================================

goto :EOF

 

==========================================================================

\Client-Checks\DrWatsonLogsEinsammeln.cmd (19.10.2005 18:21:46)

==========================================================================

 

@echo off

REM DrWatsonLogsEinsammeln.cmd / Stand: 19.10.05 (Br)

REM Funktion:

REM     DrWatson-Logdateien einer Liste von PCs "einsammeln" + bestimmte

REM     Zeilen aus dieser Datei herausfiltern.

REM Voraussetzungen:

REM     Benötigt grep.exe und WriteText.exe im Toolsverzeichnis.

 

mode con cols=100 lines=30

title %~f0

color f0

set Toolsverzeichnis=\\server\freigabe$\Tools

set BatchVerzeichnis=%~dp0

set BatchVerzeichnis=%BatchVerzeichnis:~,-1%

    REM = Verzeichnis, in dem sich diese Batchdatei befindet (ohne abschlieîenden

    REM   Backslash)

set Path=%Path%;%Toolsverzeichnis%

set PCListe=%BatchVerzeichnis%\PCListe.txt

 

set Tempdatei=%temp%\%~n0.tmp

if exist %Tempdatei% del %Tempdatei%

set Logdatei=%temp%\%~n0.log

 

set Befehl=cscript /nologo %BatchVerzeichnis%\GetPCListe.vbs ^^^| sort

    REM alle im AD / in ausgewählten AD-Containern enthaltenen PCs

REM set Befehl=type "%PCListe%"

    REM alle in der Textdatei aufgelisteten PCs

REM set Befehl=echo PC0100

    REM einzelner PC - zum Testen

for /f %%a in ('%Befehl%') do call :CheckPC %%a

pause

 

goto :EOF

 

REM ==========================================================================

REM Beginn der Unterroutine / Befehle, die für jeden PC ausgeführt werden sollen

REM ==========================================================================

 

:CheckPC

set PCName=%1

echo.

echo %PCName%

 

nslookup %PCName% 2>&1 | find /i "nicht gefunden" 1>NUL

if %Errorlevel% equ 0 WriteText "NSlookup fehlgeschlagen.";

 

ping -n 1 -w 50 %PCName% 1>NUL 2>NUL

if %Errorlevel% neq 0 WriteText "Nicht erreichbar."; & goto :EOF

WriteText "Erreichbar.";

 

echo ^|%PCName% >>%Logdatei%

set DrWatsonLog=\\%PCName%\C$\Dokumente und Einstellungen\All Users\Anwendungsdaten\Microsoft\Dr Watson\drwtsn32.log

if not exist "%DrWatsonLog%" goto :NichtVorhanden

type "%DrWatsonLog%" | grep -i -A7 "Anwendungsausnahme aufgetreten" | findstr /r /v "^$" >>%Logdatei%

    REM Logdatei ausgeben, Zeile mit dem Text "Anwendungsausnahme aufgetreten"

    REM suchen + die folgenden 7 Zeilen ausgeben; anschließend Leerzeilen heraus-

    REM filtern

goto :Ende

 

:NichtVorhanden

echo DrWatson-Logdatei nicht vorhanden. >>%Logdatei%

goto :Ende

 

:Ende

REM ==========================================================================

REM Ende der Unterroutine / Befehle, die für jeden PC ausgeführt werden sollen

REM ==========================================================================

goto :EOF

 

==========================================================================

\Client-Checks\EventlogExport.cmd (19.10.2005 18:03:48)

==========================================================================

 

@echo off

REM EventlogExport.cmd / Stand: 12.10.05 (Br)

REM Funktion:

REM     Ermöglicht es, alle Einträge im Ereignisprotokoll ab einem

REM     bestimmten Datum zu exportieren und in eine (Excel-lesbare)

REM     Ausgabe-Datei zu schreiben.

REM Aufruf:

REM     ExportEventlog [Datum] [RemotePC]

REM Parameter:

REM     "Datum" = Datum im Format "tt.mm.jj" oder "tt.mm.jjjj"

REM               Falls dieser Wert weggelassen wird, erscheint eine

REM               entsprechende Eingabeaufforderung.

REM Ausgabe:

REM     Die Ausgabe erfolgt in die Datei EventlogExport.txt im %TEMP%-

REM     Verzeichnis, die automatisch unter Excel geöffnet wird.

 

color f0

title %~f0

setlocal

set ToolsVerzeichnis=\\server\freigabe$\Tools

set AusgabeDatei=%temp%\%~n0.txt

    REM %n0 = Name der Batchdatei ohne Pfad und Extention ".cmd"

set path=%path%;%ToolsVerzeichnis%

 

echo.

echo *******************************************************************

echo *** Export von Ereignisprotokoll-Einträgen eines beliebigen PCs ***

echo *** ab einem bestimmten Datum in eine Textdatei im CSV-Format   ***

echo *******************************************************************

echo.

 

if %1_==_ (call :DatumAbfragen) else (set Datum=%1)

if %2_==_ (call :PCNamenAbfragen) else (set RemotePC=%2)

 

set Tag=%Datum:~0,2%

set Monat=%Datum:~3,2%

set Jahr=%Datum:~-2%

    REM = die letzten 2 Stellen, also egal ob 2- oder 4-stellig

psloglist \\%RemotePC% -s -t "     " -x -a %Monat%/%Tag%/%Jahr% System >%AusgabeDatei%

psloglist \\%RemotePC% -s -t "     " -x -a %Monat%/%Tag%/%Jahr% Application >>%AusgabeDatei%

psloglist \\%RemotePC% -s -t "     " -x -a %Monat%/%Tag%/%Jahr% Security >>%AusgabeDatei%

 

echo.

echo Ausgabedatei "EventlogExport.txt" im TEMP-Verzeichnis wird jetzt in Excel

echo geöffnet.

echo Bitte wählen Sie anschließend noch im Excel-Menü "Daten" ^> "Text in Spalten",

echo dann "Getrennt" und als Trennzeichen den Tabulator ...

pause

start /max excel "%AusgabeDatei%"

endlocal

goto :EOF

 

:DatumAbfragen

echo Datum im Format "tt.mm.jj", ab dem die Eventlog-Einträge exportiert werden

echo sollen (Enter = 01.01.2000):

set /p Datum=

if %Datum%_==_ set Datum=01.01.2000

goto :EOF

 

:PCNamenAbfragen

echo Name des PCs, auf dem die Eventlog-Einträge exportiert werden

echo sollen (Enter = %computername%):

set /p RemotePC=

if %RemotePC%_==_ set RemotePC=%computername%

goto :EOF

 

==========================================================================

\Client-Checks\GetPCListe.vbs (19.04.2005 19:24:10)

==========================================================================

 

Option Explicit

 

' Liest eine Liste aller PCs aus dem Active Directory

' (OUs "Anwender-PCs") aus und gibt diese aus.

 

call AlleUnterobjekteAuflisten("OU=Anwender-PCs,OU=Computer,OU=MyOrg,DC=myDomain,DC=de", "computer", True)

 

' ==========================================================================

 

Sub AlleUnterobjekteAuflisten(strRootContainer, varObjektTyp, varRekursiv)

' Gibt die Namen aller Objekte im angegebenen AD-Container aus.

' <strObjektTyp> Objekttyp, der ausgegeben werden soll (class - z.B. "user")

' Falls <varRekursiv> True ist, werden auch ggf. enthaltene OUs (Organisational Units)

' durchsucht.

' Aufruf, z.B.:

'     call AlleUnterobjekteAuflisten("OU=Anwender-PCs,OU=Computer,OU=MyOrg,DC=myDomain,DC=de", _

'         "computer", True)

Dim objRootContainer, objADObjekt, strPCName

Const strDomainController = "myPreferredDomainController"

Set objRootContainer = GetObject("LDAP://" & strDomainController & "/" & strRootContainer)

For Each objADObjekt In objRootContainer

    If objADObjekt.class = varObjektTyp Then

    ' Gesuchter Objekttyp gefunden

        strPCName = LCase(objADObjekt.cn)

        WScript.Echo  strPCName

    End If

    If objADObjekt.class = "organizationalUnit" And varRekursiv = True Then

        Call AlleUnterobjekteAuflisten(objADObjekt.distinguishedName, _

            varObjektTyp, varRekursiv)

    End If

Next

Set objRootContainer = Nothing

Set objADObjekt = Nothing

 

End Sub

 

==========================================================================

\WakeOnLAN\WOLStartComputer.cmd (06.04.2003 10:50:20)

==========================================================================

 

@echo off

REM WOLStartComputer.cmd / Stand: 28.11.02

REM Funktion:

REM     Schaltet über WakeOnLAN den angegebenen Computer ein. Hierfür wird

REM     der Rechnername in IP-Adresse aufgelöst (NSLOOKUP), dann durch Abfrage

REM     der Adressleases des DHCP-Servers die dazugehörige MAC-Adresse des PCs

REM     ermittelt.

REM Voraussetzungen:

REM     - Windows 2000 Server als DHCP-Server

REM     - Angemeldeter Benutzer muss Mitglied der Gruppe "DHCP-Benutzer" auf dem

REM       DHCP-Server sein, um die DHCP-Daten auslesen zu können.

REM     - Für externe (PCI-) Netzkarten (z.B. ATI Glasfaser-Karte) muss auf dem

REM       betreffenden PC das Verbindungskabel zwischen Motherboard (Anschluss "WOL")

REM       und Karte angeschlossen sein.

REM     - Für die OnBoard-Netzkarten (Intel Pro 100) müssen im BIOS-Setup unter

REM       Advanced - Power On/Off zwei Einstellungen konfiguriert sein:

REM           Power On Source: "BIOS Controlled"

REM           LAN:             "Enabled"

 

set Zielrechner=%1

set DHCPServer=servername

set DHCPBereichsname=10.2.104.0

set Tempdatei=%temp%\%~n0.tmp

 

nslookup %Zielrechner% >%Tempdatei%

    REM Ausgabe z.B.:

    REM     Server:  server.domäne.de

    REM     Address:  10.2.104.12

    REM

    REM     Name:    r1181.domäne.de

    REM     Address:  10.2.106.89

type %Tempdatei% | find /n "Address" | find /v "[2]Address" >%Tempdatei%

    REM Ausgabe des 1. FIND-Befehls:

    REM     [2]Address:  10.2.104.12

    REM     [5]Address:  10.2.106.89

    REM Ausgabe des 2. FIND-Befehls:

    REM     [5]Address:  10.2.106.89

for /f "tokens=2 delims=, " %%a in (%Tempdatei%) DO set IPAdresse=%%a

echo IPAdresse '%IPAdresse%' gefunden!

echo Ermittle die MAC-Adresse ...

netsh dhcp server \\%DHCPServer% scope %DHCPBereichsname% show clients | find /i "%IPAdresse% " >%Tempdatei%

    REM Gibt eine Liste aller Adressleases mit IP-Adr. + MAC-Adr. der PCs aus,

    REM die mit Hilfe von FIND nach der betreffenden IP-Adresse durchsucht wird.

    REM Ausgabe z.B.

    REM     10.2.106.61     - 255.255.252.0  - 00-30-84-6d-e1-bd   -21.11.2002 07:23:28    -D

for /f "tokens=5 delims= " %%a in (%Tempdatei%) DO set MACAdresse=%%a

echo MACAdresse '%MACAdresse%' gefunden!

set MACAdresse=%MACAdresse:~0,2%:%MACAdresse:~3,2%:%MACAdresse:~6,2%:%MACAdresse:~9,2%:%MACAdresse:~12,2%:%MACAdresse:~15,2%

echo MACAdresse '%MACAdresse%' gefunden!

\\server\freigabe\System\Fremd\Client\Systemtools\WakeOnLAN\wol.exe %MACAdresse%

pause

 

==========================================================================

\WakeOnLAN\WOLStartPCListe.cmd (08.12.2002 21:43:06)

==========================================================================

 

@echo off

REM WOLStartPCListe.cmd / Stand: 18.11.02

REM     Dient zum automatischen Hochfahren verschiedener PCs.

REM     Hochgefahren werden alle in der Datei %PCListe% (siehe unten) aufgelisteten PCs.

REM     Wann die Batchdatei gestartet wird und damit die betreffenden PCs hochgefahren

REM     werden, kann z.B. durch Einrichten eines Schedule-Jobs festgelegt werden

REM     (Siehe Systemsteuerung - Geplante Tasks).

 

set PCListe=%~dpn0.txt

set Logdatei=\\server\verzeichnis\logs\allg\%~n0.log

if exist %Logdatei% del %Logdatei%

 

for /f "tokens=1 delims=," %%a in (%PCListe%) do call :PCStarten %%a

 

:PCStarten

ping -n 1 R936 1>>%Logdatei% 2>>&1

%~dp0WOLStartComputer.cmd %1 1>>%Logdatei% 2>>&1

goto :EOF