web-dev-qa-db-ja.com

コードの実行を続行するためのPowerShellプロンプト

[〜#〜] wsus [〜#〜] プロセスを自動化するために使用しているスクリプトがあり、その最終段階では、古い/不要なファイル/オブジェクトをすべて削除します。

クリーンアップステージの前に、「Enterキーを押して削除を続行するか、他のキーを押して停止するか」を確認して、実行しないオプションを提供したいと思います。

スクリプトの最後に現在あるコードは次のとおりです。

Get-WsusServer 10.1.1.25 -PortNumber 8530 | Get-WsusUpdate -Classification All -Approval Unapproved -Status FailedOrNeeded | Approve-WsusUpdate -Action Install -Target $ComputerTarget -Verbose

Write-Host "Updates have been approved!"
Write-Host "Preparing to clean WSUS Server of obsolete computers, updates, and content files."

#Part2 - WSUS Server Cleanup

##Run Cleanup Command
Get-WsusServer $WSUS_Server -PortNumber $PortNumber | Invoke-WsusServerCleanup -CleanupObsoleteComputers -CleanupObsoleteUpdates -CleanupUnneededContentFiles

#Part2の直前に、「続行するにはEnterキーを押すか、中止するにはその他のキーを押してください」というプロンプトを表示したい

これを行う簡単な方法はありますか?

私が見たすべてのことは、コードブロック内にスクリプト全体をネストすることを伴うようですが、私はそうしたくないのです。 = /

7
Abraxas

別の簡単な解決策は、以下を使用することです。

Read-Host -Prompt "Press any key to continue or CTRL+C to quit" 

キーボードでEnterキーを押す必要があるため、これは現在受け入れられている回答のより良い解決策であると思います。 UI要素がフォーカスされていない限り、Enterキーを押してもUIプロンプトが受け入れられるとは思いません。

7
Christopher

Invoke-WsusServerCleanupコマンドに-confirmを追加するだけです。内蔵されています。

5
Robert Overmyer

ユーザーがキーを押すまでのスクリプトの一時停止を参照してください

関連するスクリプト行は次のとおりです。

Write-Host "Press enter to continue and CTRL-C to exit ..."
$x = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

Enterキーのチェックを追加し、本当に1つのキーだけを続行したい場合は、これをループでラップできます。 elseを追加してスクリプトを終了することもできますが、ctrl-cが終了することをユーザーに思い出させることをお勧めします。ビルトインされているものをコード化する理由。

3
Jim B

Read-Hostコマンドレットを使用して、入力値を希望どおりに処理します。

$userInput = Read-Host 
1
slybloty

入力を検証する方法に関するOPのコメントに基づくフォローアップアドオンとして、他の適切な回答への追加として、この回答を作成します。適切な場所にコメントを入力するには長すぎます。

入力の検証は、いくつかの方法で実行できます。個人的な好みとして、入力の検証に switch ステートメントを使用するのが好きです。一般に、束の それ以外の場合 sよりも読みやすく、デバッグが簡単で、 a do while

同様に、コードをすっきりさせて再利用できるため、検証に失敗した場合はループよりも関数を使用することを好みます。関数には、組み込みの パラメータ検証 の可能性もあります。変数の内容を検証する最良の方法のように思われます。

したがって、例として、入力が期待どおりでない場合に質問を再表示するためにそれ自体を呼び出す単純な関数を次に示します。

function Get-SomeInput {
    $input = read-Host "Please write yes or no and press Enter"

    switch ($input) `
    {
        'yes' {
            write-Host 'You wrote yes'
        }

        'no' {
            write-Host 'You wrote no'
        }

        default {
            write-Host 'You may only answer yes or no, please try again.'
            Get-SomeInput
        }
    }
}

Get-SomeInput
1
ErikE

PowerShellに保持させたいあらゆるステップで、コードにPauseを記述します。 PowerShellは、押すまでEnterキーを押して続行します...: Enter またはシェルを閉じる/ [〜#〜] ise [〜#〜]

1
Colyn1337