DNS ゾーンを更新するパペット スクリプトによって取得される *.CSV ファイルを更新する関数を作成しています。実際の.CSV ファイルを壊したくないので、ダミー ファイルを追加しました。この関数を開発している間、 、 、 の 3 つのパラメーター セットがReset
ありAdd
ますRemove
。これらのパラメーターは、ダミー ファイルを現在の正規の .CSV ファイルで上書きし、レコードを追加し、レコードを削除します。メイン スクリプトは、これらのスイッチの 2 つまたは 3 つすべてがアクティブな状態で関数を呼び出すことはありません。
スクリプトのパラメーター ブロックをどのようにコーディングしたかを次に示します。
function Update-DNS_Dev
{
[CmdletBinding(defaultparametersetname='Reset')]
[OutputType([int])]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0,
ParameterSetName='Reset')]
[switch]$Reset,
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0,
ParameterSetName='Remove')]
[switch]$Remove,
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0,
ParameterSetName='Add')]
[switch]$Add,
# Name of a Dummy file
[Parameter(ValueFromPipelineByPropertyName=$true,
Position=1)]
[string]$DummyFile = "{0}\dPvmnames.csv" -f $DNSScratchpad,
[Parameter(ValueFromPipelineByPropertyName=$true,
ParameterSetName='Remove')]
[Parameter(ValueFromPipelineByPropertyName=$true,
ParameterSetName='Add')]
[string]$servername,
[Parameter(ValueFromPipelineByPropertyName=$true,
ParameterSetName='Add')]
[Parameter(ValueFromPipelineByPropertyName=$true,
ParameterSetName='Remove')]
[string]$domain,
[Parameter(ValueFromPipelineByPropertyName=$true,
ParameterSetName='Add')]
[string]$details,
[Parameter(ValueFromPipelineByPropertyName=$true,
ParameterSetName='Add')]
[string]$type
)
}
スクリプトの下部ではswitch ($psCmdlet.ParameterSetName)
、スイッチのさまざまな機能を処理するために使用します。を実行するGet-Help Update-DNS
と、期待される出力が表示されます。
PS> get-help Update-DNS_Dev
NAME
Update-DNS_Dev
SYNTAX
Update-DNS_Dev [-Reset] [[-DummyFile] <string>] [<CommonParameters>]
Update-DNS_Dev [-Remove] [[-DummyFile] <string>] [-servername <string>] [-domain <string>] [<CommonParameters>]
Update-DNS_Dev [-Add] [[-DummyFile] <string>] [-servername <string>] [-domain <string>] [-details <string>] [-type <string>] [<CommonParameters>]
関数を呼び出して-Reset
パラメーターを指定すると、スクリプトは期待どおりに実行されますが、パラメーターを指定せずに呼び出すと、デフォルトが有効にならず1
、 、$true
、true
、またはEnterキーを押して、デフォルト-Reset
パラメーターのように見えるものを常に受け入れます。赤いエラー メッセージをスローします。
PS> Update-DNS_Dev コマンド パイプライン位置 1 のコマンドレット Update-DNS_Dev 次のパラメーターの値を指定します。 (ヘルプを表示するには !? と入力します。) リセット: Update-DNS_Dev : パラメータ 'Reset' で引数の変換を処理できません。 値 "System.String" を "System.Management.Automation. SwitchParameter". Boolean パラメーターは、Boolean 値と数値のみを受け入れます。 $True、$False、1 または 0 など。 行:1 文字:1 + Update-DNS_Dev + ~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Update-DNS_Dev]、ParameterBindingArgumentTransformationException + FullyQualifiedErrorId : ParameterArgumentTransformationError,Update-DNS_Dev
-Reset
関数を呼び出すコードがパラメーターを提供しない場合、関数がスイッチのデフォルトを取得する方法について誰か提案がありますか?