次の方法で共有


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

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

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

確認要求のサポート

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

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

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

Confirmation 要求メソッドの呼び出し

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

ShouldContinue メソッドの呼び出し

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

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

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

次の例は、System.Management.Automation.Cmdlet.ShouldProcess を呼び出し、System.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 メソッドを呼び出す例については、「確認 を要求する方法参照してください。

影響レベルを指定する

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

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

確認以外のメソッドの呼び出し

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

  • ユーザーに注意を払い、操作を続行するために、コマンドレットまたはプロバイダーは System.Management.Automation.Cmdlet.WriteWarning メソッドを呼び出すことができます。

  • Verbose パラメーターを使用してユーザーが取得できる追加情報を提供するために、コマンドレットまたはプロバイダーは System.Management.Automation.Cmdlet.WriteVerbose メソッドを呼び出すことができます。

  • 他の開発者や製品サポートにデバッグ レベルの詳細を提供するために、コマンドレットまたはプロバイダーは、System.Management.Automation.Cmdlet.WriteDebug メソッドを呼び出すことができます。 ユーザーは、Debug パラメーターを使用してこの情報を取得できます。

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

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

こちらもご覧ください

Windows PowerShell コマンドレット の作成