Powershell PromptForChoice?

RakonDark  06.10.2020, 12:57

Und was heisst Funktioniert nicht ? Syntax Error ? Oder passiert etwas nicht ?

powershellseven 
Beitragsersteller
 06.10.2020, 13:00

Es passiert einfach nichts. Die powershell schließt sich einfach. Auch mit "puase" zum schluss.

2 Antworten

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

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


powershellseven 
Beitragsersteller
 06.10.2020, 13:36

Der Debug von Visual Studio Code gibt mir auch keine Fehlermeldung aber es Passiert einfach nichts. Die Pfade stimmen zu 100%.

0
RakonDark  06.10.2020, 13:38
@powershellseven

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 .

0
powershellseven 
Beitragsersteller
 06.10.2020, 13:39
@RakonDark

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.

0
powershellseven 
Beitragsersteller
 06.10.2020, 13:46
@RakonDark

Ich habe den Ferhler gefunden. Der Ordner wurde verschoben. Vielen Dank fürs Weiterhelfen ;)

1