Installation von BackupAssist (5.3) unter Hyper-V R2

Und so geht’s:

  • Zunächst einmal laden wir das aktuelle Installationsprogramm für den Server 2008 Core herunter: http://www.backupassist.com/downloads/releases/latest/BA_core.exe
  • Jetzt kopieren wir ihn (per adminstrativer Freigabe \\hyperv01\c$) auf den Server, z.B. nach c:\tempinstall\BA_core.exe
  • Jetzt melden wir uns per Remotedesktop auf dem Hyper-V R2 Server an und gehen in die Kommandozeile, gefolgt von “c:\tempinstall\BA_core.exe”
  • Klick auf “Ja”
  • Eingabe von “J” statt des geforderten “Y” !, hier wurde schlampig mit der Übersetzung umgegangen
  • Den Popup-Dialog mit OK bestätigen
  • Die Fehlermeldung mit “abbrechen” wegklicken und nicht weiter darüber wundern
  • Jetzt dauert es entgegen der optimistischen Zeitangabe recht lange, bis .NET fertig istalliert ist, keine Angst, das ist OK so ;-)
  • Die nächste Meldung bestätigen wir wieder mit ”J” statt “Y” (falls wir die Imaging-Technologie in BackupAssist verwenden wollen)
  • Die nächste Meldung können wir noch mal mit “J” bestätigen und schon startet BackupAssist und kann iwe gewohnt konfiguriert werden. Wenn wir BackupAssist später einmal von der Kommandozeile aufrufen wollen, genügt dafür (mal wieder entgegen der Angabe von BackupAssist) der Befehl “c:\Program Files (x86)\BackupAssist v5\BackupAssist.exe”
  • Fertig

Teil 6: Erstes Gastsystem (SBS2008SP2) installieren

Auf dem Server (z.B. per Remotedesktop)

  1. Ordner für virtuelle Festplatten und Systeme anlegen
    1. In die cmd-shell wechseln
    2. d:
    3. mkdir VirtuelleFestplatten
    4. mkdir VirtuelleComputer

Auf dem Client

  1. Die virtuellen PCs einrichten
    1. Start -> Hyper-V-Manager
    2. Aktion -> Verbindung mit dem Server herstellen -> HYPERV01 -> OK
    3. Aktion -> Hyper-V-Einstellungen
      1. Speicherort für virtuelle Festplatten:
        Von “C:\Users\Public\Documents\Hyper-v\Virtual Hard Disks” nach “D:\VirtuelleFestplatten” ändern
      2. Speicherort für virtuelle Computer:
        Von “C:\ProgramData\Microsoft\Windows\Hyper-V” nach “D:\VirtuelleComputer” ändern
      3. Benutzer -> Benutzeranmeldeinformationen -> Haken entfernen
      4. OK
    4. Aktion -> Manager für virtuelle Netzwerke
      1. Neues virtuelles Netzwerk
      2. Extern -> Hinzufügen
      3. Name: HYPERVNETZ
      4. OK
      5. Ja
    5. Aktion -> Neu -> Virtueller Computer
      1. Weiter
      2. Name: SRV01-SBS2008, Weiter
      3. Arbeitsspeicher: 10240 MB, Weiter
      4. Verbindung: HYPERVNETZ, Weiter
      5. Größe: 180GB
      6. Weiter
      7. Fertigstellen
    6. Rechtsklick auf SRV01-SBS2008 -> Einstellungen
      1. Prozessor
        1. Anzahl logischer Prozessoren: 4
        2. Reserve für virtuellen Computer: 50%
      2. IDE-Controller 0 -> Festplatte
        1. Bearbeiten
          1. Konvertieren, Weiter
          2. D:\VirtuelleFestplatten\SRV01-SBS2008-fixed.vhd, Weiter
          3. Jetzt ist Windows erst einmal längere Zeit beschäftigt. Zeit, sich mal wieder einen Kaffee zu machen ;-)
      3. SCSI-Controller -> Controller entfernen
      4. Automatische Stoppaktion -> Gastbetriebssystem herunterfahren

Auf dem Server

  1. SBS2008SP2-CD einlegen

Auf dem Client

  1. Rechtsklick auf “SRV01-SBS2008″ -> Verbinden
  2. Aktion -> Starten
  3. Jetzt wieder das übliche bei einer Windows Installation: Sprache auswählen, ein paar mal weiter klicken, eine Partition mit 100GB erstellen, den CD-Key (virtual) eingeben und los geht’s.

Windows XP Mode in Domäne: “Die lokale Richtlinie erlaubt es nicht, sich interaktiv anzumelden.”

Der XP Mode von Windows 7 lässt sich nach Installation des .NET-Frameworks problemlos in eine Domäne integrieren (hier SBS 2008). Versucht man aber nun, sich mit einem normalen Benutzeraccount anzumelden, kommt die freundliche Fehlermeldung

Die lokale Richtlinie erlaubt es nicht, sich interaktiv anzumelden.

Eine mögliche Lösung des Problems ist es, in der SBS 2008 Verwaltungskonsole den entsprechenden Benutzeraccount zu öffnen und ihm dem Virtuellen Computer als Lokaler Administrator zuzuweisen. In meinem fall ist das ohnehin nötig, da der XP Mode für ein altes CAD Programm benötigt wird, das nur mit Administratorrechten korrekt läuft. Problem gelöst :-) Sollte es andere / bessere Möglichkeiten geben, schreibt doch einfach Kommentare ;-)

Einrichten einer APC Smart UPS unter Hyper-V R2

Da der Einsatzzweck hier ein Server ist, auf dem SBS 2008 und Server 2008 ausgeführt wird, sollen die virtuellen Maschinen nicht in den Ruhezustand versetzt, sondern heruntergefahren werden. Das geht wie folgt:

  • Für die jeweiligen VMs im Hyper-V-Manager unter “Automatische Stoppaktion” Herunterfahren auswählen
  • APC SmartUPS per USB-Kabel an den Hyper-V Server anschließen, wird automatisch als Batterie erkannt
  • Folgendes Script auf den Server kopieren als “c:\scripts\ups_shutdown.vbs” (Quelle 1 / Quelle 2):

—– Codebox starts here

Set objWMIService = GetObject(“winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\” & strComputer & “\root\cimv2″)
set batteryColl = objWMIService.ExecQuery(“select * from Win32_Battery”)
set osColl = wmi.ExecQuery(“select * from Win32_OperatingSystem”)

while true
for each battery in batteryColl
battery.Refresh_
if battery.batteryStatus = 1 and battery.EstimatedChargeRemaining = 60 then
for each os in osColl
os.Win32Shutdown 1
next
end if
next
wscript.Sleep 15000
wend

—– Codebox ends here

  • Folgendes Script auf den Server kopieren als “c:\scripts\ups_shutdown.cmd”:

—– Codebox starts here

@echo off
echo %date% %time% – Starting ups_shutdown as %username% >> c:\scripts\ups_shutdown.log
cscript //nologo c:\scripts\ups_shutdown.vbs %1 >> c:\scripts\ups_shutdown.log
echo %date% %time% – Exiting ups_shutdown unexpectedly! >> c:\scripts\ups_shutdown.log

—– Codebox ends here

Bei Belieben kann das Script natürlich angepasst werden.

  • wscript.sleep 15000 sorgt dafür, dass alle 15 Sekunden geprüft wird
  • … .EstimatedChargeRemaining <= 60 … gibt an, dass das System heruntergefahren wird, wenn die Batteriekapazität unter 60% kommt (bei unserer UPS ist das nach ca. 20-30min der Fall, bleibt also noch genug Zeit, um den Server in Ruhe herunterzufahren)
  • os.Win32Shutdown 1 steht für normales Herunterfahren – alternativ möglich:
    • os.Win32Shutdown 0 – Abmelden
    • os.Win32Shutdown 1 – Herunterfahren
    • os.Win32Shutdown 2 – Neustart
    • os.Win32Shutdown 4 – Abmelden trotz  geöffneter Programme
    • os.Win32Shutdown 5 - Herunterfahren trotz  geöffneter Programme
    • os.Win32Shutdown 5 - Neustart trotz  geöffneter Programme
    • os.Win32Shutdown 8 – PC abschalten
    • os.Win32Shutdown 12 - Abschalten trotz  geöffneter Programme

Um auf dem Server von der Commandline aus herauszufinden, wie voll die UPS geladen ist und ob sie gerade lädt oder entlädt, eignet sich folgendes script, welches dann unter “c:\scripts\ups_status.vbs” gespeichert wird:

—– Codebox starts here

strComputer = “.”
set objWMIService = GetObject(“winmgmts:{impersonationLevel=impersonate}\\” & strComputer & “\root\cimv2″)
set batteryColl = objWMIService.ExecQuery(“select * from Win32_Battery”)

for each battery in batteryColl
battery.Refresh_
wscript.Echo “Name / Description: ” & battery.Name & ” / ” & battery.Description
wscript.echo “Battery Status (1 = Discharging, 2 = Charging): ” & battery.batteryStatus
wscript.echo “Estimated Charge Remaining (%): ” & battery.EstimatedChargeRemaining
next

—– Codebox ends here

  • Aufrufen kann man es z.B. durch folgende Batchdatei (“c:\scripts\ups_status.cmd”):

—– Codebox starts here

@echo off
cscript //nologo c:\scripts\ups_status.vbs %1

—– Codebox ends here

Möchte man nun auch noch eine E-Mail Benachrichtigung im Fall eines stromausfallbedingten Herunterfahrens bekommen, kann man dafür folgendes PowerShell Skript verwenden (Quelle, habe ich selbst noch nicht getestet!):

—– Codebox starts here

# ups_monitor.ps1 loops forever, checking CIM Battery Class every 60 seconds.
# On power failure, it sends status updates each minute via SMTP until shutdown,
# and one email if power is restored before shutdown.

# Initialize Variables
# Shutdown threshold at 50% of remaining UPS capacity
$threshhold = 50
$interval = 60
$OnBattery = 0
$Event = 0

$hostname = hostname

# Create SMTP client
$Server = “smtp.firma.de
$Port = 25
$Client = New-Object System.Net.Mail.SmtpClient $Server, $Port

$Client.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

$To      = admin@firma.de
$From    = hyperv01@firma.de

# Loop on Battery Query
while (1)
{
$bat = get-wmiobject -class CIM_Battery -namespace “root\CIMV2″
$batstatus = $bat.batterystatus
$batcapacity = $bat.estimatedchargeremaining
$timetoshutdown = $bat.estimatedruntime/2

if ($batstatus -eq 1)
{
$Event = 1
$OnBattery = 1
# “On Battery”

$Subject = “Utility Power Failure: {0} is running On UPS Battery” -f $hostname
$Body   = “UPS at {0} % remaining capacity, approximately {1} minutes before {2} shutdown.” -f $batcapacity, $timetoshutdown, $hostname

if ($batcapacity -lt ($threshhold +5) )
{
$Body = “Shutdown imminent at {0} %, with ” -f $threshhold + $Body
}

}

elseif (($batstatus -eq 2) -and ($OnBattery -eq 1))
{
$Event = 1
$OnBattery = 0
# “Power Restored”

$Subject = “Utility Power Restored to {0}.” -f $hostname
$Body   = “Battery at {0} % capacity. UPS charging… ” -f $batcapacity
}

if ($Event -eq 1) # Create mail message
{
$Event = 0
$Message = New-Object System.Net.Mail.MailMessage $From, $To, $Subject, $Body
$Message.Priority = [System.Net.Mail.MailPriority]::High
try {
$Client.Send($Message)
# “Message sent successfully”
}
catch {
“Exception caught in ups_monitor.ps1″
}
}

sleep $interval
}

—– Codebox ends here

Zuletzt muss noch das jeweilige Skript so eingerichtet werden, dass es automatisch beim Systemstart geladen wird:

  • Start -> mmc.exe -> Datei -> Snap-In hinzufügen/entfernen -> Aufgabenplanung hinzufügen -> Anderer Computer -> NAME_DES_HYPERV_PCS -> OK
  • Aufgabenplanung (NAME_DES_HYPER_V_PCS) -> Aufgabenplanungsbibliothek -> Aufgabe erstellen
  • Name: ups_shutdown-Script laden bzw. ups_monitoring-Script laden
  • Sicherheitsoptionen -> Unabhängig von der Benutzeranmeldung ausführen
  • Trigger -> Neu -> Beim Start -> OK
  • Aktionen -> Neu -> Programm starten -> c:\scripts\ups_shutdown.vbs bzw. c:\scripts\ups_monitoring.ps1 -> OK
  • Bedingungen -> Energie -> Haken bei “Aufgabe nur starten, falls Computer im Netzbetrieb ausgeführt wird” entfernen
  • Einstellungen -> Haken bei “Aufgabe beenden, falls sie länger ausgeführt wird als: 3 Tage” entfernen

Wer nicht abtippen / kopieren mag, lädt die Scripte hier: hyperv_ups_scripts.zip

Aktivieren der Remote-Verwaltung des Geräte-Managers (Hyper-V R2)

Auf einem entsprechend vorbereiteten Client folgende Schritte durchführen:

  1. Start -> mmc.exe
  2. Datei -> Snap-In hinzufügen/entfernen
  3. Gruppenrichtlinienobjekt-Editor hinzufügen -> Durchsuchen -> Anderer Computer -> Namen des Hyper-V PCs eingeben -> OK -> Fertigstellen
  4. OK
  5. Richtlinien für “NAME_DES_HYPERVPCS” -> Computerkonfiguration -> Administrative Vorlagen -> System -> Geräteinstallation -> Remotezugriff auf die Plug & Play-Schnittstelle zulassen -> Aktivieren
  6. Fertig