4

4 つのパラメーターを持つ関数があり、そのうちの 2 つを設定するかどうかを指定できます。パラメーター セットを使用して、設定されているパラメーターを特定しようとしていますが、パラメーター セットの解決に問題が発生しています。これらは 4 つの可能なパラメータ セットです -

  • どちらのエラーオブジェクトまたは SplunkData
  • 両方のエラー オブジェクトと SplunkData
  • OnlyErrorObject
  • SplunkData のみ

以下のサンプル コードを使用して 4 つのパラメーター セットすべてをテストすると、エラー オブジェクトのみと一部の Splunk データのみのテストが両方とも次のエラーで失敗します -

Test-ParameterSets : 指定された名前付きパラメーターを使用してパラメーター セットを解決できません。

私の調査によると、これは失敗するようです。これは、PowerSehll がパラメーター セットを/にする必要があるBothErrorObjectAndSplunkDataかどうかを判断できないためです。これは理解できます。OnlyErrorObjectOnlySplunkData

上記のどのパラメータ セットが使用されているかを判断するためにコードを変更するにはどうすればよいですか? パラメータ セットでは不可能な場合、他にどのように目標を達成できますか?


サンプルコード

function Test-ParameterSets
{
    [CmdLetBinding(DefaultParameterSetName="NeitherErrorObjectOrSplunkData")]
    param(
        [Parameter(Mandatory=$true)]
        [Parameter(ParameterSetName="NeitherErrorObjectOrSplunkData")]
        [Parameter(ParameterSetName="BothErrorObjectAndSplunkData")]
        [parameter(ParameterSetName="OnlyErrorObject")]
        [Parameter(ParameterSetName="OnlySplunkData")]

        [String]$Message,
        [parameter(ValueFromPipeline=$true)]
        [Parameter(ParameterSetName="BothErrorObjectAndSplunkData")]
        [parameter(ParameterSetName="OnlyErrorObject")]

        [Object]$ErrorObject,
        [Parameter(ParameterSetName="BothErrorObjectAndSplunkData")]
        [Parameter(ParameterSetName="OnlySplunkData")]

        [String[]]$SplunkData,
        [ValidateSet("ERROR", "WARN", "INFO")]
        [String]$Severity = "ERROR"
    )

    Write-Host "$message -"
    Write-Host "-- Parameter Set: $($PSCmdlet.ParameterSetName)`n"
    return
}

Test-ParameterSets -Message "Neither an error object or an Splunk data"
Test-ParameterSets -Message "Only an error object" -ErrorObject (New-Object -TypeName PSCustomObject)
Test-ParameterSets -Message "Only some Splunk data" -SplunkData "Test"
Test-ParameterSets -Message "Both an error object and Splunk data" -ErrorObject (New-Object -TypeName PSCustomObject) -SplunkData "Test"

コード出力例

エラー オブジェクトでも Splunk データでもない -
-- パラメータ セット: NoneErrorObjectOrSplunkData

Test-ParameterSets : 指定された名前付きパラメーターを使用してパラメーター セットを解決できません。
行:31 文字:1
+ Test-ParameterSets -Message "Only an error object" -ErrorObject (New- ...
+ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-ParameterSets]、ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-ParameterSets

Test-ParameterSets : 指定された名前付きパラメーターを使用してパラメーター セットを解決できません。
行:32 文字:1
+ Test-ParameterSets -Message "Only some Splunk data" -SplunkData "Test ...
+ ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument : (:) [Test-ParameterSets]、ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet、Test-ParameterSets

エラー オブジェクトと Splunk データの両方 -
-- パラメータ セット: BothErrorObjectAndSplunkData

4

1 に答える 1