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