PowerShellでやってみたが、なんだか恐ろしいバッドノウハウの塊になった気がしないでもない

function Draw-Rect
{
[CmdletBinding(DefaultParameterSetName="xywh")]
param(
[Parameter(ParameterSetName="rect", Position=0)]
[ValidateCount(4,4)]
[int[]] $rect,
[Parameter(ParameterSetName="point", Position=0)]
[ValidateScript({$_.Count -eq 2 -and $_[0] -is [int] -and $_[1] -is [int] })]
[object[][]] $pt,
[Parameter(ParameterSetName="xywh",Position=0)]
[int]$x,
[Parameter(ParameterSetName="xywh",Position=1)]
[int]$y,
[Parameter(ParameterSetName="xywh",Position=2)]
[int]$w,
[Parameter(ParameterSetName="xywh",Position=3)]
[int]$h
)
switch ($PsCmdlet.ParameterSetName)
{
"rect" { 1 } # Draw-Rect 1,2,3,4
"point" { 2 } # Draw-Rect (1,2),(3,4)
"xywh" { 4 } # Draw-Rect 1 2 3 4
default { "ダーッ!" }
}
}