Schlagwort-Archive: Windows Server 2012

PowerShell Script zur Ermittlung der Festplatten-Kapazitäten

Dieses PowerShell Script kann mehr oder weniger automatisch die Festplattengrößen und deren Belegung von mehreren Server ermitteln. Die Ergebnisse werden in eine Exceltabelle geschrieben. Dazu wird eine auf die jeweilige Umgebung leicht anpassbare Excel-Vorlage benötigt. Die Excelvorlage können Sie am Ende dieses Beitrags herunterladen. Zunächst definieren wir unser Umgebung:

$server1 = "P804VOE010"
# Array der zu untersuchenden server
$server = 0..14
$Filepath ="D:\temp\Excel\"
$ExcelFile =$Filepath + "PlattenKapazitaet1.xlsx"
$TableName1 = $server1

In Zeile 1 geben wir den Namen des Servers an auf dem das Script läuft oder getestet wird. Zeile 3 belegt die Array-Variable $server mit Dummy-Inhalten. In den Zeilen 4 und 5 benennen wir die zuvor angelegten und mit entsprechenden Rechten ausgestatteten Speicherorte unseres Scripts sowie der Excel-Definitions- und Ergebnisdatei.

Als erstes werden mit der nachstehenden Funktion die gewünschten Server aus der Excelvorlage ausgelesen.

function ServerListeAusTab {
# Beteilgte Server aus Tab Server auslesen
# Variable
$TableName="Server"
[int]$Zeile = 1
[int]$Spalte = 1
#Instanzieren eines COM-Objektes für Excel
$Excel = New-Object -ComObject excel.application
#Excel-Sheet sichtbar machen, heißt, ob es im Vordergrund oder im Hintergrund geschehen soll.
$Excel.Visible = $false
# Arbeitsmappe laden
$Workbook = $Excel.Workbooks.Open($ExcelFile)
$Table =$workbook.Worksheets.Item($TableName)
# Datei auslesen und zu untersuchende Server ermitteln und in das Array $server[x] schreiben

do { $Data = $Table.Cells.Item($Zeile,$Spalte).Text
$server[$Zeile-1]=$Data
echo $server[$Zeile-1] $Zeile++ }
while($Table.Cells.Item ($Zeile,$Spalte).Text.Length -gt 0)

echo "Speichern und Schliessen Serverliste"
$Excel.DisplayAlerts=$False
$Workbook.SaveAs($ExcelFile)
#COM-Objektes beenden
$Excel.Quit()
#COM-Objektes aus dem Speicher entfernen
[System.Runtime.Interopservices.Marshal]::Release
ComObject($excel)
# Ende der Funktion Server-Liste aus Tab
} 

In der vorstehenden Funktion werden aus der Excel-Vorlage aus dem Tab Server und von dort aus der ersten Spalte die Namen der zu untersuchenden Server ausgelesen. Ab Zeile 9 werden die Variable für Namen des Tabs sowie die Startpunkte für Zeile und Spalte definiert. Ab Zeile 13 wird die Arbeitsmappe im Hintergrund geöffnet. Ab Zeile 20 werden in einer do/while-Schleife die Servernamen aus dem Tab Server ausgelesen und in das Array $server[0] bis [$Zeile-1] geschrieben. Und das solange die Länge des Servernamens  > 0 ist. Die echo-Ausgaben dienen lediglich dem besseren Verständnis und Kontrollzwecken. Ab Zeile 27 wird die Excel-Arbeitsmappe wieder geschlossen.

Damit alles wie geplant funktioniert, ist die Excel-Vorlage so zu bearbeiten, dass Sie für jeden Server ein eigener vorformatierter Tab mit dem gleichem Namen des jeweiligen Servers enthalten ist.
Nachstehende Bilder soll dies verdeutlichen.

Die folgende  Funktion ermittelt die Plattengrößen, sowie den freien Speicherbereich pro Festplatte und schreibt die Ergebnisse pro Server in den gleichnamigen Tab der Excelvorlage.


# Freie Zeile im Tab $server1 ermitteln
echo $ExcelFile
# Variablen
[int]$Zeile = 2
# ab 2, da in Zeile 1 die Titel stehen
[int]$Spalte = 1
$TableName1 = $server1

#Instanzieren eines COM-Objektes für Excel
$Excel = New-Object -ComObject excel.application
#Excel-Sheet sichtbar machen, heißt, ob es im Vordergrund oder im Hintergrund geschehen soll.
$Excel.Visible = $false
#Arbeitsmappe laden
$Workbook = $Excel.Workbooks.Open($ExcelFile)
$Table =$workbook.Worksheets.Item($TableName1)

# Datei auslesen und erste Freie Zelle in Spalte 1 ermitteln
do {
$Data = $Table.Cells.Item($Zeile,$Spalte).Text
$Zeile++
}
while($Table.Cells.Item($Zeile,$Spalte).Text.Length -gt 0)

echo ("Tabelle " + $TableName1)
echo ("Spalte "+ $Spalte)
echo ("Freie Zeile " + $Zeile)

$Inhalt1 = "Festplatten auf Server "
$Inhalt1 = $Inhalt1 + $server1
$Inhalt1 = $Inhalt1 + $date1 + &amp;quot;<code>r</code>n&amp;quot;
$i=0

$datum1 = (Get-Date).ToShortDateString()
$zeit1 = (Get-Date).ToShortTimeString()
$date1 = &amp;quot; Datum: &amp;quot; + $datum1 + &amp;quot; Zeit: &amp;quot; + $zeit1 + &amp;quot; Uhr&amp;quot;
# echo $date1

#$frei1 = Get-WmiObject -Class Win32_LogicalDisk -computer $server1 -Filter &amp;quot;DriveType=3&amp;quot; | Format-Table @{Label=&amp;quot;Drive&amp;quot;; Expression={$_.DeviceID}; width=8}, @{Label=&amp;quot;Size&amp;quot;; Expression={$_.Size / 1GB}; Format=&amp;quot;000.0&amp;quot;; width=8}, @{Label=&amp;quot;GB Free&amp;quot; ; Expression={$_.FreeSpace/1GB} ; Format=&amp;quot;000.0&amp;quot; ; width=8} , @{Label=&amp;quot;% Free&amp;quot; ; Expression={$_.FreeSpace * 100 /$_.Size}; Format=&amp;quot;00.0&amp;quot; ; width=10}
$frei1 = Get-WmiObject -Class Win32_LogicalDisk -computer $server1 -Filter &amp;quot;DriveType=3&amp;quot;

# Festplatten pro Server
ForEach($frei1 in $frei1) {
$Inhalt1 = $Inhalt1 + &amp;quot;Device &amp;quot; + $frei1.DeviceID + &amp;quot; - Size &amp;quot; + (&amp;quot;{0:N2}&amp;quot; -f ($frei1.Size / 1GB )) + &amp;quot; GB - Free &amp;quot; + (&amp;quot;{0:N2}&amp;quot; -f ($frei1.FreeSpace / 1GB)) + &amp;quot; GB&amp;quot; + &amp;quot;<code>r</code>n&amp;quot;

$Table.Cells.Item($Zeile,1) = $server1
$Table.Cells.Item($Zeile,2) = $datum1
$Table.Cells.Item($Zeile,3) = $Zeit1

$Table.Cells.Item($Zeile,4+$i) = $frei1.DeviceID
$Table.Cells.Item($Zeile,5+$i) = (&amp;quot;{0:N2}&amp;quot; -f ($frei1.Size / 1GB ))
$Table.Cells.Item($Zeile,6+$i) = (&amp;quot;{0:N2}&amp;quot; -f ($frei1.FreeSpace / 1GB))
$i=$i+4
}

echo &amp;quot;Speichern und Schliessen&amp;quot;
$Excel.DisplayAlerts=$False
$Workbook.SaveAs($ExcelFile)
#COM-Objektes beenden
$Excel.Quit()
#COM-Objektes aus dem Speicher entfernen
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

echo $Inhalt1
# Ende Funktion PlattenSize
} 

Ab der Zeile 37 werden die Variablen definiert und ab der Zeile 45 wird die Excel Arbeitsmappe im Hintergrund geöffnet.  Ab Zeile 53 wird die erste freie Zeile in der do/while-Schleife ermittelt. Die Zeilen 60 bis 67 dienen lediglich Verständnis und Kontrollzwecken bei der manuellen Ausführung des PowerShell Scripts. Ab der Zeile 69 wird das Datum zur Ausführungzeit ermittelt und formatiert der Variablen $datei1 zugewiesen. Zeile 75 bedient sich zum Ermitteln der interessierenden Festplatten dem Befehl Get-WmiObject. Dabei werden als Parameter der Servername und der Festplattentyp übergeben. Die Ergebnisse stehen dann im Array ab $frei1[0] zur Verfügung und werden in ForEach-Schleife Zeile 78 bis 89 pro Festplatte des Servers abgefragt.  Zeile 79 dient wieder zu Kontrollzwecken. Die Zeilen 81 bis 88 beschrieben den Tab des jeweiligen Servers $server1. Ab Zeile 91 wird die Excel Arbeitsmappe wieder geschlossen.

Das Main Programm ruft die Funktionen  ServerListeAusTab als erstes in Zeile 103 auf. Danach wird die Funktion PlattenSize in der do/while-Schleife solange  auf gerufen, bis alle erreichbaren Server (Zeile 108) abgearbeitet sind.

 echo &quot;main&quot;
ServerListeAusTab
$j=0
do {
$server1 = $server[$j]
echo $server1
$ServerErreichbar = Test-Connection -computername $server1 -quiet
if ($ServerErreichbar) {
	PlattenSize
	}
	else {
	#nix
}
echo (&quot;Zähler &quot; + $j)
echo (&quot;Länge Servername &quot; + $server[$j].Length)
$j++
}
while($server[$j].Length -gt 0)
echo &quot;ende main&quot;
# ******************** 

Über die Aufgabenplanung kann das Script regelmäßig aufgerufen werden und damit die Festplattenkapazitäten regelmäßig protokolliert werden.

Folgende anpassbare Excel-Vorlage wird benötigt und kann hier heruntergeladen werden. [wpdm_file id=1] Das Password kann beim Autor hier angefordert werden.

Der zweite Download enthält die Excel-Vorlage und das PowerShell Script aus einem angepasstem Projekt in gezippter Form.[wpdm_file id=2]Das Password kann beim Autor hier angefordert werden.

Anleitung Windows Server-Sicherung mit mehreren Festplatten

Das Feature Windows Server-Sicherung (ab Windows Server 2008) besteht aus einer GUI (Bild1) sowie dem Befehlszeilentools (wbadmin).  Beide zusammen bieten einen  Baustein für die Lösung der tägliche Sicherungs- und Wiederherstellungsaufgaben.

Die Software ermöglicht die vollständige Sicherung des Systems auf einen externen Datenträger (bspw. eine USB-Festplatte) oder einer Freigabe im Netzwerk. Bandlaufwerke werden nicht unterstützt. Für die Wiederherstellung einzelner Dateien ist zwar die Windows Server-Sicherung nur suboptimal jedoch im Disaster-Recovery-Zwecke kann es aber nahezu perfekt sein. Vertiefende Aspekte dazu finden Sie u.a. in Bents Blog.

GUI Windows Server-Sicherung
Bild1 GUI

Hinweise zur Erstellung und Bearbeitung des Windows Sicherungszeitplans über die GUI findet man bei Microsoft hier.

Ab Windows Server 2012 können Sie auch ein weiteres Back-up Ziel in der GUI hinzufügen . Wählen Sie dazu auf der Seite Zieldatenträger auswählen die Datenträger aus, die Sie zum Speichern der Sicherungen verwenden möchten, und klicken Sie dann auf Weiter.

GUI2
Bild2 GUI 2 Backup Datenträger hinzufügen

In der Standardeinstellung werden die infrage kommenden Datenträger in der Liste angezeigt. Bei diesen Datenträgern handelt es sich um externe Datenträger, auf die Sicherungen für Notfälle außerhalb des Brandabschnittes in dem die zu sichernde Maschine steht – aufbewahrt werden können. Wenn die Liste leer ist oder die gewünschten Datenträger nicht aufgeführt sind, klicken Sie auf Alle verfügbaren Datenträger anzeigen. Aktivieren Sie in Alle verfügbaren Datenträger anzeigen die Kontrollkästchen neben den Datenträgern, die Sie zum Speichern der Sicherungen verwenden möchten, und klicken Sie auf OK. Aktivieren Sie dann unter Zieldatenträger auswählen erneut die Kontrollkästchen für die Backup-Datenträger.

GUI3
Bild3 GUI3

Die betreffenden Datenträger werden im Windows-Explorer nicht mehr angezeigt, um zu verhindern, dass Daten versehentlich auf den Datenträgern gespeichert und später überschrieben werden und um versehentliche Datenverluste zu vermeiden.

GUI4
Bild4 GUI4

Bewährte Praxis ist die Bezeichnungen der GUI (Beschriftungsinformationen) zu notieren und an jedem externen BackUp-Datenträger physikalisch anzubringen.

Für ältere Systeme kann man sich wie folgt helfen: Wenn man mehrere (Wechsel-)Festplatten für die Datensicherung nutzen möchte, ist die Konfiguration jedoch unter Umständen nicht über die GUI möglich, sondern muss über die Konsole (cmd oder Power Shell) erfolgen.

Windows Server-Sicherung – Wechsel-Festplatten hinzufügen

a. Zuerst die Sicherung via GUI mit dem ersten Sicherungsziel erstellen
b. Jetzt das erste Sicherungsziel (erster Backup-Datenträger) entfernen und den zweiten Backup-Datenträger (zB USB-Festplatte) anschließen.
c. Konsole (PowerShell) als Administrator ausführen
d. Jetzt folgenden Befehl gemäß Bild2 eingeben:

> wbadmin get disks
Bild2 wbadmin
Bild3 wbadmin

Nach einer kurzen Zeit wird eine Liste mit allen Datenträgern angezeigt.

e. Merke oder notiere dir nun die Datenträger-ID der externen Festplattee

f. Nun wird die externe HDD als Sicherungsziel hinzugefügt:

>wbadmin enable backup -addtarget:{0005f107-0000-0000-0000-000000000000}

Die nun folgenden Abfragen mit Ja oder Nein beantworten.

Die Schritte b-f muss man nun für alle Backup-Datenträger durchführen.

Mein Fazit
Auf Grund der Möglichkeit der Sicherung eines Systems zur Laufzeit und der Integration im Betriebssystem (Sicherung und Wiederherstellung) begeistert das quasi kostenlose Produkt. Die sinnvolle Integration in ein mehrstufiges Sicherungskonzept ist leicht möglich.

Typischerweise sichert man Serversysteme immer mehrfach: mit Hilfe der Windows Server-Sicherung zu Recovery-Zwecken und zusätzlich auf Mail-,  Datenbank- und Datei-Ebene mit weiteren Technologien und Backup-Produkten. Man/frau sollte immer bedenken: Eine Wiederherstellung kann immer nur dann zügig funktionieren, wenn bereits im Vorfeld verschiedenste Aspekte bedacht und Rücksicherungen auch erprobt wurden.

Ende!