Powershell PromptForChoice?
Hallo.
Ich möchte gerne eine PowershellPromptForChoice haben. Sprich ich will, dass der Benutzer von dem Script eine Wahl hat welches Programm er installieren will. Es sollte drei Optionen geben. Ich habe schon etwas versucht aber es funktioniert nicht. Vielleicht kann mir jemand weiter helfen.
Der jetzige Code:
-------------------------------------------------------------------------------------------------------------------------------------
$title = "Anti-Virus installieren?"
$message = " "
$Nod32 = New-Object System.Management.Automation.Host.ChoiceDescription "&AV-Nod32"
$Endpoint = New-Object System.Management.Automation.Host.ChoiceDescription "&Endpoint"
$Nein = New-Object System.Management.Automation.Host.ChoiceDescription "&Nein"
$options = [System.Management.Automation.Host.ChoiceDescription[]]($Nod32,$Endpoint, $Nein)
$result = $Host.ui.PromptForChoice($title, $message, $options, 0)
switch ($result)
{
0 {"Nod32..."
Start-Process X:\InstallFiles\nod32.exe -whatif
}
1 {"Endpoint..."
Start-Process X:\InstallFiles\entpoint.msi -whatif
}
2 {"Nein..."}
}
-------------------------------------------------------------------------------------------------------------------------------------
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
Und was heisst Funktioniert nicht ? Syntax Error ? Oder passiert etwas nicht ?
![](https://images.gutefrage.net/media/user/powershellseven/1601899978050_nmmslarge__0_0_1200_1200_3174f525c5be5f4e8b22b48adcebaf20.png?v=1601899978000)
Es passiert einfach nichts. Die powershell schließt sich einfach. Auch mit "puase" zum schluss.
2 Antworten
![](https://images.gutefrage.net/media/user/Erzesel/1497339133085_nmmslarge__0_524_1080_1080_4b38ff31970de3b94deb6a27ca8a8f01.jpg?v=1497339133000)
abgesehen von etwas Kosmetik und das ich ein Pause ans Ende gesetzt habe war soweit alles ok. bei mir klappts... (auch wenn "PromptForChoice"-Menüs alles andere als hübsch sind...🤢🤮
$title = "Anti-Virus installieren?"
$message = "Sag mir was Du moechtest"
$Nod32 = New-Object System.Management.Automation.Host.ChoiceDescription "&AV-Nod32"
$Endpoint = New-Object System.Management.Automation.Host.ChoiceDescription "&Endpoint"
$Nein = New-Object System.Management.Automation.Host.ChoiceDescription "&Nein"
$options = [System.Management.Automation.Host.ChoiceDescription[]]($Nod32,$Endpoint, $Nein)
$result = $Host.ui.PromptForChoice($title, $message, $options, 2)
switch ($result)
{
0
{
"Nod32..."
Start-Process X:\InstallFiles\nod32.exe
}
1
{
"Endpoint..."
Start-Process X:\InstallFiles\entpoint.msi
}
2 { "Nein..."}
}
pause
..die Menübox kommt ohnehin nur in ISE. In der Standartmäßig bei Nutzer verwendeten Powershellconsole wird es schnell unübersichtlich.
Ich finde da einfach ein "handgestricktes" Textmenü übersichtlicher:
MenuDemo.ps1
'Menu'
''
'A - AV-Nod32'
'E - Endpoint'
'N - Nix'
''
'Triff Deine Wahl:'
do
{
$choice = [System.Console]::ReadKey($True).keychar; #lies eine Taste
$ok = $choice -match '[aen]'; #hier zulässige Tasten !
if (-not $ok) {[console]::beep(220,200)}; #mache einen Ton bei einer falschen Taste ,Zeile kann weg
} until ( $ok ); #wir bleiben solange hier bis eine der definierten Tasten gedrückt wird.
switch ($choice)
{
'a'
{
'Nod32...'
Start-Process X:\InstallFiles\nod32.exe
}
'e'
{
'Endpoint...'
Start-Process X:\InstallFiles\entpoint.msi
}
'n'
{
'mache Nix'
}
}
pause
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
also bei mir funktioniert das script
ausser das es natürlich fheler wirft nach auswahl
PS C:\Users\Rakondark> D:\Users\RakonDark\Dokumente\testprompt.ps1
Endpoint...
Start-Process : Es wurde kein Parameter gefunden, der dem Parameternamen "whatif" entspricht.
In D:\Users\RakonDark\Dokumente\testprompt.ps1:27 Zeichen:57
+ Start-Process X:\InstallFiles\entpoint.msi -whatif
+ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
also das programm funktioniert , nutz einfach die PowerShell ISE dann siehst du auch die fehlermeldungen . und bitte starte eine ps nicht mit cmd.exe
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
dann öffnest du das falsch . nim mal die powershell ISE , mach dort deine ps1 datei und starte , sobald öffnet sich das popup . das problem ist , du machst hier was mit UI und das ist nicht immer gültig .
und dann ist noch die frage ob du scripts überhaupt ausführen darfst .
![](https://images.gutefrage.net/media/user/powershellseven/1601899978050_nmmslarge__0_0_1200_1200_3174f525c5be5f4e8b22b48adcebaf20.png?v=1601899978000)
Dieser Fehler kommt in der PowerShell ISE
Start-Process : Es wurde kein Parameter gefunden, der dem Parameternamen "whatif" entspricht.
Dieses Programm, das gestartet werden soll exestiert auch.
![](https://images.gutefrage.net/media/user/RakonDark/1552185525294_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1552185525000)
![](https://images.gutefrage.net/media/user/powershellseven/1601899978050_nmmslarge__0_0_1200_1200_3174f525c5be5f4e8b22b48adcebaf20.png?v=1601899978000)
Ich habe den Ferhler gefunden. Der Ordner wurde verschoben. Vielen Dank fürs Weiterhelfen ;)
Der Debug von Visual Studio Code gibt mir auch keine Fehlermeldung aber es Passiert einfach nichts. Die Pfade stimmen zu 100%.