UAM: Übersicht und Verwendung von Shell-Apps

Die vielseitige Funktion Shell-Apps bietet die Möglichkeit, komplexe skriptbasierte Bereitstellungen für die Unified Application Management (UAM)-Bereitstellung zu erstellen. Administratoren können mehrere Komponenten über PowerShell bereitstellen und die Erkennungsskriptfunktion verwenden, um Erfolgs- oder Fehlerinformationen zur Überprüfung an die UAM-Richtlinienkonsole zurückzumelden.

Diese Funktion ist für die Verwendung mit großen oder komplexen Anwendungen vorgesehen oder dort, wo eine Bereitstellung über Winget nicht praktikabel oder erwünscht ist. Da die Funktion native PowerShell-Skripte verwendet, kann Winget bei Bedarf als Teil eines Installationsskripts aufgerufen werden.

Anwendungen, die mithilfe der Shell-Apps-Funktion bereitgestellt werden, werden ausschließlich im Systemkontext des Geräts bereitgestellt, wodurch kein Dienstkonto erforderlich ist.

Diese Funktion funktioniert ähnlich wie Nerdio Manager Scripted Actions. Wenn Sie Scripted Actions verwenden, sollte es bei der Einführung der Shell-Apps-Funktion zu keinen Komplikationen kommen.

Voraussetzungen

PowerShell-Remoting (WSMan) muss für die Zielgeräte aktiviert sein.

Einschränkungen

Shell-Apps können Intune-Geräten nicht zugewiesen werden, wenn sie Sichere Variablen enthalten.

Da es sich um eine Vorschaufunktion handelt, sind die unten aufgeführten Punkte derzeit nicht verfügbar. Diese sind für zukünftige Versionen geplant.

  • Unterstützung für Sichere Variablen: Wie bei Scripted Actions bieten Sichere Variablen die Möglichkeit, verschleierte, vordefinierte Elemente in das Skript zu übermitteln.

  • SCCM-Integration: Die Fähigkeit, skriptbasierte Installationen mit den zugehörigen Binärdateien aus verbundenen SCCM-Umgebungen zu übernehmen.

Erste Schritte

Navigieren Sie in Nerdio Manager zu Applications > Catalog > Shell Apps, um mit der Shell Apps-Funktion zu arbeiten. Siehe Unified Application Management: Shell Apps verwalten für Details.

  • Notepad ++ (.EXE) und 7-Zip (MSI) sind enthalten, wenn Sie beginnen.

  • Bereitstellungen sind in die folgenden Skriptbereiche unterteilt: Erkennung, Installation und Deinstallation. Alle Komponenten sind erforderlich, um ein gültiges Anwendungspaket zu bilden.

  • Jedes Anwendungspaket enthält einen Schalter mit der Bezeichnung Öffentlich. Dies steuert die Sichtbarkeit der Anwendung auf der Seite „Unified Catalog“ von Unified Application Management. Wir empfehlen, diesen Schalter Aus zu lassen, bis Sie Ihre Skripte fertiggestellt haben, um mögliche Deployment-Issues zu vermeiden.

Bitte lesen Sie die nachstehenden Anleitungen, um zu verstehen, wie diese Beispielskripte funktionieren und wie Sie diese wiederverwenden können, um Ihre eigenen Anwendungen mithilfe der Shell Apps-Funktion bereitzustellen.

Dateipakete

Shell Apps unterstützt bei Bedarf das Hochladen von Paketdateien. Dies ist nützlich, wenn Sie Ihre Installationsdateien einbinden möchten und nicht möchten, dass Ihre Installationsroutine Dateien aus dem Internet herunterlädt. Alle von UAM unterstützten Anwendungstypen werden für Shell App-Installationen unterstützt.

Verwendung

Wenn Sie ein hochgeladenes Installationspaket verwenden, kann dieses als Teil des Skripts unter Verwendung der integrierten Variable $Context.GetAttachedBinary() aufgerufen werden. Wenn Sie beispielsweise ein angehängtes Installationspaket installieren möchten, können Sie den folgenden Befehl verwenden:

Start-Process $Context.GetAttachedBinary() -Wait -ArgumentList "/S"

Unterstützung für ZIP-Archive

Ab Version 6.2 von Nerdio Manager unterstützt Shell Apps nun die Verwendung von .ZIP-Archiven, um eine Gruppe von Dateien als Teil des Installationsprozesses auf einem Desktop bereitzustellen. Optional können diese .ZIP-Archive für Bereitstellungsaufgaben automatisch entpackt werden.

Verwendung

Beim Importieren eines .ZIP-Archivs auf der Seite „Dateien“ von Shell Apps steht die zusätzliche Option „Entpacken“ zur Verfügung. Wenn diese Option ausgewählt ist, entpackt das Skript die komprimierten Dateien automatisch in einen temporären Ordner unter C:\Windows\Temp auf dem Ziel-Desktop.

Nach dem Entpacken wird der Kontext des Skripts automatisch auf das erstellte temporäre Verzeichnis gesetzt, sodass alle Installationsaufgaben mithilfe relativer Pfade im Skript abgeschlossen werden können. Um beispielsweise die Datei EXAMPLE.MSI über das Shell Apps-Installationsskript aufzurufen, verwenden Sie einfach den Befehl .\EXAMPLE.MSI als Teil Ihres Installationsprozesses. Argumente können bei Bedarf hinzugefügt werden. Zusätzlich können weitere Dateien und Aufgaben, wie z. B. Transformationen, ebenfalls über den relativen Pfad aufgerufen werden.

Beispiel: Notepad ++ (.EXE)

Erkennungsskript

Die Erkennungsskript-Funktion bietet die Möglichkeit, einen Regelsatz zu erstellen, der einen positiven oder negativen Wert für eine bestimmte Abfrage zurückgibt. Nachfolgend finden Sie ein Beispiel für das Erkennungsskript für eine bestimmte Anwendung (Notepad ++).

In diesem Beispiel prüft das PowerShell-Skript effizient das Vorhandensein eines bestimmten Programms, indem es das Vorhandensein seines Installationsordners und der ausführbaren Programmdatei in diesem Ordner überprüft.

Skriptinhalt 
$basePath = $env:ProgramFiles
$programFolderName = "Notepad++"
$programFolderFullPath = Join-Path $basePath $programFolderName
$programFolderExists = Test-Path $programFolderFullPath
if (!$programFolderExists)
{
    return $false
}
$programFileName = 'notepad++.exe'
$programFileFullPath = Join-Path $programFolderFullPath $programFileName
return Test-Path $programFileFullPath
Aufschlüsselung der Komponenten 
  1. Variablen: 

    • $basePath: Speichert den Pfad des Verzeichnisses „Program Files“, der aus den Systemumgebungsvariablen ($env:ProgramFiles) abgerufen wurde.

    • $programFolderName: Gibt den Namen des Programmordners an (in diesem Fall „Notepad++“).

    • $programFolderFullPath: Kombiniert $basePath und $programFolderName mithilfe von Join-Path, um den vollständigen Pfad des Programmordners zu erhalten.

  2. Überprüfen der Existenz des Programmordners:

    $programFolderExists = Test-Path $programFolderFullPath
    if (!$programFolderExists)
    {
        return $false
    }
    • Test-Path: Cmdlet, das verwendet wird, um festzustellen, ob eine Datei oder ein Verzeichnis unter einem angegebenen Pfad existiert.

    • $programFolderExists: Speichert das Ergebnis der Existenzprüfung für den Programmordner.

    • Wenn der Programmordner nicht existiert (!$programFolderExists), gibt das Skript $false zurück, was darauf hinweist, dass das Programm nicht installiert ist.

  3. Erstellen des Programmdateipfads:

    $programFileName = 'notepad++.exe'
    $programFileFullPath = Join-Path $programFolderFullPath $programFileName
    • $programFileName: Gibt den Namen der ausführbaren Programmdatei an.

    • $programFileFullPath: Kombiniert $programFolderFullPath und $programFileName mithilfe von Join-Path, um den vollständigen Pfad der ausführbaren Programmdatei zu erhalten.

  4. Überprüfen der Existenz der Programmdatei:

    return Test-Path $programFileFullPath
    • Überprüft, ob die ausführbare Programmdatei unter dem angegebenen Pfad existiert.

    • Das Skript gibt das Ergebnis dieser Existenzprüfung zurück, das angibt, ob das Programm installiert ist ($true) oder nicht ($false).

Installationsskript

Das Installationsskript installiert und konfiguriert alle erforderlichen Komponenten für das erfolgreiche Deployment der Anwendung.

In diesem Beispiel automatisiert das PowerShell-Skript die Installation von Notepad++, indem es den Installer herunterlädt, ihn still ausführt (mit dem /S-Argument) und anschließend aufräumt.

Skriptinhalt 
$basePath = $env:TEMP
$installerFolderName = "Notepad $(New-Guid)"
$installerFolderFullPath = Join-Path $basePath $installerFolderName
$installerFolderExists = Test-Path $installerFolderFullPath
if ($installerFolderExists)
{
    Remove-Item $installerFolderFullPath -Recurse -Force -ErrorAction Stop
}
New-Item -Path $basePath -Name $installerFolderName -ItemType Directory -Force | Out-Null
$installerName = 'installer.exe'
$installerFullPath = Join-Path $installerFolderFullPath $installerName
$installerUrl = "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.6/npp.8.6.Installer.x64.exe"
Invoke-WebRequest -URI $installerUrl -OutFile $installerFullPath
Start-Process "$installerFullPath" -Wait -ArgumentList "/S"
Remove-Item $installerFolderFullPath -Recurse -Force $Context.Log('Installationsskript abgeschlossen')
Aufschlüsselung der Komponenten 
  1. Variablen: 

    • $basePath: Speichert den Pfad des temporären Verzeichnisses, der aus den Systemumgebungsvariablen ($env:TEMP) abgerufen wurde.

    • $installerFolderName: Gibt den Namen des Ordners für den Notepad++-Installer an. Es enthält eine dynamisch generierte GUID, um die Eindeutigkeit sicherzustellen.

    • $installerFolderFullPath: Kombiniert $basePath und $installerFolderName unter Verwendung von Join-Path, um den vollständigen Pfad des Ordners für den Installer zu erhalten.

  2. Überprüfen und Erstellen des Ordners für den Installer:

    $installerFolderExists = Test-Path $installerFolderFullPath
    if ($installerFolderExists)
    {
        Remove-Item $installerFolderFullPath -Recurse -Force -ErrorAction Stop
    }
    New-Item -Path $basePath -Name $installerFolderName -ItemType Directory -Force | Out-Null
    • Überprüft, ob der Ordner für den Installer bereits vorhanden ist. Falls dies der Fall ist, wird er rekursiv und zwangsweise entfernt, um eine saubere Installationsumgebung zu gewährleisten.

    • Erstellt ein neues Verzeichnis für den Installer unter Verwendung des New-Item-Cmdlets.

  3. Herunterladen des Installers:

    $installerUrl = "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.6/npp.8.6.Installer.x64.exe"
    Invoke-WebRequest -URI $installerUrl -OutFile $installerFullPath
    • Gibt die URL des Notepad++-Installers an.

    • Lädt die ausführbare Datei des Installers mit Invoke-WebRequest herunter und speichert sie unter dem angegebenen Pfad.

  4. Starten des Installationsvorgangs:

    Start-Process "$installerFullPath" -Wait -ArgumentList "/S"
    • Leitet den Installationsprozess durch Starten der ausführbaren Datei des Installers ein. Der Parameter -Wait stellt sicher, dass das Skript auf den Abschluss der Installation wartet, bevor es fortfährt.

  5. Aufräumen:

    Remove-Item $installerFolderFullPath -Recurse -Force
    • Entfernt den Ordner des Installationsprogramms und dessen Inhalt nach Abschluss der Installation, um eine saubere Umgebung zu gewährleisten.

  6. Protokoll:

    $Context.Log('Installationsskript abgeschlossen')
    • Protokolliert eine Nachricht, die angibt, dass das Installationsskript abgeschlossen wurde. Diese Funktion kann auch eine Nachricht protokollieren, die später auf der Seite „Richtliniendetails“ verfügbar ist. Dies kann als $Context.Log(string $message) verwendet werden.

Deinstallationsskript

Das Deinstallationsskript bietet die Möglichkeit, eine angegebene Anwendung als Teil des Richtlinienbewertungsprozesses zu entfernen. Das Erkennungsskript wird wiederverwendet, um zu bestätigen, dass die angegebenen Erkennungselemente nicht vorhanden sind.

In diesem Beispiel automatisiert das PowerShell-Skript die Deinstallation von Notepad++, indem es das Vorhandensein sowohl des Programmordners als auch der ausführbaren Datei des Deinstallationsprogramms überprüft. Wenn beide gefunden werden, führt es das Deinstallationsprogramm still aus (/S-Argument).

Skriptinhalt 
$basePath = $env:ProgramFiles
$programFolderName = "Notepad++"
$programFolderFullPath = Join-Path $basePath $programFolderName
$programFolderExists = Test-Path $programFolderFullPath
if (!$programFolderExists)
{
    throw \"Notepad++ wurde nicht gefunden\"
}
$uninstallerFileName = 'uninstall.exe'
$uninstallerFileFullPath = Join-Path $programFolderFullPath $uninstallerFileName
$uninstallerFileExists = Test-Path $uninstallerFileFullPath
if (!$uninstallerFileExists)
{
    throw \"Notepad++-Deinstallationsprogramm wurde nicht gefunden\"
}
Start-Process "$uninstallerFileFullPath" -Wait -ArgumentList "/S" $Context.Log('Deinstallationsskript abgeschlossen')
Aufschlüsselung der Komponenten 
  1. Variablen:

    • $basePath: Speichert den Pfad des Verzeichnisses „Program Files“, der aus den Systemumgebungsvariablen ($env:ProgramFiles) abgerufen wurde.

    • $programFolderName: Gibt den Namen des Programmordners an (in diesem Fall „Notepad++“).

    • $programFolderFullPath: Kombiniert $basePath und $programFolderName mithilfe von Join-Path, um den vollständigen Pfad des Programmordners zu erhalten.

  2. Überprüfen der Existenz des Programmordners:

    $programFolderExists = Test-Path $programFolderFullPath
    if (!$programFolderExists)
    {
        throw \"Notepad++ wurde nicht gefunden\"
    }
    • Test-Path: Cmdlet, das verwendet wird, um festzustellen, ob eine Datei oder ein Verzeichnis unter einem angegebenen Pfad existiert.

    • Wirft einen Fehler, wenn der Notepad++-Programmordner nicht existiert, was darauf hinweist, dass Notepad++ nicht installiert ist.

  3. Überprüfung der Existenz der Deinstallationsdatei:

    $uninstallerFileName = 'uninstall.exe'
    $uninstallerFileFullPath = Join-Path $programFolderFullPath $uninstallerFileName
    $uninstallerFileExists = Test-Path $uninstallerFileFullPath
    if (!$uninstallerFileExists)
    {
        throw \"Notepad++-Deinstallationsprogramm wurde nicht gefunden\"
    }
    • Erstellt den vollständigen Pfad zur ausführbaren Datei des Notepad++-Deinstallationsprogramms (uninstall.exe).

    • Überprüft, ob die ausführbare Datei des Deinstallationsprogramms existiert. Falls nicht, wird ein Fehler geworfen, der darauf hinweist, dass das Deinstallationsprogramm nicht gefunden wurde.

  4. Starten des Deinstallationsprozesses:

    Start-Process "$uninstallerFileFullPath" -Wait -ArgumentList "/S"
    • Leitet den Deinstallationsprozess durch Starten der ausführbaren Datei des Deinstallationsprogramms ein. Der -Wait-Parameter stellt sicher, dass das Skript auf den Abschluss der Deinstallation wartet, bevor es fortfährt.

  5. Protokoll:

    $Context.Log('Deinstallationsskript abgeschlossen')
    • Protokolliert eine Meldung, die darauf hinweist, dass das Deinstallationsskript abgeschlossen wurde. Diese Funktion kann auch eine Nachricht protokollieren, die später auf der Seite „Richtliniendetails“ verfügbar ist. Dies kann als $Context.Log(string $message) verwendet werden.

Beispiel: 7-Zip (.msi)

Erkennungsskript

Die Erkennungsskriptfunktion bietet die Möglichkeit, einen Regelsatz zu erstellen, der einen positiven oder negativen Wert für eine bestimmte Abfrage zurückgibt. Nachfolgend finden Sie ein Beispiel für das Erkennungsskript für eine bestimmte Anwendung (7-Zip). Dieses PowerShell-Skript prüft auf das Vorhandensein eines bestimmten Programms, indem es das Vorhandensein seiner Deinstallationsinformationen in der Windows-Registry überprüft.

Skriptinhalt 
$basePath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$productCode = '{23170F69-40C1-2702-2201-000001000000}'
$programRegistryPath = Join-Path $basePath $productCode
return Test-Path $programRegistryPath
Aufschlüsselung der Komponenten 
  1. Variablen:

    • $basePath: Speichert den Basispfad in der Windows Registry, in dem die Deinstallationsinformationen für installierte Programme normalerweise gespeichert werden. In diesem Fall verweist er auf HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, den Registry-Speicherort für installierte Programme für alle Benutzer.

    • $productCode: Gibt den eindeutigen Produktcode an, der mit dem zu prüfenden Programm verknüpft ist. Dieser Code ist in der Regel eine GUID (Globally Unique Identifier) und wird verwendet, um das Programm in der Registry zu identifizieren.

    • $programRegistryPath: Kombiniert den Basispfad ($basePath) und den Produktcode ($productCode) mithilfe von Join-Path, um den vollständigen Registry-Pfad zu den Deinstallationsinformationen des Programms zu bilden.

  2. Überprüfung der Existenz des Programm-Registry-Schlüssels:

    return Test-Path $programRegistryPath
    • Test-Path: Cmdlet, das verwendet wird, um festzustellen, ob eine Datei, ein Directory oder in diesem Fall ein Registry-Schlüssel unter einem angegebenen Pfad vorhanden ist.

    • Das Skript gibt das Ergebnis dieser Existenzprüfung zurück, das angibt, ob das Programm installiert ist (Registry-Schlüssel vorhanden) oder nicht.

Installationsskript

Das Installationsskript installiert und konfiguriert alle erforderlichen Komponenten für das erfolgreiche Deployment der Anwendung. Dieses PowerShell-Skript automatisiert die Installation von 7-Zip, indem es die MSI-Installer-Datei herunterlädt, sie stumm ausführt (/qn-Argument) und anschließend aufräumt.

Skriptinhalt 
$basePath = $env:TEMP
$installerFolderName = "7zip $(New-Guid)"
$installerFolderFullPath = Join-Path $basePath $installerFolderName
$installerFolderExists = Test-Path $installerFolderFullPath
if ($installerFolderExists)
{
    Remove-Item $installerFolderFullPath -Recurse -Force -ErrorAction Stop
}
New-Item -Path $basePath -Name $installerFolderName -ItemType Directory -Force | Out-Null
$installerName = 'installer.msi'
$installerFullPath = Join-Path $installerFolderFullPath $installerName
$installerUrl = "https://7-zip.org/a/7z2201-x64.msi"
Invoke-WebRequest -URI $installerUrl -OutFile $installerFullPath
Start-Process msiexec -ArgumentList "/i `"$installerFullPath`" /qn" -Wait
Remove-Item $installerFolderFullPath -Recurse -Force $Context.Log('Installationsskript abgeschlossen')
Aufschlüsselung der Komponenten 
  1. Variablen:

    • $basePath: Speichert den Pfad des temporären Directory, das aus den Systemumgebungsvariablen ($env:TEMP) abgerufen wurde.

    • $installerFolderName: Gibt den Namen des Ordners für den 7-Zip-Installer an. Es enthält eine dynamisch generierte GUID, um die Eindeutigkeit sicherzustellen.

    • $installerFolderFullPath: Kombiniert $basePath und $installerFolderName mithilfe von Join-Path, um den vollständigen Pfad des Installationsordners zu erhalten.

  2. Installationsordner prüfen und erstellen:

    $installerFolderExists = Test-Path $installerFolderFullPath
    if ($installerFolderExists)
    {
        Remove-Item $installerFolderFullPath -Recurse -Force -ErrorAction Stop
    }
    New-Item -Path $basePath -Name $installerFolderName -ItemType Directory -Force | Out-Null
    • Prüft, ob der Installationsordner bereits vorhanden ist. Falls dies der Fall ist, wird er rekursiv und zwangsweise entfernt, um eine saubere Installationsumgebung zu gewährleisten.

    • Erstellt einen neuen Ordner für das Installationsprogramm mithilfe des Cmdlets New-Item.

  3. Installationsprogramm herunterladen:

    $installerName = 'installer.msi'
    $installerFullPath = Join-Path $installerFolderFullPath $installerName
    $installerUrl = "https://7-zip.org/a/7z2201-x64.msi"
    Invoke-WebRequest -URI $installerUrl -OutFile $installerFullPath
    • Gibt die URL des 7-Zip-Installationsprogramms an.

    • Lädt die MSI-Installationsdatei mit Invoke-WebRequest herunter und speichert sie unter dem angegebenen Pfad.

  4. Installationsvorgang starten:

    Start-Process msiexec -ArgumentList "/i `"$installerFullPath`" /qn" -Wait
    • Leitet den Installationsvorgang ein, indem das Dienstprogramm msiexec mit dem Flag /i (installieren) und dem Pfad zur MSI-Installationsdatei ($installerFullPath) gestartet wird. Der Parameter /qn installiert das Programm im Hintergrund, ohne eine Benutzeroberfläche anzuzeigen.

  5. Aufräumen:

    Remove-Item $installerFolderFullPath -Recurse -Force
    • Entfernt den Installationsordner und dessen Inhalt nach Abschluss der Installation, um eine saubere Umgebung zu gewährleisten.

  6. Protokollierung:

    $Context.Log('Install script completed')
    • Protokolliert eine Meldung, die darauf hinweist, dass das Installationsskript abgeschlossen wurde. Diese Funktion kann auch eine Meldung protokollieren, die später auf der Richtliniendetailseite verfügbar ist. Dies kann als $Context.Log(string $message) verwendet werden.

Deinstallationsskript

Das Deinstallationsskript bietet die Möglichkeit, eine bestimmte Anwendung als Teil des Richtlinienbewertungsprozesses zu entfernen. Das Erkennungsskript kann wiederverwendet werden, um zu bestätigen, dass die angegebenen Erkennungselemente nicht vorhanden sind. Dieses PowerShell-Skriptbeispiel automatisiert die Deinstallation von 7-Zip, indem es auf das Vorhandensein seines Deinstallations-Registry-Schlüssels prüft und den Deinstallationsprozess im Hintergrund einleitet.

Skriptkörper 
$basePath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$productCode = '{23170F69-40C1-2702-2201-000001000000}'
$programRegistryPath = Join-Path $basePath $productCode
$programExists = Test-Path $programRegistryPath
if (!$programExists)
{
    throw "7-Zip wurde nicht gefunden"
}
Start-Process msiexec -ArgumentList \"/x `\"$productCode`\" /qn\" -Wait $Context.Log('Deinstallationsskript abgeschlossen')
Aufschlüsselung der Komponenten 
  1. Variablen:

    • $basePath: Speichert den Basispfad in der Windows Registry, in dem normalerweise Deinstallationsinformationen für installierte Programme gespeichert werden. In diesem Fall verweist er auf HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, den Standardort in der Registry für installierte Programme aller Benutzer.

    • $productCode: Gibt den eindeutigen Produktcode an, der mit 7-Zip verknüpft ist. Dieser Code ist normalerweise eine GUID (Globally Unique Identifier) und wird verwendet, um das Programm in der Registry zu identifizieren.

    • $programRegistryPath: Kombiniert den Basispfad ($basePath) und den Produktcode ($productCode) mithilfe von Join-Path, um den vollständigen Registry-Pfad zu den Deinstallationsinformationen des Programms zu bilden.

  2. Überprüfung des Vorhandenseins des Programm-Registry-Schlüssels:

    Starten des Deinstallationsprozesses:
    Start-Process msiexec -ArgumentList "/x `"$productCode`" /qn" -Wait
    Leitet den Deinstallationsprozess ein, indem das Dienstprogramm msiexec mit dem Flag /x (Deinstallieren) und dem Produktcode ($productCode) gestartet wird. Der Parameter /qn deinstalliert das Programm im Hintergrund, ohne eine Benutzeroberfläche anzuzeigen.
    $programExists = Test-Path $programRegistryPath
    if (!$programExists)
    {
        throw "7-Zip wurde nicht gefunden"
    }
    • Test-Path: Cmdlet, das verwendet wird, um zu bestimmen, ob ein Registry-Schlüssel an einem angegebenen Pfad vorhanden ist.

    • Löst einen Fehler aus, wenn der Registry-Schlüssel für 7-Zip nicht vorhanden ist, was darauf hinweist, dass 7-Zip nicht installiert ist.

  3. Protokollierung:

    $Context.Log('Uninstall script completed')
    • Protokolliert eine Meldung, die darauf hinweist, dass das Deinstallationsskript abgeschlossen wurde. Diese Funktion kann auch eine Meldung protokollieren, die später auf der Richtliniendetailseite verfügbar ist. Dies kann als $Context.Log(string $message) verwendet werden.

Versioning

Ab Nerdio Manager v6.6 unterstützt Shell Apps jetzt Versionierung. Dieser Abschnitt bietet Anleitungen zum Erstellen und Verwenden von Anwendungsversionen innerhalb der Benutzeroberfläche.

Benutzeroberfläche für die Versionskonfiguration und Ablaufbeispiele

Siehe Unified Application Management: Shell Apps Technical Reference Guide für Details zur Benutzeroberfläche der Versionskonfiguration und Ablaufbeispiele.

Versionsbeispiel

Das folgende Beispiel dient als vorgeschlagener Ansatz für die Verwaltung von Versionen innerhalb von Shell Apps. Dies ist eine sehr flexible Funktion, und Kunden können eine Reihe verschiedener erkannter Umgebungsbedingungen nutzen, um den Installationsstatus eines Pakets zu bestimmen. In diesem Beispiel verwenden wir die Dateiversion als Erkennungsregel, diese Funktion ist jedoch gleichermaßen auf Registry-Schlüssel, Dateien und Ordner anwendbar.

Erkennungsskript

Das folgende Erkennungsskript fragt die ausführbare Datei unter dem angegebenen Pfad ab und gibt die Produktversionsinformationen zurück.

Anmerkung

Das Erkennungsskript muss so konfiguriert sein, dass es ein Ergebnis im Versionsformat x.x.x.x zurückgibt. Für eine bestimmte Version muss der VersionsName in den Versionseigenschaften mit dem vom Erkennungsskript zurückgegebenen Wert identisch sein, damit zugehörige Richtlinien den Status der Anwendung bewerten können.

$nppDirPath = Join-Path $env:ProgramFiles "Notepad++"
$exePath = Join-Path $nppDirPath 'notepad++.exe'
if (!(Test-Path $exePath))
{
    $null zurückgeben
    # es ist nichts installiert
}
# Version aus .exe-Metadaten auswählen
return (Get-Item $exePath).VersionInfo.ProductVersion

Installationsskript

Das untenstehende Installationsskript installiert die Zielversion der Anwendung, die in der UAM-Richtlinie definiert und im Skript als $Context.TargetVersion verfügbar ist.

$installerTempDir = Join-Path $env:TEMP "Notepad $(New-Guid)" 
$installerPath = Join-Path $installerTempDir 'installer.exe' 
# creating directory in Temp folder New-Item -Path 
$installerTempDir -ItemType Directory -Force | Out-Null 
# generating url dynamically based on target version # configured in deployment policy 
$version = $Context.TargetVersion $installerUrl = "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v$version/npp.$version.Installer.x64.exe" 
# downloading the file and running install with silent switch 
Invoke-WebRequest -URI $installerUrl -OutFile $installerPath 
Start-Process "$installerPath" -Wait -ArgumentList "/S" 
# cleaning up after ourselves 
Remove-Item $installerTempDir -Recurse -Force

Deinstallationsskript

Das untenstehende Deinstallationsskript entfernt die Anwendung einfach unter Verwendung der definierten Routine, sofern die Bedingungen der Erkennungsregel erfüllt sind.

$nppDirPath = Join-Path $env:ProgramFiles "Notepad++"
$uninstallerPath = Join-Path $nppDirPath 'uninstall.exe'
Start-Process "$uninstallerPath" -Wait -ArgumentList "/S"

War dieser Beitrag hilfreich?

0 von 0 fanden dies hilfreich
Haben Sie Fragen? Anfrage einreichen

Kommentare (0 Kommentare)

Zu diesem Beitrag können keine Kommentare hinterlassen werden.