Hallo!
Beim Start eines Pakets, möchte ich den User in einem PopUp erläutern, was das Paket tut und welche Konsequenzen dies haben kann. Danach sollte er Zustimmen oder Abbrechen können. Wie baut man das? Show-NxtInstallationWelcome klingt vom Namen her vielversprechend, doch scheint dies nur zum Beenden von geöffneten Programmen zu taugen.
Wenn es ganz einfach sein soll, geht das bestimmt über eine einfache Messagebox im Usercontext.
Ausführung eines kleinen Skripts mit Abfragefenster mittels der PSADT-Funktion Execute-ProcessAsUser:
Beispiel-Code zur Ausführung als Benutzer:
[string]$exeFile = "PowerShell.exe"
[string]$exeParams = "-ExecutionPolicy ByPass -NoLogo -NonInteractive -WindowStyle Hidden -File `"$dirFiles\AskUser.ps1`""
$resultAskUser = Execute-ProcessAsUser -Path $exeFile -Parameters $exeParams -Wait -PassThru
Beispiel-Skript „AskUser.ps1“:
# Load the necessary .NET assembly
Add-Type -AssemblyName System.Windows.Forms
# Define variables
[string]$msg = "Die Software ..." + `
"`n`nMöchten Sie fortfahren?"
[string]$title = "Installation Software xyz"
$buttons = [System.Windows.Forms.MessageBoxButtons]::YesNo
$icon = [System.Windows.Forms.MessageBoxIcon]::Question
$defaultButton = [System.Windows.Forms.MessageBoxDefaultButton]::Button1
# Display a message box
$result = [System.Windows.Forms.MessageBox]::Show($msg, $title, $buttons, $icon, $defaultButton)
# Return value and exit script
return $result
Dokumentation zur MsgBox in .Net:
Der Rückgabewert für „Ja“ (Yes) wäre eine 6.
Aber bestimmt hat neo42 noch eine schickere Lösung für dich, z. B. ein Fenster mit Logo usw.
Danke für den Hinweis.
Ich probiere das vorgeschlagene Skript aus. Allerdings bekomme ich das Ergebnis noch nicht zurück in das Deployment-Skript.
Und beim Powershell-Aufruf hat sich ein Schreibfehler eingeschlichen: Der Parameter heißt richtig „-NonInteractive“
Danke, den Parameter-Fehler hatte ich übersehen. Habe das ganze auch nur ungetestet schnell zusammengetippt
Ggf. muss das Skript statt mit return $return mit exit $return beendet werden. Wie geschrieben, habe es nicht getestet.
Vielen Dank für den Input!!!
Ich beende das Skript so:
Anstelle des „return $result“:
if ($result -eq „YES“)
{ exit 0 }
else
{ exit 1 }
Damit kann dann das Deployment etwas anfangen (die 99 ist frei erfunden):
If ($resultAskUser -eq 1) {
Exit-NxtScriptWithError -ErrorMessage ‚Execution canceled by user.‘ -MainExitCode 99
}