У меня есть функция с четырьмя параметрами, два из которых можно установить или нет. Я пытаюсь использовать наборы параметров, чтобы определить, какие параметры были установлены, но у меня возникают некоторые проблемы с разрешением набора параметров. Это четыре возможных набора параметров -
- NeitherErrorObjectOrSplunkData
- BothErrorObjectAndSplunkData
- OnlyErrorObject
- OnlySplunkData
Когда я тестирую все четыре набора параметров, используя приведенный ниже пример кода, тесты для Только объект ошибки и Только некоторые данные Splunk не работают со следующей ошибкой:
Test-ParameterSets: набор параметров не может быть разрешен с использованием указанных именованных параметров.
Из моих исследований кажется, что это не удается, потому что PowerSehll не может определить, должен ли набор параметров быть BothErrorObjectAndSplunkData
или _2 _ / _ 3_, что я могу понять.
Как я могу изменить свой код, чтобы определить, какие из вышеперечисленных наборов параметров используются? Если это просто невозможно с наборами параметров, как еще я могу достичь своей цели?
Пример кода
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 -
- Набор параметров: NeitherErrorObjectOrSplunkDataTest-ParameterSets: набор параметров не может быть разрешен с использованием указанных именованных параметров.
В строке: 31 символ: 1
+ Test-ParameterSets -Message "Только объект ошибки" -ErrorObject (New- ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Test-ParameterSets], ParameterBindingException
+ FullyQualifiedErrorId: AmbiguousParameterSet, Test-ParameterSetsTest-ParameterSets: набор параметров не может быть разрешен с использованием указанных именованных параметров.
В строке: 32 символа: 1
+ Test-ParameterSets -Message "Только некоторые данные Splunk" -SplunkData "Test ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Test-ParameterSets], ParameterBindingException
+ FullyQualifiedErrorId: AmbiguousParameterSet, Test-ParameterSetsИ объект ошибки, и данные Splunk -
- Набор параметров: BothErrorObjectAndSplunkData