Добавьте атрибуты к "системным параметрам" (например, те, которые добавлены через CmdletBinding / SupportsPaging)
Можно ли добавить атрибуты к системным параметрам?
скажем, у меня есть функция, которая поддерживает подкачку:
function Get-MyPage {
[CmdletBinding(SupportsPaging = $true)]
param (
[Parameter(Mandatory)]
[string]$Something
)
process {
#...
}
}
Я мог бы дать $Something
параметр псевдоним или добавить проверку следующим образом:
[Alias('Thing')]
[ValidateSetAttribute('A','B','C')]
[string]$Something
Однако возможно ли это сделать с теми "системными параметрами", которые добавляются через CmdletBinding / SupportsPaging?
т.е. как бы я реализовал следующее, учитывая, что я не определяю явно First
параметр?
[Alias('PageSize')]
[ValidateRange(1, 250)]
#[int]$First #This parameter exists because SupportsPaging = $true
Пытался:
[PSAlias]$FirstAlias = New-Object 'PSAlias' -ArgumentList @('PageSize', 'First', ([string].Name))
(Get-Command -Name 'Get-MyPage').Parameters['First'].Aliases.Add($FirstAlias)
(Get-Command -Name 'Get-MyPage').Parameters['First'].Aliases #this shows it's been successfully added
Get-MyPage "hello" -Skip 3 -IncludeTotalCount -PageSize 4 #this shows it doesn't work
#Get-MyPage : A parameter cannot be found that matches parameter name 'PageSize'.
(Get-Command -Name 'Get-MyPage').Parameters['First'].Aliases.Clear()
(Get-Command -Name 'Get-MyPage').Parameters['First'].Aliases.Add('PageSize')
Get-MyPage "hello" -PageSize 2 -Skip 3 -IncludeTotalCount
#Get-MyPage : A parameter cannot be found that matches parameter name 'PageSize'
(Get-Command -Name 'Get-MyPage').Parameters['First'].Attributes.Add((New-Object 'System.Management.Automation.AliasAttribute' -ArgumentList 'First'))
#Get-MyPage : A parameter cannot be found that matches parameter name 'PageSize'.
Полный код командлета, использованный для вышеуказанного
function Get-MyPage {
[CmdletBinding(SupportsPaging = $true)]
param (
[Parameter(Mandatory)]
[string]$Something
)
process {
[hashtable]$splat = @{}
if ($PSCmdlet.PagingParameters.Skip) {$splat.Add('Skip', $PSCmdlet.PagingParameters.Skip)}
if ($PSCmdlet.PagingParameters.First -ne [System.UInt64]::MaxValue) {$splat.Add('First', $PSCmdlet.PagingParameters.First)}
$Something.ToCharArray() | select @splat
}
end {
if ($PSCmdlet.PagingParameters.IncludeTotalCount) { $PSCmdlet.PagingParameters.NewTotalCount($Something.ToCharArray().Count, 1.0)}
}
}