Я пытался добавить System.ComponentModel.DefaultValueAttribute к AttributeCollection из RuntimeDefinedParameter, но does't работа ..Как установить значение по умолчанию для динамического параметра?
ответ
System.Management.Automation.RuntimeDefinedParameter имеет свойство «Value», так что я предполагаю, что я хотел бы использовать его, чтобы установить значение по умолчанию. Это похоже на работу (когда я отлаживаю скрипт, я вижу это значение по умолчанию с помощью $ PSCmdlet.GetDynamicParameters()), но мне не удавалось получить доступ к нему в реальной функции (это выполнение «умерло» в вызове $ pscmdlet.GetDynamicParameters()) ,
В любом случае: когда я указал значение, моя функция показывала связанное значение, а не значение по умолчанию.
Не уверен, что это помогает, и TBH Я почти не вижу случая использования для значения по умолчанию, когда параметр является динамическим. Хотелось бы узнать, зачем вам это нужно. :)
Это не совсем то, что вам нужно, но, по крайней мере, хорошее решение (требуется PowerShell 3.0):
Вы можете установить значения по умолчанию для всех параметров всех функций с помощью $PSDefaultParameterValues
. См. https://technet.microsoft.com/en-us/library/hh847819.aspx или используйте справку PowerShell по телефону about_Parameters_Default_Values
.
Как предложено Bartek, свойство Value может быть использован, как показано в коде ниже
DynamicParam {
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$colorlist = [System.Enum]::GetNames([System.Drawing.KnownColor])
$attributes = New-Object System.Management.Automation.ParameterAttribute
$attributes.ParameterSetName = "__AllParameterSets"
$attributes.Mandatory = $false
# Background color
$validationset = New-Object -Type System.Management.Automation.ValidateSetAttribute -ArgumentList $colorlist
$collection = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute]
$collection.Add($attributes)
$collection.Add($validationset)
$background = New-Object -Type System.Management.Automation.RuntimeDefinedParameter("Background", [String], $collection)
$background.Value = "Transparent"
$newparams = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
$newparams.Add("Background", $background)
return $newparams
}
Важный линии здесь составляет $ background.Value = «Прозрачный», где $ фон является RunTimeDefinedParameter.
Для тех, кто интересуется. Сначала я попытался использовать его как атрибут, но в параметрах ParameterAttributes нет .Value.
Пример Chrissy, вероятно, правильный способ сделать это, но мне не удалось получить значение по умолчанию. Параметр не существует в $ PSBoundParameters, когда указано значение по умолчанию.
«Обходной путь», который мы применяли, заключается в привязке $ PSBoundParameter ["Background"] к значению, которое мы хотим по умолчанию. $PSBoundParameters["Background"] = "Transparent"
Расширение примера Крисси:
DynamicParam {
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$colorlist = [System.Enum]::GetNames([System.Drawing.KnownColor])
$attributes = New-Object System.Management.Automation.ParameterAttribute
$attributes.ParameterSetName = "__AllParameterSets"
$attributes.Mandatory = $false
# Background color
$validationset = New-Object -Type System.Management.Automation.ValidateSetAttribute -ArgumentList $colorlist
$collection = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute]
$collection.Add($attributes)
$collection.Add($validationset)
$background = New-Object -Type System.Management.Automation.RuntimeDefinedParameter("Background", [String], $collection)
$PSBoundParameters["Background"] = "Transparent"
$newparams = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
$newparams.Add("Background", $background)
return $newparams
}
Это был единственный способ, которым я мог сам иметь динамический параметр со значением по умолчанию. Спасибо, Томас! –
- 1. Установить значение по умолчанию для динамического массива
- 2. Невозможно установить значение по умолчанию для параметра boolean по умолчанию
- 3. Как установить значение для параметра по умолчанию с помощью Html.DropDownList
- 4. (MODx) Как установить значение по умолчанию для параметра ресурса?
- 5. Как установить значение по умолчанию% для параметра в SSRS
- 6. Как установить значение по умолчанию для параметра Null в SSRS?
- 7. Как установить значение по умолчанию для параметра maven array?
- 8. Как установить значение по умолчанию для параметра отсутствует заместительная
- 9. Как установить значение по умолчанию для параметра DateTime
- 10. Значение по умолчанию динамического типа?
- 11. Установить выбранное значение по умолчанию динамического динамического отображения
- 12. Значение параметра по умолчанию
- 13. По умолчанию значение динамического параметра массива в SystemVerilog
- 14. Значение по умолчанию для необязательного параметра qmap
- 15. Установить значение параметра по умолчанию из другого значения параметра
- 16. Значение по умолчанию для параметра DateTime
- 17. Установить значение по умолчанию для параметра функции в scala
- 18. Значение параметра по умолчанию для делегата
- 19. Зная значение параметра по умолчанию
- 20. Значение параметра параметра RAML по умолчанию
- 21. Значение параметра OptionalAttribute по умолчанию?
- 22. Как установить значение по умолчанию в свойстве объекта параметра
- 23. Значение по умолчанию для параметра struct
- 24. Как установить значение по умолчанию
- 25. C#, значение параметра по умолчанию для IntPtr
- 26. Значение по умолчанию для параметра данных, SSRS
- 27. Cmake значение параметра по умолчанию
- 28. Как установить значение по умолчанию в HTML?
- 29. SFINAE по умолчанию значение параметра
- 30. Как установить значение по умолчанию для comboBox?
мне нужно по умолчанию значение, чтобы параметр требуется. Подобно 'function f ($ p = @ (throw« p требуется »)) {}' – Jack128
Не было бы «обязательным» лучшим выбором, чем ...? – BartekB
Нет. Обязательное диалоговое окно показа (или приглашение командной строки), но мой скрипт должен работать без человеческих поступков. – Jack128