E-Mail versenden via PowerShell Skript

Mit PowerShell lassen sich viele Tätigkeiten automatisieren. Praktisch ist es natürlich, wenn das Skript den Erfolg oder Misserfolg bzw. die gewünschten Ergebnisse per Mail versenden kann.

Das ganze ist gar nicht so schwer. Anbei mein Beispielskript mit Erklärungen, das die Festplatten eines Rechners ausliest und die Größe als auch den freien Speicherplatz auflistet.

# Kommentare beginnen mit einem Hashtag!
# E-Mail Server festlegen
$smtpServer = "192.168.1.254"         # IP-Adresse des lokalen E-Mail Servers
# $smtpServer = "smtp.gmx.net"        # Es geht natürlich auch ein offizieller Anbieter

# Wer versendet die E-Mail? 
$emailFrom = "E-Mailadresse@domain.de"
# Wer empfaengt die E-Mail?
$emailTo = "Empfaenger@domain2.de"

# Wir muessen uns am E-Mail Server authentifizieren, also Benutzername
# und Kennwort uebermitteln
# Da wir im Skript keine Kennwoerter im Klartext speichern wollen, lesen
# wir die Daten aus einer Datei ein. Wie die Datei erstellt wird, lest Ihr
# weiter unten
$cred = Import-Clixml cred.clixml

# Den Namen des Computers auslesen
$hostname = hostname

# Betreff der E-Mail festlegen
$subject = "Festplattenstatus von $hostname"

# Bodytext erstellen
$body =  "Hallo Empfaenger, `n`n"        # `n = naechste Zeile
$body += "anbei der Festplattenstatus von $hostname`n`n"

# Alle lokalen Festplatten auslesen und fuer jedes Objekt den 
# Body Text erweitern
gwmi win32_logicaldisk -filter "drivetype=3" | foreach-object {
	$size = [double]$_.Size
	$size = "{0:N1}" -f ($size/1gb)
	$free = [double]$_.FreeSpace
	$free = "{0:N1}" -f ($free/1gb)
	$name = $_.VolumeName
	$id = $_.DeviceID
	
        # Sollte weniger als 10 GB Speicherplatz frei sein, gib eine
        # Warnung aus
	if ($free -lt 10) {
		$body += "!!!WARNUNG!!! - wenig freier Festplattenplatz`n" 
	}
	$body += "Laufwerksbuchstabe: $id `n"
	$body += "Laufwerksbezeichnung: $name `n"
	$body += "Groesse: $size GB `n"
	$body += "Frei: $free GB `n`n"
	
	
}

# Bodytext abschliessen
$body += "!!! Automatisierte Email - NICHT antworten !!!"

# Mailobjekt erstellen, Port ggfs. anpassen
$smtp = new-object Net.Mail.SmtpClient($smtpServer,25)
# Wenn SSL benoetigt wird, dann naechste Zeile auskommentieren
# $smtp.EnableSsl = $true 
# Zugangsdaten dem Objekt zuweisen
$smtp.Credentials = $cred
# E-Mail versenden
$smtp.Send($emailFrom, $emailTo, $subject, $body)

Benutzername und Kennwort verschlüsselt in eine Datei speichern

Es ist keine gute Idee Kennwörter in Klartext in Skripten zu verwenden. Daher liest das Skript die Zugangsdaten aus einer Datei aus. In meinem Beispiel aus cred.clixml.

Die Datei ist recht einfach zu erstellen und sollte im gleichen Verzeichnis wie das Skript liegen. Ansonsten müsst Ihr den Pfad zu der Datei in Skript ergänzen.

$cred = Get-Credential öffnet ein Popup-Fenster, in dem Ihr die Zugangsdaten für den E-Mailaccount eingebt. Die Daten werden dann in der Variablen $cred gespeichert.

$cred | Export-Clixml cred.clixml exportiert die Zugangsdaten im XML Format in die angegebene Datei cred.clixml. Dabei wird das Kennwort verschlüsselt (Hashwert) und nicht im Klartext gespeichert.

Über Get-Content .\cred.clixml könnt Ihr Euch den Inhalt der erstellten Datei ansehen.

Im Skript wird die Datei über Import-Clixml wieder eingelesen.

PS> $cred = Get-Credential
cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:

PS> $cred | Export-Clixml cred.clixml

PS> Get-Content .\cred.clixml
<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCredential</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Management.Automation.PSCredential</ToString>
    <Props>
      <S N="UserName">test</S>
      <SS N="Password">blablabla-HashwertDesKennwortes-blablabla</SS>
    </Props>
  </Obj>
</Objs>

Veröffentlicht unter PowerShell | Kommentare deaktiviert für E-Mail versenden via PowerShell Skript

XAMPP MySQL Server startet nicht

Vor kurzem habe ich mir die XAMPP Umgebung unter Windows installiert. Hat auch auf Anhieb alles wunderbar funktioniert. Bis heute auf einmal beim starten des MySQL Servers über das XAMPP Control Panel eine Fehlermeldung erschien

Die Informationen aus dem Event Log waren nicht hilfreich. Aber über den Log Button im XAMPP Control Panel erhielt ich weitere Informationen

2020-07-09 14:58:46 0 [ERROR] mysqld: Table '.\mysql\global_priv' is marked as crashed and last (automatic?) repair failed
2020-07-09 14:58:46 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table '.\mysql\global_priv' is marked as crashed and last (automatic?) repair failed
2020-07-09 14:58:46 0 [ERROR] Aborting

Offensichtlich ist die System Tabelle global_priv korrupt. Nach etwas Recherche habe ich dann folgende Lösung gefunden:

Starte den mysqld Dienst über die Kommandozeile. Öffne eine zweite Kommandozeile und repariere die Tabellen über mysqlcheck. Sollte das bin Verzeichnis des MySQL Servers nicht in der Umgebungsvariable PATH eingetragen sein, findest du die Programme bei der Standardinstallation unter Windows hier c:\xampp\mysql\bin

C:\>mysqld --console --skip-grant-tables --skip-external-locking
C:\>mysqlcheck -r --databases mysql --use-frm

Danach können die beiden Kommandozeilen wieder geschlossen werden. Das Starten des MySQL Server über das XAMPP Control Panel sollte jetzt wieder funktionieren.

Veröffentlicht unter MySQL, XAMPP | Kommentare deaktiviert für XAMPP MySQL Server startet nicht

Sophos VPN SSL Client über Kommandozeile starten

Nach der Installation des VPN SSL Clients von Sophos liegt im Installationsverzeichnis auch ein Kommandozeilen Programm. Mit diesem läßt sich die VPN Verbindung über die Kommandozeile starten, was dann natürlich auch die Möglichkeit bietet dies über ein Skript erledigen zu lassen. Wenn das Skript dann über Autostart gestartet wird, wird die VPN Verbindung direkt nach dem Anmelden hergestellt ohne dass man sich da noch drum kümmern muss.

Bei einer Standardinstallation des VPN SSL Clients sollte der Pfad zum BIN Verzeichnis der Sophos Installation in der Umgebungsvariable PATH automatisch eingetragen wurden sein. Wenn dies der Fall ist, kann das Programm aus jedem beliebigen Ordner gestartet werden.
Um zu überprüfen, ob der Pfad eingetragen ist, gebt Ihr SET PATH in der Kommandozeile ein

Sollte der Pfad nicht eingetragen sein, könnt Ihr das natürlich manuell eintragen. Dazu einfach WINDOWS-TASTE + PAUSE drücken und links im Fenster auf „Advanced System Settings“ gehen. In dem sich öffnenden Fenster wählt Ihr dann den Reiter „Advanced“ aus und klickt auf „Environment Variables„.

Soviel zur Vorarbeit. Beschäftigen wir uns mit der „openvpn.exe„, dem Kommandozeilen Tool. Wenn Ihr auf der Kommandozeile das Programm ohne Parameter aufruft, wird automatisch die Hilfe angezeigt.
Da die Hilfe sehr groß ist, empfiehlt es sich die Anzeige in deine Datei umzuleiten, damit man in Ruhe über einen Editor alle Optionen durchforsten kann.

Damit man nicht alle Optionen manuell anhängen muss, empfiehlt es sich einfach die Konfigrationsdatei des Benutzers herzunehmen, da dort bereits alle Einstellungen hinterlegt sind. Diese liegt bei einer Standardinstallation unter C:\Program Files (x86)\Sophos\Sophos SSL VPN Client\config und hat die Endung .ovpn

Um die Konfigurationsdatei zu nutzen, muss der Schalter – – config genutzt werden. Das ganze sieht dann wie folgt aus:

Nun muss nur noch der Benutzername und das Kennwort eingegeben werden. Beachtet, dass bei der Kennworteingabe in der Kommandozeile aus sicherheitsgründen nichts angezeigt wird. Nach der Bestätigung mit Enter erfolgt dann die Einwahl.

Um das ganze mit einem Skript zu nutzen, ist eine Eingabe von Benutzer und Kennwort natürlich nicht hilfreich. Dies kann durch eine Kennwortdatei automatisiert werden. Dazu sind folgende Schritte notwendig:
– Anlegen einer Kennwortdatei. Ich habe diese bei mir auth.cfg genannt
– In der Datei muss Benutzername und Kennwort jeweils in einer eigenen Zeile stehen

– Anpassung der Konfigurationsdatei. Einfach mit einem Editor öffnen und in der Zeile „auth-user-pass“ den Dateinamen der Kennwortdatei ergänzen

Nun gebt Ihr wieder den gleichen Befehl ein: openvpn.exe –config deine-konfig.ovpn
Jetzt wird der Benutzername und das Kennwort aus der Kennwortdatei benutzt und die VPN Verbindung hergestellt.

ACHTUNG: Das Kommandozeilen Fenster muss geöffnet bleiben, solange Ihr eine aktive VPN Verbindung wünscht. Wenn Ihr das Fenster schließt, wird auch die VPN Verbindung unterbrochen.

Um ein Skript zu erstellen, dass automatisch nach der Anmeldung gestartet wird, legt Ihr eine Datei im Ordner C:\Users\<benutzer>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup (Windows 10) an. Die Endung muss .cmd oder .bat lauten. Mein Skript habe ich z.B. start-vpn-client.bat genannt.
Der Inhalt sollte dann in etwas so aussehen (Pfade müssen natürlich angepasst werden)

Nun sollte nach der Anmeldung automatisch die VPN Verbindung hergestellt werden.

Veröffentlicht unter SOPHOS | Kommentare deaktiviert für Sophos VPN SSL Client über Kommandozeile starten

Windows Server 2016 Update Probleme

Wenn der Windows Server 2016 die Updates nicht installieren möchte, kann das die unterschiedlichsten Ursachen haben.

Anbei ein paar Tips, wie Ihr das Update doch noch zum Laufen bekommt.

Proxy Einstellungen prüfen

Sollte der Server hinter einem Proxy stehen, muss natürlich der Proxy entsprechend gesetzt sein. Die Proxy Einstellungen findet Ihr unter Start > Settings > Network & Internet > Proxy.

Ich hatte schon das Problem, dass ich den Proxy gesetzt habe, aber der Download der Updates trotzdem bei 0% stehen geblieben ist.
Um zu überprüfen, ob der Server tatsächlich den gesetzen Proxy nutzt, hilft eine Abfrage über die Kommando Zeile

Im obigen Beispiel ist kein Proxy gesetzt. Dieser kann ebenfalls über die Kommando Zeile via netsh gesetzt werden

Danach den Server einmal durchstarten und schauen, ob der Download der Updates jetzt funktoniert.

Diesen Tipp habe ich bei bent-blog.de gefunden.

Kommando Zeilen Tool – sconfig.exe

Über das Kommando Zeilen Tool sconfig.exe (Server Configuration) können Updates ebenfalls installiert werden. Dazu das Tool über CMD mit erhöhten Rechten aufrufen und den Punkt 6) Download and Install Updates auswählen.

Diesen Tipp habe ich bei jans.cloud gefunden.

Bereits runtergeladene Updates löschen

Windows Server 2016 legt die heruntergeladenen Dateien in das Verzeichnis
C:\Windows\WinSxS

Wenn Ihr diesen Ordner umbenennt oder löscht und dann den Dienst Windows Update neu startet, wird der Ordner neu angelegt und Windows sucht erneut nach Updates.

Veröffentlicht unter Windows Server 2016 | Kommentare deaktiviert für Windows Server 2016 Update Probleme