Mount-Skripte

Mit Mount-Skripten kannst du auch komplexe Profilaktionen in Umgebungen ausführen, in denen Benutzerprofile in sogenannten Profil-Containern gespeichert sind. Über Mount- und Unmount-Skripte öffnest du gezielt die Containerdatei und stellst der jeweiligen Aktion einen neuen Profilpfad zur Verfügung, der auf den gemounteten Container zeigt. So lassen sich auch Sonderfälle, wie z. B. FSLogix oder Citrix Profile Container, vollständig unterstützen.

Skript-Argumente

In der Konfiguration (siehe Die Liste mountCommands) kannst du deinem Skript beliebige Argumente übergeben und dabei Platzhalter wie {profilePath} verwenden. Dieser Platzhalter wird beim Aufruf mit dem Netzwerkpfad ersetzt, der dem Assistenten übergeben wurde.

Beispiel-Konfiguration:

<Module name="UserProfile">
    (...)
    <List name="mountCommands">
        <ListEntry>
            <Value name="event">mount</Value>
            <Value name="program">powershell.exe</Value>
            <Value name="arguments">C:\AssistantScripts\mount_script.ps1 "{profilePath}"</Value>
        </ListEntry>
        <ListEntry>
            <Value name="event">unmount</Value>
            <Value name="program">powershell.exe</Value>
            <Value name="arguments">C:\AssistantScripts\unmount_script.ps1 "{mountPath}" "{mountResultValue}"</Value>
        </ListEntry>
    </List>
    (...)
</Module>

Beim Unmount-Skript stehen dir neben {profilePath} zwei weitere Platzhalter zur Verfügung:

  • {mountPath} – wird durch den Pfad ersetzt, den dein Mount-Skript zurückgegeben hat.

  • {mountResultValue} – enthält den Wert aus dem Feld value deines Mount-Skripts. So kannst du z. B. Tokens, IDs oder sonstige Parameter für den Unmount-Vorgang gezielt übergeben.

Skriptausgabe (JSON)

Dein Mount- oder Unmount-Skript muss als Ausgabe ein JSON-Objekt liefern. Die enthaltenen Felder sind in den folgenden Tabellen beschrieben. In der Spalte „Erfolg“ siehst du, welche Felder bei erfolgreicher Ausführung nötig sind, in der Spalte „Fehler“ die für Fehlerfälle.

Erforderlich - muss vorhanden sein.

Darf nicht vorhanden sein.

Optional.

Allgemeine Felder

Feld

Erfolg

Fehler

Beschreibung

status

Muss immer enthalten sein. Werte: success oder failure.

reason

Nur im Fehlerfall. Begründung für das Scheitern, wird im Assistenten angezeigt.

trace

Optionales Feld für ausführliche Fehlersuche (wird ins Log geschrieben).

warning

Optional. Zeigt Hinweise an, die im Log protokolliert werden.

info

Optional. Zusätzliche Informationen für das Log.

Zusätzliche Felder für Mount-Skripte

Ein Mount-Skript benötigt folgende zusätzliche Felder in der Ausgabe:

Feld

Erfolg

Fehler

Beschreibung

path

Absoluter Pfad zum gemounteten Profil (z. B. UNC-Pfad), auf dem die Aktion arbeiten soll.

registry_path

Optional: Abweichender Pfad zur Registry-Datei, falls nicht Standard.

value

Optional: Beliebiger Wert (z. B. Token oder ID), wird an das Unmount-Skript übergeben.

Rückgabewert (Exit-Code) des Skripts

Das Skript muss immer mit Exit-Code 0 enden – egal ob erfolgreich oder mit Fehler. Fehler werden ausschließlich über das JSON-Objekt im Output kommuniziert.

Endet das Skript mit einem anderen Rückgabewert, wird der Assistent sofort mit einer Fehlermeldung (wie z.B. „The program failed with exit code 2“) abgebrochen.

Beispiel eines Mount-Skripts für FSLogix

Hier findest du ein einfaches fiktives Beispiel für ein Mount-Skript. Es erwartet als Argument den vollständigen Pfad zur VHD(X)-Datei des FSLogix-Profils (z. B. von {profilePath}). Nach erfolgreichem Mounten gibt das Skript den Laufwerksbuchstaben als neuen Profilpfad im geforderten JSON-Format zurück.

param (
    [string]$profileVHDPath
)

try {
    # Mountet die VHD(X)-Datei und gibt das DiskImage-Objekt zurück
    $diskImage = Mount-DiskImage -ImagePath $profileVHDPath -PassThru -ErrorAction Stop
    # Hole die Partition & das Volume (erster gefundener Volume)
    $diskNumber = ($diskImage | Get-DiskImage | Get-Disk).Number
    $partition = Get-Partition -DiskNumber $diskNumber | Select-Object -First 1
    $volume = $partition | Get-Volume

    $result = @{
        status = "success"
        path   = $volume.DriveLetter + ":\"
        value  = $profileVHDPath
    }
}
catch {
    $result = @{
        status = "failure"
        reason = $_.Exception.Message
    }
}
$result | ConvertTo-Json

Beispiel eines Unmount-Skripts (FSLogix)

Das Unmount-Skript erwartet als Argument wieder den Pfad zur VHD(X)-Datei (den es vom Mount als value erhält). Es hängt sich einfach an diesen Pfad, dismountet das Image und gibt wieder eine JSON-Antwort zurück.

param (
    [string]$profileVHDPath
)

try {
    Dismount-DiskImage -ImagePath $profileVHDPath -ErrorAction Stop
    $result = @{
        status = "success"
    }
}
catch {
    $result = @{
        status = "failure"
        reason = $_.Exception.Message
    }
}
$result | ConvertTo-Json