Skip to main content

Funktion um Popups anzuzeigen

Mit dieser Function kann aus Powershell heraus schöne Popups angezeigt werden. Es ist auch in der Lage den Popuptext aus einer Pip zu übernehmen.


Beispiel mit Text von Pipeline
"Hallo Welt" | Show-Popup


Parameter

Body String Text der als Nachricht im Popup angezeigt wird (Haken)
Title String Text für den Nachrichtentitel (Fehler) Leer
ButtonType String Buttons, die in dem Popup verwendet werden sollen (Fehler) Ok
Icon String Das Symbol, das links neben dem Text angezeigt wird (Fehler) Leer / kein Icon
Default String Welcher Button ist initial aktiviert (Fehler) Leer / Keine Auswahl
Timeout Integer Zeit in Sekunden nachdem das Fenster automatisch geschlossen wird. Als Rückgabewert, wird dann Timeout zurückgegeben. (Fehler) 0 ( Kein Timeout)
function Show-Popup{
## https://learn.microsoft.com/de-de/dotnet/api/system.windows.messageboximage?view=windowsdesktop-7.0
## https://learn.microsoft.com/de-de/dotnet/api/system.windows.messageboxresult?view=windowsdesktop-7.0
 
    [CmdletBinding()]
    param(
        [Parameter(ValueFromPipeline=$true,Mandatory=$true)]
 
        [string] $Body,
     
        [Parameter()]
        [string] $Title="",
     
        [ValidateSet("OK","OkCancel","AbortRetryIgnore","YesNoCancel","YesNo","RetryCancel")]
        [string] $ButtonType = "Ok",
 
        [ValidateSet("None","Info","Warning","Error","Question","Exclamation","Stop")]
        [string] $Icon = "None",
 
 
        [ValidateSet("None","Yes","No","Cancel","OK")]
        [string] $Default = "None",
 
        [Parameter()]
        [Int] $Timeout=0
 
    )
 
    $enumPopupIcon=@{"Error"=16;"Stop"=16;"Question"=32;"Warning"=48;"Exclamation"=48;"Info"=64;"None"=0}
    $enumButtonTypes=@{"OK"=0;"OkCancel"=1;"AbortRetryIgnore"=2;"YesNoCancel"=3;"YesNo"=4;"RetryCancel"=5}
    $enumResult=@{-1="Timeout";1="Ok";2="Cancel";3="Abort";4="Retry";5="Ignore";6="Yes";7="No"}
 
    [Object]$shell=New-Object -ComObject WScript.Shell
    [Int]$bitmatrix = $enumPopupIcon[$Icon] + $enumButtonTypes[$ButtonType];
 
    Write-Verbose "Selected Icon: `t$($enumPopupIcon[$Icon])"
    Write-Verbose "Selected Button: `t$($enumButtonTypes[$ButtonType])"
    Write-Verbose "Combined: `t`t`t$($bitmatrix)";
 
    [Int]$userinput= $shell.Popup($Body,$Timeout,$Title,$bitmatrix);
    return $enumResult[$userinput];
}