コマンドレットからの確認を要求する

コマンドレットは、システム環境の外部にあるシステムに変更を行う際に、確認を要求Windows PowerShellがあります。 たとえば、コマンドレットがユーザー アカウントを追加したり、プロセスを停止したりする場合、コマンドレットは続行する前にユーザーからの確認を要求する必要があります。 これに対し、コマンドレットで変数変数を変更Windows PowerShell場合、コマンドレットは確認を必要としない必要があります。

確認要求を行う場合、コマンドレットは確認要求をサポートし 、System.Management.Automation.Cmdlet.ShouldProcess メソッドと System.Management.Automation.Cmdlet.ShouldContinue (省略可能) メソッドを呼び出して確認要求メッセージを表示する必要があります。

確認要求のサポート

確認要求をサポートするには、コマンドレットで Cmdlet 属性の パラメーター SupportsShouldProcess を に設定する必要があります true 。 これにより、指定 Confirm された WhatIf コマンドレットパラメーターと コマンドレット パラメーターが有効Windows PowerShell。 パラメーター Confirm を使用すると、ユーザーは確認要求を表示するかどうかを制御できます。 パラメーター WhatIf を使用すると、コマンドレットがメッセージを表示するか、そのアクションを実行する必要かをユーザーが判断できます。 コマンドレットに パラメーターと Confirm パラメーターを WhatIf 手動で追加することはできません。

次の例は、確認要求をサポートするコマンドレット属性宣言を示しています。

[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
        SupportsShouldProcess = true)]

確認要求メソッドの呼び出し

コマンドレット コードで、システムを変更する操作を実行する前に 、System.Management.Automation.Cmdlet.ShouldProcess メソッドを呼び出します。 呼び出しが の値を返す場合、操作が実行され、コマンドレットが次の操作を処理するコマンドレット false を設計します。

ShouldContinue メソッドの呼び出し

ほとんどのコマンドレットは 、System.Management.Automation.Cmdlet.ShouldProcess メソッドのみを使用して確認を要求します。 ただし、場合によっては追加の確認が必要になる場合があります。 このような場合は 、System.Management.Automation.Cmdlet.ShouldProcess 呼び出しを 、System.Management.Automation.Cmdlet.ShouldContinue メソッドの呼び出しで補完します。 これにより、コマンドレットまたはプロバイダーは、確認プロンプトへのすべての応答に対する [は い] のスコープを細かく制御できます。

コマンドレットが System.Management.Automation.Cmdlet.ShouldContinue メソッドを呼び出す場合、コマンドレットは switch パラメーターも指定する Force 必要があります。 ユーザーがコマンドレットをいつ呼び出すのかユーザーが指定した場合でも、コマンドレットは Force System.Management.Automation.Cmdlet.ShouldProcessを呼び出す必要がありますが 、System.Management.Automation.Cmdlet.ShouldContinueの呼び出しはバイパスする必要があります。

System.Management.Automation.Cmdlet.ShouldContinue は、ユーザーにメッセージを表示できない非対話型環境から呼び出された場合に例外をスローします。 パラメーターを追加すると、非対話型環境でコマンドが呼び出された場合でも、コマンド Force を実行できます。

次の例は 、System.Management.Automation.Cmdlet.ShouldProcessSystem.Management.Automation.Cmdlet.ShouldContinueを呼び出す方法を示しています。

if (ShouldProcess (...) )
{
  if (Force || ShouldContinue(...))
  {
     // Add code that performs the operation.
  }
}

System.Management.Automation.Cmdlet.ShouldProcess呼び出しの動作は、コマンドレットが呼び出される環境によって異なる場合があります。 前のガイドラインを使用すると、ホスト環境に関係なく、コマンドレットが他のコマンドレットと一貫して動作することを確認できます。

System.Management.Automation.Cmdlet.ShouldProcessメソッドを呼び出す例については、「確認を要求する方法」を参照してください

影響レベルを指定する

コマンドレットを作成するときに、変更の影響レベル (重大度) を指定します。 これを行うには、Cmdlet 属性の パラメーターの値を ConfirmImpact High、Medium、または Low に設定します。 コマンドレットの パラメーターも ConfirmImpact 指定する場合にのみ、 の SupportsShouldProcess 値を指定できます。

ほとんどのコマンドレットでは、 を明示的に指定する必要があります ConfirmImpact 。 代わりに、 パラメーターの既定の設定 (中) を使用します。 [高] ConfirmImpact に設定した場合、操作は既定で確認されます。 ハード ディスク ボリュームの再フォーマットなど、破壊的な操作を行う場合は、この設定を予約します。

非確認メソッドの呼び出し

コマンドレットまたはプロバイダーがメッセージを送信する必要があるが、確認を要求しない場合は、次の 3 つのメソッドを呼び出すことができます。 System.Management.Automation.Cmdlet.WriteObjectの出力がコマンドレットまたはプロバイダーの通常の出力と混同され、スクリプトの記述が困難になるので、System.Management.Automation.Cmdlet.WriteObjectメソッドを使用してこれらの型のメッセージを送信しないようにします。

コマンドレットとプロバイダーは、まず、次のメソッドを呼び出して確認を要求してから、外部のシステムを変更する操作を実行Windows PowerShell。

これを行うには 、System.Management.Automation.Cmdlet.Shouldprocess メソッドを呼び出します。このメソッドは、ユーザーがコマンドを呼び出した方法に基づいて操作を確認するようユーザーに求めるメッセージを表示します。

参照

Writing a Windows PowerShell Cmdlet (Windows PowerShell コマンドレットの記述)