PowerShell: Функция MessageBox

Я решил немного доработать функцию MessageBox из прошлой заметки, чтобы было удобнее с ней работать. Часть кода собрал из других примеров, часть дописал сам. В итоге теперь, если писать в PowerShell ISE, то будет выводится подсказка при наборе параметров и теперь сложнее будет ошибиться (например, при указании названия кнопок или значка).

function MessageBox 
{
  param (
        [Parameter(Mandatory=$True,HelpMessage="The message text to display. Keep it short and simple.")]
        [string]$Message,

        [Parameter(HelpMessage="The message title")]
        [string]$Title="Attention $env:username",

        [ValidateSet('OK', 'OKCancel', 'YesNo', 'YesNoCancel')] # https://docs.microsoft.com/en-us/dotnet/api/system.windows.messageboxbutton?view=netframework-4.7.2
        [Parameter(HelpMessage="Button name: OK', 'OKCancel', 'YesNo', 'YesNoCancel'")] 
        [string]$Button="OK",

        [ValidateSet('Error','Warning','Information', 'None')] # https://docs.microsoft.com/en-us/dotnet/api/system.windows.messageboximage?view=netframework-4.7.2
        [Parameter(HelpMessage="Icon name: Error, Warning, Information, None")] 
        [string]$Icon="None"
  )
Add-Type -AssemblyName System.Windows.Forms
return [System.Windows.Forms.MessageBox]::Show($Message, $Title, $Button, $Icon)
}

## Example
$choice = MessageBox -Message "Press YES, NO or CANCEL" -Title "MessageBox Test" -Icon Warning -Button YesNoCancel
switch ($choice)
{
  "Yes"    { $result = "Button YES pressed"; Break }
  "No"     { $result = "Button NO pressed";  Break }
  "Cancel" { $result = "Button CANCEL pressed"; Break }
}
Write-Output $result