Funciones de Parenthesis Powershell

Cómo llamar a la función usando parámetros en powershell con paréntesis.

Tengo como ejemplo esta función

function Greet([string]$name , [int]$times) { for ([int]$i = 1; $i -le $times;$i++) { Write-Host Hiiii $name } } 

Si llamo a las funciones usando Greet Ricardo 5 o Greet "Ricardo" 5 funciona. Pero cuando uso Greet ("Ricardo",5) o Greet("Ricardo" ; 5) , falla.

¿Qué está mal?

Las funciones se comportan como cmdlets. Es decir, no escribe dir (c: \ temp). Las funciones también toman parámetros como espacios separados y como cmdlets, parámetros posicionales, nombrados y opcionales, por ejemplo:

 Greet Recardo 5 Greet -times 5 -name Ricardo 

PowerShell usa () para permitirle especificar expresiones como estas:

 function Greet([string[]]$names, [int]$times=5) { foreach ($name in $names) { 1..$times | Foreach {"Hi $name"} } } Greet Ricardo (1+4) Great Ricardo # Note that $times defaults to 5 

También puede especificar matrices simples mediante el uso de una lista separada por comas, por ejemplo:

 Greet Ricardo,Lucy,Ethyl (6-1) 

Entonces, cuando pasa algo como ("Ricardo",5) se evalúa como un valor de parámetro único que es una matriz que contiene dos elementos "Ricardo" y 5 . Eso se pasaría al parámetro $name , pero luego no habría ningún valor para el parámetro $times .

La única vez que utiliza una lista de parámetros entre paréntesis es cuando llama a métodos .NET, por ejemplo:

 "Hello World".Substring(6, 3)