Datum (Get-Date) in der PowerShell

Im Vergleich zum Scripting mit Batch, ist es in der PowerShell (nachfolgend PS) sehr einfach Datumsberechnungen durchzuführen und diese bei der Automatisierung zu verwenden. Das Cmdlet, das man dazu braucht nennt sich Get-Date.

Einige Beispiele zur Verwendung von Get-Date werden nachfolgend erläutert.

 

1. Grundlagen Get-Date

 

Setzen wir den Befehl Get-Date in der PS ab, wird das aktuelle Datum ausgegeben:

PS C:\Windows\system32> Get-Date
Dienstag, 13. August 2013 18:07:26

 

Übergeben wir diese Ausgabe in eine Variable, lässt es sich sehr gut zur weiteren Berechnung oder zur Benennung von Dateien verwenden (damit bekommt das bspw. eine Backup-Datei das heutige Datum als Namen).

PS C:\Windows\system32> $date = Get-Date
PS C:\Windows\system32> $date
Dienstag, 13. August 2013 18:09:37

 

Natürlich ist diese Ausgabe für einen Dateinamen nicht wirklich zu empfehlen, der Parameter „-Format“ hilft uns aber weiter.

PS C:\Windows\system32> $date = Get-Date -Format yyyy-MM-dd
PS C:\Windows\system32> $date
2013-08-13

 

Der Parameter “-Format” bietet uns sehr viele Möglichkeiten, dazu später mehr.

 

In einem Script könnte das Ganze nun so aussehen:

$date = Get-Date -Format yyyy-MM-dd
Start-Transcript -Path ./$date.log

 

(siehe dazu folgendes Beispielscript: http://blog.rollmann-it.de/?p=109)

 

2. Beispiele für den Parameter “-Format”

In den nachfolgenden Beispielen verzichte ich darauf die Werte zunächst in eine Variable zu übergeben!

 

Gibt einen Timestamp zurück:

PS C:\Windows\system32> Get-Date -Format o
2013-08-13T18:17:27.7482387+02:00

 

Gibt das Datum in kurzer Schreibweise zurück:

PS C:\Windows\system32> Get-Date -Format d.M.y
13.8.13

 

Gibt das Datum in 2-stelliger Schreibweise zurück:

PS C:\Windows\system32> Get-Date -Format dd.MM.yy
13.08.13

 

Gibt das Datum in langer Schreibweise zurück:

PS C:\Windows\system32> Get-Date -Format dd.MM.yyyy
13.08.2013

 

Gibt die aktuelle Urzeit zurück:

PS C:\Windows\system32> Get-Date -Format hh:mm:ss
18:22:19

 

Das Ganze lässt sich natürlich beliebig kombinieren und weiterführen, für den Einstieg reicht es hier aber erst einmal.

 

 

3. Arbeiten mit Pointern

 

Im letzten Abschnitt wurde erklärt, wie man mittels „-Format“ nur bestimmte Informationen von Get-Date ausgegeben bekommt. Nebenbei bemerkt, Get-Date kann uns noch viel mehr Informationen zurückgeben. Man muss nur wissen, wie man das Cmdlet ansprechen muss.

 

Der Tag im Monat:
PS C:\Windows\system32> ((Get-Date).Day)
13

 

Der Tag in der Woche:
PS C:\Windows\system32> ((Get-Date).dayofweek)
Tuesday

 

Der Monat als Zahl:
PS C:\Windows\system32> ((Get-Date).month)
8

 

Das Jahr:
PS C:\Windows\system32> ((Get-Date).year)
2013

 

Der Tag im Jahr:
PS C:\Windows\system32> ((Get-Date).dayofyear)
225

 

Die Stunde, die Minute, die Sekunde, die Millisekunde (hier einmal in einem Beispiel zusammengefasst):
PS C:\Windows\system32> ((Get-Date).hour)
18

PS C:\Windows\system32> ((Get-Date).minute)
34

PS C:\Windows\system32> ((Get-Date).second)
37

PS C:\Windows\system32> ((Get-Date).millisecond)
605

 

Wer aufgepasst hat, hat sicherlich gemerkt, dass man es mit der Groß- und Kleinschreibung nicht so genau nehmen muss ;-) .

 

 

4. Berechnungen mittels Get-Date

 

Das ist wahrscheinlich die beste Funktion, die es in dem Cmdlet gibt. In Zeiten der CMD waren es seitenlange Scripte, die das Datum so aufbereitet haben, dass man damit rechnen konnte (da habe ich gerne auf fremde Scripte zurückgegriffen).
Bei der PS ist das alles ganz einfach. Nachfolgend ein paar Beispiele dazu, wie sich mittels Get-Date rechnen lässt.

 

Wie viele Tage sind es noch bis Weihnachten?
PS C:\Windows\system32> (Get-Date "24.12.2013").dayofyear - (Get-Date).dayofyear
133

 

Wie viele Tage sind seit meiner Geburt vergangen?
PS C:\Windows\system32> ((Get-Date) - (Get-Date "14.10.1987")).days
9435

 

Welchen Tag hatten wir an meinem Geburtstag?
PS C:\Windows\system32> Get-Date "14.10.1987" -Format dddd
Mittwoch

 

Das sollte für den Einstieg reichen. Mit etwas Transferwissen bekommt kann man aus diesen Grundlagen noch viel mehr herausholen. Einen tiefen Einblick in die Funktionen dieses Cmdlet kann man sich hier verschaffen: http://technet.microsoft.com/en-us/library/hh849887.aspx.

Aufzeichnung in der PowerShell

Für das Scripting in der PowerShell gibt es eine sehr einfache Möglichkeit Log-Dateien zu erstellen. Diese ermöglicht es einem mit zwei kurzen Zeilen die Ausgabe der PowerShell in eine Datei aufzuzeichnen und in eine Datei umzuleiten.

 

Befehl 1:

Start-Transcript -Path <Pfad zur Log-Datei>

# Dieser Befehl startet den Record

 

Befehl 2:

Stop-Transcript

# Dieser Befehl beendet den Record

 

Einfach, schnell, toll :-)

Script zur Sicherung der Gruppenrichtlinien (GPOs)

Hintergrund des Ganzen:

Generell werden die GPOs bei einer Sicherung der Domänen-Controller mitgesichert. Sollte es allerdings passieren, dass man selber – oder ein Kollege -, versehentlich eine GPO löscht oder “verbastelt”, ist nachfolgende Erläuterung die wohl einfachste Möglichkeit diese wiederherzustellen.

Durch das nachfolgend erläuterte Script lässt sich auf einen täglichen Stand aller GPOs zurückgreifen, die über die sich über die MMC unkompliziert wiederherstellen lassen.

 

Erläuterungen zum Script:

1. Es muss unbedingt die Variable $srvbckdir gesetzt werden.

2. 7-Zip muss auf dem Server installiert werden (dieses habe ich hier verwendet, da es sich – wie ich finde – sehr bequem über die Kommandozeile steuern lässt.

3. Gfg. müssen die Variablen $locbckdir, $loclogpath und $7zippath angepasst werden.

4. Das Ausführen von Scripten muss auf dem Server aktiviert werden (das ist hier super erklärt).

 

Script:

# Import benötigter Module

import-module grouppolicy

 

# Definition der verwendeten Variablen

$locbckdir = “C:/Backup-GPO/” # temp. lokales Backup-Verzeichnis
$srvbckdir = “<UNC-Pfad Backup Server>” # Backup-Verzeichnis auf dem Backup-Server
$loclogpath = “C:/scripts/” # lokaler Logpath
$7zippath = “C:/Programme/7-Zip/7z.exe”
$date = Get-Date -Format yyyy-MM-dd # aktuelles Datum in angegebenem Format

 

# Record in Log-Datei umleiten

Start-Transcript -Path ./$date.log

 

# Prüfen ob das temp. lokale Backup-Verzeichnis existiert, sonst anlegen

if( -not (Test-Path $locbckdir) )
{
New-Item $locbckdir -type directory
}

 

# lokales Backup aller GPOs

Backup-GPO -All -Path $locbckdir

 

# Backup mittels 7-Zip komprimieren (als .zip) + nach Datum benennen

.$7zippath a -tzip $locbckdir/$date.zip $locbckdir

 

# Prüfen ob das Backup-Verzeichnis auf dem Server existiert, sonst anlegen

if( -not (Test-Path $srvbckdir) )
{
New-Item $srvbckdir -type directory
}

 

# Kopieren des Backup-Zip auf den Backupserver

Copy-Item $locbckdir/$date.zip $srvbckdir/

 

# Löschen des lokalen Backups

Remove-Item $locbckdir/* -Force -Recurse

 

# Stop des Record

Stop-Transcript

 

# Kopieren des Log auf den Backupserver + Löschen des Log

Copy-Item ./$date.log $srvbckdir/
Remove-Item ./$date.log

www.rollmann-it.de

Ab diesen Monat (Juli) stehe ich mit meinem eigenen Dienstleistungsunternehmen für Sie / euch zur Verfügung.

 

Sven Rollmann IT-Solutions bietet Computer und IT-Services für Privat- und Businesskunden.

 

Hier ein Auszug aus unserem Leistungsangebot..

für Privatkunden

  • Computer, Notebook & PC: Einrichtung, Reparatur, Wartung
  • Datenrettung / -wiederherstellung
  • DSL / Internet: Einrichtung, Produktberatung
  • Heimnetzwerk & WLAN
  • Linux, Mac & Windows
  • Softwareinstallation & -einrichtung
  • Virenbeseitigung & Antivirenschutz
  • Vor-Ort-Service!

 

für Geschäftskunden

  • Betreuung Ihrer betrieblichen Computer
  • Datensicherung
  • Microsoft Server-Technologien
  • Netzwerkinfrastruktur
  • Security: Firewall & Virenschutz
  • System- und Netzwerkmonitoring (Icinga, Nagios)
  • Webseitenbetreuung

 

Mit unseren Leistungen stehen wir 7 Tage die Woche für Sie im Großraum Andernach, Neuwied und Umgebung zur Verfügung.

 

weitere Informationen auf www.rollmann-it.de

Windows 7 – alle Versionen von einem Installationsmedium installieren

Problemstellung:

Wie kann man von einem Installationsmedium verschiedene Windows 7 Versionen installieren (z.B. Starter, Home Premium, Professional, …)?

Konkretes Problem war bei mir, dass ich ein Netbook mit gültiger Windows 7 Starter Lizenz neu zu installieren hatte. Zwar hatte ich einen Key, aber mir fehlte das Installationsmedium dafür.

 

Schritt 1:

Man benötigt ein Windows 7 Installationsmedium (ISO, DVD)

In meinem Fall Windows 7 Professional – 32 Bit.

 

Schritt 2:

Aus dem ISO bzw. von der CD die Datei \sources\ei.cfg entfernen.

 

Schritt 3:

Das zu installierende Gerät mit dem Medium starten. Nach den ersten Schritten kann man nun zwischen allen zu installierenden Windows 7 Versionen wählen :-) .

 

Hinweis:

Das einzige was man nun noch beachten muss ist, ob man ein Medium für eine 32 oder 64 Bit Installation nutzt.

Erweiterter Cold-Standby für Windows DHCP-Server

Diese Anleitung beschreibt die Einrichtung eines erweiterten Cold-Standby für einen DHCP-Server unter Windows 2008 R2.

 

Installation es zweiten DHCP-Servers

  1. Entweder einen eigenständigen Server installieren (was sich allerdings für diesen Dienst nicht wirklich lohnt) oder die Rolle des DHCP-Servers zu einem anderen Server hinzufügen.
  2. Den Startmodus des DHCP-Dienstes auf manuell umstellen.
  3. Es muss keine Konfiguration des DHCP-Servers erfolgen!

 

Script zur Sicherung der DHCP-Konfiguration

Das nachfolgende Script sichert die DHCP-Konfiguration auf dem aktiven DHCP-Server, es kann z .B. einmal pro Tag ausgeführt werden. Dazu einfach einen Task im Windows-Server hinterlegen (das brauche ich hier sicher nicht näher zu beschreiben ;-) ).

Als Vorarbeit bitte folgende Ordner anlegen (das hier sind nur Beispiele):

  • Auf dem aktiven DHCP-Server: C:\DHCP-Backup
  • Auf einem Backup-Ziel im Netzwerk (bspw. File-Server): \backups\DHCP-Backup\

Script:

@echo off

REM Sicherung der Konfiguration des DHCP-Servers, alte Sicherung wird überschrieben.

netsh dhcp server backup C:\DHCP-Backup\

 

REM Anlegen eines Ordners mit aktuellem Datum im Zielverzeichnis auf dem Backup-Volume

mkdir <BACKUP-VOLUME>\%date%

 

REM Kopieren der Sicherung des DHCP-Servers auf das Backup-Volume

xcopy C:\DHCP-Backup <BACKUP-Volume>\%date% /E /R /Y

 

Rücksicherung der DHCP-Konfiguration auf dem Backup-DHCP-Server (bei Ausfall des primären DHCP-Servers)

  1. Den DHCP-Dienst auf dem zweiten DHCP-Server starten, bspw. via  „net start dhcp-server“.
  2. Den Ordner mit dem Backup auf diesen Server kopieren, bspw. „C:\dd.mm.yyyy“.
  3. ‚Jeder‘ muss auf den Ordner Vollzugriff bekommen.
  4. Den Ordner wie unter Punkt 2 auch auf dem PC anlegen, von dem aus man die MMC startet, bspw. „C:\dd.mm.yyyy“, der Ordner kann aber leer bleiben (das ist wichtig, da man den Ordner sonst bei der Rücksicherung nicht auswählen kann, irgendwo ist da ein Bug).
  5. Die MMC mit dem Snapin DHCP als administrativer User starten (i.d.R. ein Domänen-Admin) und mit dem Backup-DHCP-Server verbinden.
  6. Einen Rechtsklick auf den DHCP-Server tätigen, auf „Wiederherstellen….“ klicken, den in Punkt 4. Angelegten Ordner auswählen und mit OK bestätigen (siehe nachfolgende Abbildung).
  7. Die DHCP-Konfiguration wird nun auf diesem Server wiederhergestellt, anschließend wird der Dienst automatisch beendet und neu gestartet.

dhcp

 

Andere Möglichkeiten für einen Failover des Windows DHCP-Servers wären z.B.

Cold-Standby

  • Es werden zwei DHCP-Server installiert, der DHCP-Dienst ist nur auf einem der Server aktiv.
  • Sicherung der DHCP-Datenbank auf dem aktiven DHCP-Server erfolgt per Hand.

Slitscope (Bereichaufteilung)

  • Es werden zwei DHCP-Server installiert, der DHCP-Dienst auf beiden ist aktiv.
  • Jeder der Server bekommt einen eigenen Adressbereich, bzw. jeweils einen Teil des vorgesehenen Adressbereichs.
  • Die Antwortzeit des zweiten DHCP-Servers wird höher eingestellt als die des ersten.
  • Nicht überall einsetzbar.

Windows Failover-Cluster

  • Die DHCP-Datenbank liegt auf einem freigegebenen Speicher, sodass alle Clusternodes darauf zugreifen können.
  • Failover-Cluster ist ein recht komplexes Thema, ob man diese Form der Ausfallsicherheit wirklich braucht muss man sich gut überlegen.

Windows 7 – Desktopsymbole einzeln per GPO ausblenden

Per GPO ist es unter Windows 7 bis jetzt nicht möglich per direkter Einstellung einzelne Desktopsymbole ein- oder auszublenden. Es gibt nur die Möglichkeit alle Desktopsymbole ein- oder auszublenden.

Allerdings kann man über eine GPO Registry-Einstellungen setzen und das Ein- oder Ausblenden dieser Ordner (einzeln!) lässt sich über entsprechende Keys bewerkstelligen.

 

Die zugehörigen Keys

 

Hat man in einer GPO die Option „Klassisches Startmenü erzwingen“ aktiviert ist der Tree der Keys wie folgt:

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerHideDesktopIconsClassicStartMenu]

 

Ist diese Option nicht aktiviert, so lautet der Tree wie folgt:

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerHideDesktopIconsNewStartPanel]

 

Benutzerordner

“{59031A47-3F72-44A7-89C5-5595FE6B30EE}”=dword:00000001

 

Computer

“{20D04FE0-3AEA-1069-A2D8-08002B30309D}”=dword:00000001

 

Papierkorb

“{645FF040-5081-101B-9F08-00AA002F954E}”=dword:00000001

 

Netzwerk

“{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}”=dword:00000001

 

Systemsteuerung

“{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}”=dword:00000001

 

 

Wert der Keys

 

dword:00000000 = einblenden

dword:00000001 = ausblenden

 

 

Eintrag in der GPO

 

Diese Keys sollte man in der Benutzerkonfiguration einer GPO setzen, siehe Abbildung 2.

Administrator Passwort zurücksetzen (Windows Server 2008 R2 / Windows 7)

Eigentlich sollte man sein Administrator-Passwort nicht vergessen. Falls es doch einmal passiert, kann man es mit nachfolgender Anleitung ohne die Verwendung von Drittanbietertools zurücksetzen.

 

Hinweis:

Das ganze habe ich bisher unter Windows Server 2008 R2 und Windows 7 testen können (müssen ;-) ). Ich vermute, dass es unter Windows Vista und Windows Server 2008 genauso oder ähnlich geht, aber wie gesagt, bisher nicht getestet.

Ich gehe bei dieser Anleitung davon aus, dass Windows auf Laufwerk C: installiert ist.

 

Dazu wird benötig:

Eine CD oder bei einer virtuellen Maschine ein ISO des Installationsdatenträgers des Betriebssystems.

 

Schritt 1 – Öffnen einer cmd über die Computerreparaturoptionen:

Nach dem Einlegen des Installationsdatenträgers muss davon gebootet werden, das erste Fenster einfach mit “Weiter” überspringen.

Im nächsten Fenster auf “Computerreparaturoptionen” klicken.

Im nächsten Fenster die erste Checkbox und die zutreffende Betriebssysteminstallation auswählen, anschließend auf “Weiter” klicken.

Im nächsten Fenster auf “Eingabeaufforderung” klicken, es öffnet sich eine cmd.

 

Schritt 2 – Utilman durch eine cmd ersetzen:

In der cmd folgende Befehle eingeben:

Anschließend einen Neustart des Systems durchführen, diesmal nicht vom Datenträger booten.

 

Schritt 3 – einen temporären administrativen User anlegen:

Nach dem Neustart des Systems im Willkommensfenster unten links auf den Button klicken.

Daraufhin öffnet sich nun eine cmd. Diese cmd hat systemweite Rechte, man könnte also viel damit anstellen :-) .

In der cmd wird nun ein User angelegt, der der Gruppe der Administratoren angehört:

 

Syntax des ersten Befehls:

net user <username> <password> /add

 

Syntax des zweiten Befehls:

net localgroup “Administratoren” <username> /add

 

Die cmd kann nun geschlossen werden.

 

Schritt 4 – ändern des Administrator-Passwortes:

Im Willkommensfenster kann man sich jetzt mit dem neu angelegten User anmelden. Da dieser der Gruppe der Administratoren angehört, kann man das Passwort des Administrators ganz einfach über die Systemsteuerung ändern.

(die Beschreibung dessen spar ich mir jetzt mal)

 

Schritt 5 – Utilman wieder herstellen:

Schritt eins wiederholen!

Anschließend in der so geöffneten cmd folgende Befehle eingeben:

Man kann zwar auch im real-System über eine cmd, die via “Als Administrator ausführen” öffnet, die temporäre Utilman.exe löschen, die Utilman.exe.old lässt sich so aber nicht umbenennen. Ich kenne noch keinen weg, der an Schritt 1 vorbeiführt.

Remoteserver-Verwaltungstools (RSAT)

Diese Tools ermöglichen es dem Administrator seine Windows Server-Landschaft bequem von seiner Workstation aus zu managen (MSTSC hat ausgedient ;-) ). Insbesondere bei der Nutzung des Core-Servers von Micrsosoft sind diese Tools für die Konfiguration einiger Funktionen sehr nützlich, wenn nicht sogar unabdingbar.

 

Installation:

Die Remoteserver-Verwaltungstools (RSAT) können von Microsoft heruntergeladen werden. Die aktuelle Version für Windows 7 gibt es hier (aktuell als der Artikel geschrieben wurde).

Nach der Installation dieses Patches können die einzelnen Verwaltungstools über die Systemsteuerung hinzugefügt werden. Zu finden ist die Instalaltion dieser Tools unter Systemsteuerung -> Programme und Funktionen -> Windows Funktionen aktivieren oder deaktivieren (siehe Abbildung).

Nun einfach die Funktionen anklicken die man in seiner Umgebung benötig, in meinem Fall fast alle..

..und mit OK bestätigen. Anschließend erfolgt die Installation. Je nachdem welche Verwaltungstools installiert werden, wird danach ein Neustart erwartet.

 

Nutzung:

 

MMC

In einer MMC können nun eine ganze Menge mehr Snap-Ins hinzugefügt werden als vorher. Dazu muss eine MMC (Ausführen: mmc) geöffnet und die Snap-Ins können wie in folgender Abbildung zu sehen hinzugefügt werden:

 

Server Manager

Wenn dieser mitinstalliert wurde, steht nun auch der Servermanager zur Verfügung, denn man schon vom Desktop des Windows Server 2008 her kennt:

Nach dem öffnen wird der Name oder die IP-Adresse des Remote-Computers verlangt und anschließend stehen die auf dem Server installierten Rollen und Funktionen zur Verwaltung bereit.

Der Remote-Zugriff über den Server Manager muss jedoch zuvor auf dem Server erlaubt werden. Dies geschieht unter Eingabe des Befehls “winrm quickconfig” in der CMD (evtl. Abfragen bestätigen!).

 

Verwaltung

Auch in der Systemsteuerung unter Verwaltung stehen nun einige Verknüpfungen mehr zur Verfügung als zuvor:

Dadurch öffnet sich direkt eine MMC mit dem entsprechenden Snap-In.

 

Hinweis:

 

Es lassen sich nicht alle Rollen und Funktionen remote verwalten oder nur eingeschränkt. Im Moment fällt mir dazu z.B. WSUS ein.

printf “Hallo Welt!”;

Willkommen auf meinem Blog!

 

Der Grund für diesen Blog ist ganz einfach..

Ich profitiere jeden Tag von dem Wissen, was andere Leute im Internet teilen. Egal ob es beruflich oder privat ist.

Daher möchte ich nun mit diesem Blog meinen Beitrag zu diesem Wissens-Sharing leisten.

Von jetzt an wird hier von Zeit zu Zeit immer wieder etwas Neues zu lesen sein.

 

Viel Spaß!

 

PS:

Eine Domain folgt noch.