2017-12-05 4 views
0

Ich habe zwei PS-Skripte (1 Hauptskript und 1 als Modul).PowerShell Passing-Funktion als Parameter

Haupt Skript verwendet Code wie:

Write-Host "Press Y to continue" 
Execute (ConstructSshSessions) 

Wo Execute eine Funktion ist, die die Frage des Skripts in der Funktion ConstructSshSessions fortzusetzen fragt und auszuführen. Wenn die Benutzer keine Y eingeben, überspringt das Hauptscripts die Funktion ConstructSshSessions.

Modul verwendet Code wie:

Function Execute($function) 
{ 
    $response = read-host 
    Write-Host "You typed: $response" 
    if ($response -eq "Y") 
    { 
     $function 
    } 
    Remove-Variable response 
} 

Wenn ich den Code ausführen Excecute (ConstructSshSession) es läuft zunächst das Skript, das die SSH-Sitzungen erstellt, und fragt dann den Benutzer fortzusetzen. Das ist natürlich nicht meine Absicht, aber ich sehe den Fehler nicht.

Ich möchte, dass es die Benutzer fragt, ob es fortfahren kann und dann das Skript ausführen, das als Parameter an die Funktion Execute gesendet wird.

Antwort

1

Ich würde nicht empfehlen, die Eingabeaufforderung für eine Antwort vom tatsächlichen Lesen der Antwort zu trennen. Ich würde nicht empfehlen, einen Funktionsnamen an irgendeine Exec-ähnliche Aufrufroutine zu übergeben.

Umbrechen Sie die Bestätigungsroutine in eine Funktion, die einen booleschen Wert zurückgibt, und rufen Sie die Funktion als Bedingung einer if-Anweisung auf.

function ConfirmStep($msg) { 
    $title = 'Confirm Step' 

    $yes = New-Object Management.Automation.Host.ChoiceDescription '&Yes' 
    $no = New-Object Management.Automation.Host.ChoiceDescription '&No' 
    $options = [Management.Automation.Host.ChoiceDescription[]]($no, $yes) 
    $default = 1 # $yes 

    [bool]$Host.UI.PromptForChoice($title, $msg, $options, $default) 
} 

if (ConfirmStep "Construct SSH sessions?") { 
    ConstructSshSessions 
} 
+0

Vielen Dank für Ihre Antwort. Klingt wie eine solide Antwort. Ich habe vor kurzem mit dem Scripting angefangen und können Sie Ihren Code einem Anfänger erklären? Ich verstehe nicht ganz, was der Code macht. –

+0

Ich habe es bereits mit Ihrem Code herausgefunden. Vielen Dank. Das wird perfekt funktionieren. –

+0

Können Sie mir erklären, warum Sie meine Vorgehensweise nicht empfehlen würden, damit ich aus meinen Fehlern lernen kann? –

Verwandte Themen