1

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、 、$truetrue、または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関数を呼び出すコードがパラメーターを提供しない場合、関数がスイッチのデフォルトを取得する方法について誰か提案がありますか?

4

1 に答える 1