Möchte man einen Windows Dienst prüfen, ob er läuft und im Fehlerfall automatisch starten, kann man dies per Batch-Skript automatisieren.
Dazu legt man eine Textdatei an, welche zum Beispiel check_svc.txt heißt. Diese bearbeitet man und fügt folgende Befehle ein:
@ ECHO OFF
for /F "tokens=3 delims=: " %%H in ('sc query "DIENSTNAME" ^| findstr " STATE"') do (
if /I "%%H" NEQ "RUNNING" (
net start "DIENSTNAME"
)
)
Danach ändert man die Dateiendung auf .bat um das Skript ausführen zu können. Dieses kann man nun beispielsweise mittels der Windows Aufgabenplanung ausführen lassen.
14.06.16
29.10.15
[How-To] T-SQL Abfrage nach CSV
Möchte man T-SQL queries in eine CSV-Datei schreiben, kann man sich der sqlcmd.exe bedienen:
">sqlcmd -S Database-Server -d Database -E -Q "set nocount on;SELECT * FROM dbo.table" -o "C:\sqlquery_%date:~6,4%-%date:~3,2%-%date:~0,2%.csv" -s";" -w 999
-S --> DB-Server
-d --> Database
-E --> trusted connection
-Q --> Query
-o --> output file
-s --> delimiter
-w --> Screenwidth
Beispiel:
">sqlcmd -S localhost -d %DATENBANK% -E -Q "set nocount on;SELECT Spalte1,Spalte2,Spalte3,StartTime FROM dbo.%TABLE% WHERE Spalte1 LIKE 'BEISPIEL' AND Spalte2 is NULL AND Spalte3 LIKE '' AND StartTime >= DATEADD(HH, -24, GETDATE())" -o "X:\PFAD\Output_File_%date:~6,4%-%date:~3,2%-%date:~0,2%.csv" -s";" -w 999
">sqlcmd -S Database-Server -d Database -E -Q "set nocount on;SELECT * FROM dbo.table" -o "C:\sqlquery_%date:~6,4%-%date:~3,2%-%date:~0,2%.csv" -s";" -w 999
-S --> DB-Server
-d --> Database
-E --> trusted connection
-Q --> Query
-o --> output file
-s --> delimiter
-w --> Screenwidth
Beispiel:
">sqlcmd -S localhost -d %DATENBANK% -E -Q "set nocount on;SELECT Spalte1,Spalte2,Spalte3,StartTime FROM dbo.%TABLE% WHERE Spalte1 LIKE 'BEISPIEL' AND Spalte2 is NULL AND Spalte3 LIKE '' AND StartTime >= DATEADD(HH, -24, GETDATE())" -o "X:\PFAD\Output_File_%date:~6,4%-%date:~3,2%-%date:~0,2%.csv" -s";" -w 999
30.09.15
[How-To] Exchange 2010 - Vollzugriff ohne Automapping einrichten
Ab Exchange 2010 SP1 wird ein Postfach, auf welches man Vollzugriff erhalten hat, per Automapping in Outlook eingebunden.
Dies kann beim Vollzugriff auf viele Postfächer zu erheblichen Leistungseinbußen in Outlook führen.
Möchte man nun das Automapping für bestimmte Postfächer deaktivieren, muss man folgendermaßen vorgehen:
In diesem Beispiel wird der Vollzugriff des Benutzers "Administrator" auf das Postfach von Benutzer "Test1" entfernt:
Remove-MailboxPermission -Identity Test1 -User Administrator -AccessRights FullAccess -InheritanceType All
Nachfolgend wird die Berechtigung für den Vollzugriff wieder erteilt, diesmal jedoch ohne Automapping:
Add-MailboxPermission -Identity Test1 -User Administrator -AccessRights:FullAccess -AutoMapping $false
Beim nächsten Start von Outlook werden die Postfächer, auf welche man Vollzugriff hat, nicht mehr automatisch geöffnet.
Dies kann beim Vollzugriff auf viele Postfächer zu erheblichen Leistungseinbußen in Outlook führen.
Möchte man nun das Automapping für bestimmte Postfächer deaktivieren, muss man folgendermaßen vorgehen:
In diesem Beispiel wird der Vollzugriff des Benutzers "Administrator" auf das Postfach von Benutzer "Test1" entfernt:
Remove-MailboxPermission -Identity Test1 -User Administrator -AccessRights FullAccess -InheritanceType All
Nachfolgend wird die Berechtigung für den Vollzugriff wieder erteilt, diesmal jedoch ohne Automapping:
Add-MailboxPermission -Identity Test1 -User Administrator -AccessRights:FullAccess -AutoMapping $false
Beim nächsten Start von Outlook werden die Postfächer, auf welche man Vollzugriff hat, nicht mehr automatisch geöffnet.
Tags:
Exchange,
Outlook,
PowerShell,
Technik
12.08.15
[How-To] Programme auf mehreren PCs automatisiert updaten
Da in letzter Zeit sehr viele Sicherheitsupdates für Anwendungen wie beispielsweise Adobe Flash oder Java released werden, stellte sich mir die Frage, wie ich in unserem Unternehmensnetzwerk mit dem geringstmöglichen Aufwand unsere Standardanwendungen per Taskplanner automatisiert patchen kann (das manuelle Patchen von 100+ PCs verursacht einen immensen administrativen Aufwand).
Als Anwendung, welche das Patchen an sich übernimmt, fiel meine Wahl auf Ninite, da diese in der ProVersion sehr viele Funktionen bereithält, welche man per Kommandozeile automatisieren kann.
Darüberhinaus lädt Ninite den jeweiligen Patch für ein Programm einmalig herunter und verteilt ihn dann über das lokale Netz, anstatt dass jeder PC selbständig die Anwendung aktualisiert.
Per Taskplanner lasse ich stündlich ein Skript (ninite_PC.bat) ausführen, welches Ninite auf allen laufenden PCs im Firmennetzwerk ausführt. Um alle laufenden PCs zu erhalten, wird wiederum ein weiteres Skript (running_machines.bat) ausgeführt, welches per Ping alle laufenden Rechner in ein Textfile schreibt. Dieses Textfile wird vom ersten Batchskript als Grundlage für die zu prüfenden und ggf. zu patchenden Rechner benutzt.
Nach Ausführung des Patchvorganges versendet die "ninite_PC.bat" per Powershell-Skript (ninite.ps1) noch eine E-Mail mit einem Patchreport an unser Support-Postfach.
ninite_PC.bat
@echo OFF
rem Variable für Arbeitsverzeichnis setzen
set PFAD=D:\Tools\Ninite
rem ermitteln der eingeschalteten Rechner im Netzwerk
CALL %PFAD%\running_machines.bat
echo.
echo.
cls
echo Running Ninite on responding machines
rem laufende PCs prüfen und patchen
%PFAD%\NinitePro.exe /remote file:%PFAD%\IPs.txt /locale de-DE /silent %PFAD%\report\report_PC.txt /select Acrobat Chrome Firefox Flash "Flash (IE)" Java Reader "Reader DC" Silverlight Skype /updateonly /disableshortcuts /disableautoupdate
rem Report per mail an Support versenden
Powershell.exe -ep RemoteSigned -File "D:\Tools\Ninite\ninite.ps1"
rem löschen des versendeten Reports
del "%PFAD%\report\report_PC.txt"
running_machines.bat
@echo OFF
set PFAD=D:\Tools\Ninite
echo running_machines.bat
echo Probing alive computers in Local Area Network
echo.
ping -n 2 127.0.0.1 > NUL
rem delete old files if existing
echo.
echo.
echo deleting old probing files!
del %PFAD%\ping.txt
del %PFAD%\results.txt
del %PFAD%\IPs.txt
echo.
ping -n 2 127.0.0.1 > NUL
rem pingen der PCs, welche in der machines.txt definiert wurden
echo pinging local workstations
echo.
echo.
for /F "tokens=*" %%A in (%PFAD%\machines.txt) do ping -n 1 %%A >> %PFAD%\ping.txt
echo writing responding machines to results.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :RESULTS
echo writing IPs of alive machines to IPs.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :IPs
:RESULTS
rem entfernen aller nicht benötigten Zeilen der Pingausgabe
rem aaa.bbb.ccc steht hier für IPs, welche gefiltert werden sollen
type %PFAD%\ping.txt | findstr "." | findstr /v Ping | findstr /v aaa.bbb.ccc | findstr /v Pakete | findstr /v Ca. | findstr /v nicht | findstr /v Verlust | findstr /v Minimum | findstr /v Zeitberschreitung > %PFAD%\results.txt
EXIT /B
:IPs
rem IP-Adressen in temporäre Datei schreiben
for /F "tokens=3" %%i in (%PFAD%\results.txt) do echo %%i >> %PFAD%\IPs_temp.txt
ping -n 2 127.0.0.1 > NUL
for /F "tokens=*" %%A in (%PFAD%\IPs_temp.txt) do CALL :SUB_A %%A
CALL :SUB_B
GOTO :EOF
:SUB_A
rem Doppelpunkte hinter den IP-Adressen entfernen
set str=%1
set str=%str::=%
echo %str% >> %PFAD%\IPs.txt
EXIT /B
:SUB_B
rem entfernen der temporären IP-Liste
del %PFAD%\IPs_temp.txt
EXIT /B
ninite.ps1
Send-MailMessage -from "sender@domain.com" `
-to "recipient@domain.com" `
-subject "Ninite Report" `
-body "Results of Ninite" `
-Attachment "D:\Tools\Ninite\report\report_PC.txt" -smtpServer server.domain.com
Als Anwendung, welche das Patchen an sich übernimmt, fiel meine Wahl auf Ninite, da diese in der ProVersion sehr viele Funktionen bereithält, welche man per Kommandozeile automatisieren kann.
Darüberhinaus lädt Ninite den jeweiligen Patch für ein Programm einmalig herunter und verteilt ihn dann über das lokale Netz, anstatt dass jeder PC selbständig die Anwendung aktualisiert.
Per Taskplanner lasse ich stündlich ein Skript (ninite_PC.bat) ausführen, welches Ninite auf allen laufenden PCs im Firmennetzwerk ausführt. Um alle laufenden PCs zu erhalten, wird wiederum ein weiteres Skript (running_machines.bat) ausgeführt, welches per Ping alle laufenden Rechner in ein Textfile schreibt. Dieses Textfile wird vom ersten Batchskript als Grundlage für die zu prüfenden und ggf. zu patchenden Rechner benutzt.
Nach Ausführung des Patchvorganges versendet die "ninite_PC.bat" per Powershell-Skript (ninite.ps1) noch eine E-Mail mit einem Patchreport an unser Support-Postfach.
ninite_PC.bat
@echo OFF
rem Variable für Arbeitsverzeichnis setzen
set PFAD=D:\Tools\Ninite
rem ermitteln der eingeschalteten Rechner im Netzwerk
CALL %PFAD%\running_machines.bat
echo.
echo.
cls
echo Running Ninite on responding machines
rem laufende PCs prüfen und patchen
%PFAD%\NinitePro.exe /remote file:%PFAD%\IPs.txt /locale de-DE /silent %PFAD%\report\report_PC.txt /select Acrobat Chrome Firefox Flash "Flash (IE)" Java Reader "Reader DC" Silverlight Skype /updateonly /disableshortcuts /disableautoupdate
rem Report per mail an Support versenden
Powershell.exe -ep RemoteSigned -File "D:\Tools\Ninite\ninite.ps1"
rem löschen des versendeten Reports
del "%PFAD%\report\report_PC.txt"
running_machines.bat
@echo OFF
set PFAD=D:\Tools\Ninite
echo running_machines.bat
echo Probing alive computers in Local Area Network
echo.
ping -n 2 127.0.0.1 > NUL
rem delete old files if existing
echo.
echo.
echo deleting old probing files!
del %PFAD%\ping.txt
del %PFAD%\results.txt
del %PFAD%\IPs.txt
echo.
ping -n 2 127.0.0.1 > NUL
rem pingen der PCs, welche in der machines.txt definiert wurden
echo pinging local workstations
echo.
echo.
for /F "tokens=*" %%A in (%PFAD%\machines.txt) do ping -n 1 %%A >> %PFAD%\ping.txt
echo writing responding machines to results.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :RESULTS
echo writing IPs of alive machines to IPs.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :IPs
:RESULTS
rem entfernen aller nicht benötigten Zeilen der Pingausgabe
rem aaa.bbb.ccc steht hier für IPs, welche gefiltert werden sollen
type %PFAD%\ping.txt | findstr "." | findstr /v Ping | findstr /v aaa.bbb.ccc | findstr /v Pakete | findstr /v Ca. | findstr /v nicht | findstr /v Verlust | findstr /v Minimum | findstr /v Zeitberschreitung > %PFAD%\results.txt
EXIT /B
:IPs
rem IP-Adressen in temporäre Datei schreiben
for /F "tokens=3" %%i in (%PFAD%\results.txt) do echo %%i >> %PFAD%\IPs_temp.txt
ping -n 2 127.0.0.1 > NUL
for /F "tokens=*" %%A in (%PFAD%\IPs_temp.txt) do CALL :SUB_A %%A
CALL :SUB_B
GOTO :EOF
:SUB_A
rem Doppelpunkte hinter den IP-Adressen entfernen
set str=%1
set str=%str::=%
echo %str% >> %PFAD%\IPs.txt
EXIT /B
:SUB_B
rem entfernen der temporären IP-Liste
del %PFAD%\IPs_temp.txt
EXIT /B
ninite.ps1
Send-MailMessage -from "sender@domain.com" `
-to "recipient@domain.com" `
-subject "Ninite Report" `
-body "Results of Ninite" `
-Attachment "D:\Tools\Ninite\report\report_PC.txt" -smtpServer server.domain.com
Tags:
batch,
Ninite,
PowerShell,
Scripting,
Technik
Abonnieren
Posts (Atom)