Enteo, Powershell, ReInstall

boxJetzt wo wir einen Rechner per Powershell aufwecken können kommt als nächstes die Funktion um eine Neuinstallation anzustossen und sie wieder abzubrechen.

Der Abbruch ist deswegen relevant, da u.U. das WoL nicht funktioniert. Startet der Benutzer am nächsten Morgen den PC wieder ganz normal an, so würde die Installation direkt startet und er könnte ein paar Stunden nicht arbeiten. Daher stoppt das Script die Installation automatisch, falls sie nicht innerhalb eines bestimmten Zeitfenster gestartet werden konnte.

Abgebrochen wird die Installation “zur Sicherheit” auf zwei Wegen: Zuerst wird das Computerkonto im Enteo deaktiviert. Danach wird über die Policy-ID die entsprechende OS Installation gestoppt. Diese Policy_ID kann man über Powershell ermitteln, indem man z.B. alle an einem zur Reinstallation vorgesehenen PC angehängten Policies ausgeben lässt und die gewünschte Policy anhand des Namens identifiziert. Natürlich muss die Funktion zum Anstossen der Installation diese Policy auch wieder aktivieren.

Nachfolgend die Funktion zum Starten des OS-Rollouts: Beide Funktionen benötigen als Übergabeparameter des EmDB-Computer Objekt der NWC Powershell Bibliothek:

function doReinstall
{param($PC,[string]$WOL)
      Reinstall-EmdbComputer $PC.path -StartImmediately -RecalculateInstallationOrder | out-null
      $policy=(Get-EmdbPolicyInstance $pc | where {$_.AssignedObjectID -eq $PolicyToDeactivate})
      $policy.isActive=$true
      $policy.update()
}

In Zeile 3 wird die eigentliche Neuinstallation des PCs angestossen. Die Umleitung nach out-null unterdrückt die Ausgabe der Funktion und ermöglicht so eine sauberere Protokollierung. Interessanter wird es in Zeile 4.
EmdbPolicyInstance ist die Verbindung zwischen einem Objekt (PC) und der zugeordneten Policy. Anhand der Policy ID (AssignedObjectID) kann die beim Stoppen deaktivierte Policy ermitteln und sicherheitshalber wieder aktiviert werden. Ändert man direkt Eigenschaften eines Objekts so müssen diese Änderungen per update() wieder zurückgeschrieben werden. Führt man eine Methode wie Reinstall-EmdbComputer aus, so ist dies nicht notwendig.

Und nun die Funktion zum Stoppen einer Installation:

function doStopInstall
{param($pc)
 $pc.deactivate()
 $policy=(Get-EmdbPolicyInstance $pc | where {$_.AssignedObjectID -eq $PolicyToDeactivate})
 $policy.isActive=$false
 $policy.update()
}

Diese Funktion ist analog zur obigen aufgebaut. Zuerst wird der PC deaktiviert. Danach wird erneut die PolicyInstance gesucht und ebenfalls deaktiviert.

This entry was posted in Deutsch, Powershell and tagged , , , , . Bookmark the permalink.

Leave a Reply