4

スクリプトの先頭に次のParamブロックがあります。

Param
(
    [Parameter(Mandatory = $true)]
    [ValidateScript({Test-Path $_ -PathType Leaf})]
    [string]$Config,

    [switch]$OverThresholdOnly,
    [switch]$SendEmail,
    [switch]$Debug
)

スクリプトを実行すると、次のエラーが発生します。

"A parameter with the name 'Debug' was defined multiple times for this command. At line:1 char:1"

Line:1 and char:1 is the start of the Param block.

$Debugを$Verboseに変更すると、Verboseについて同じエラーが発生します。同じエラーでParamブロックの先頭に$debugを配置しようとしました。

[ValidateScript]セクションを削除すると、正常に機能します。

なぜこれを行うのか誰か教えてもらえますか?[ValidateScript]が$Debugを使用している理由と、変数の名前を変更せずにこれを回避する方法を教えてください。

4

1 に答える 1

4

PowerShell には、すべてのコマンドレットに存在するユビキタス パラメーターがあります。

チェックアウトするget-help about_common_parametersか、ここをクリックしてください

-Debug-Verboseは、2 つの共通パラメーターです。名前の競合を避けるために、別の名前を選択してください。

パラメータ属性を追加すると、PowerShell がパラメータを処理する方法が変わります。その時点で、スクリプト コマンドレットとも呼ばれる高度な機能になります。スクリプト コマンドレットは、共通パラメーターを自動的に受け取ります。

チェックアウトget-help about_Functions_Advancedまたはここをクリック

そしてget-help about_Functions_Advanced_Parameters、またはここをクリック

于 2012-03-01T02:17:21.953 に答える