2017-12-05 16 views
0

私は2つのPSスクリプト(1つのメインスクリプトとモジュールとして1つ)を持っています。パラメータとしてPowerShell渡し関数

Executeが機能 ConstructSshSessionsでスクリプトを継続して実行するために質問をする機能です
Write-Host "Press Y to continue" 
Execute (ConstructSshSessions) 

主なスクリプトは次のようなコードを使用しています。ユーザーがYを入力しなかった場合、メインスクリプトは関数ConstructSshSessionsをスキップします。私はコードExcecute (ConstructSshSession)を実行すると、それは最初のSSHセッションを作成し、継続するかどうかをユーザに尋ねるスクリプトを実行

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

モジュールのようなコードを使用しています。それは明らかに私の意図ではありませんが、私はエラーが表示されません。

私は、ユーザーに関数Executeへのパラメータとして送信されているスクリプトを実行し続けることができるかどうかを尋ねることを願います。

答えて

1

実際にレスポンスを読んでから応答を求めるプロンプトを分けることはお勧めしません。関数名をExecのような呼出しルーチンに渡すことはお勧めできません。

ブール値を返す関数に確認ルーチンをラップし、その関数をifステートメントの条件として呼び出します。

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

ありがとうございました。確かな答えのように聞こえる。私は最近スクリプトを作成し始めました。あなたのコードを初心者にもっと説明することはできますか?私はコードが何をしているのか完全に理解していません。 –

+0

私はすでにあなたのコードでそれを理解しました。どうもありがとうございました。これは完璧に機能します。 –

+0

自分のやり方をお勧めしない理由を私に説明してもらえますか?私は間違いから学ぶことができますか? –

関連する問題