Al desarrollar las funciones de PowerShell, a veces es necesario poner algunos valores de entrada a las funciones, como un nombre de archivo, una cadena o cualquier otro valor. En PowerShell, hay dos formas de pasar parámetros a las funciones: a través de la variable $Args y estableciendo parámetros formales .
Pasando parámetros a la función PoSh a través de la variable $Args
Veamos el ejemplo más simple de la función PowerShell que muestra algo de texto en la pantalla:
Function TestPoShArgs {
"Me encanta PowerShell"
}
Añade la variable $Args a la función:
Función TestPoShArgs {
"Me encanta PowerShell $Args"
}
Y ejecutarlo con unos pocos parámetros:
TestPoShArgs uno dos tres

En este ejemplo, pasamos 3 parámetros a la entrada de la función, separados por espacios. A la salida de la función, también aparecen con espacios. Puedes cambiar el delimitador de salida usando la variable especial $OFS .
Function TestPoShArgs {
$OFS=","
"Me encanta PowerShell $Args"
}
TestPoShArgs Uno Dos Tres
Ahora los valores devueltos en los resultados de la función están separados por comas.

La variable $Args es una simple matriz de PowerShell y puedes acceder a sus valores individuales por números de secuencia (empezando por el 0).
Function TestPoShArgs {
"Número total de arcos: $($Args.Count)"
Para($i=0; $i -lt $Args.Count; $i++) {$Args[$i]}
}
TestPoShArgs Uno Dos Tres Cuatro
Como puede ver, la función calculó el número de argumentos que se le pasaron y los enumeró línea por línea.
LEER TAMBIÉN usando GPUpdate para actualizar los ajustes de la política de grupo

Pasando los parámetros formales a las funciones de PowerShell
Al igual que en otros lenguajes de programación, puede establecer una serie de parámetros formales para las funciones de PowerShell. Durante la ejecución de la función, los valores de estos parámetros serán reemplazados por los argumentos pasados por el usuario.
Los parámetros formales se pasan entre paréntesis después del nombre de la función:
Function TestPoShParam ($curwidth, $curheight) {
$summ=$curwidth+$curheight
"Suma actual $summ"
}
TestPoShParam 800 600
Esta función acepta dos parámetros como entrada y muestra su suma.

Cuando se especifican los argumentos de la función, se pueden especificar los nombres de los parámetros; en este caso, su orden no importa:
TestPoShParam -altura de la curva 800 -ancho de la curva 800
Por defecto, el propio PowerShell intenta determinar el tipo de valor del parámetro. Pero puede especificar el tipo de la variable manualmente. Por ejemplo:
Función TestPoShParam ([int] $altitud_metro, [cadena] $apellido) { "La montaña " + $apellido + " se trata de " + ($altitud_metro/1000) +" km" } TestPoShParam 8848 $0027Everest$0027

Si intercambias los parámetros con los tipos dados, las funciones Powershell devolverán un error:
TestPoShParam : No se puede procesar la transformación del argumento en el parámetro $0027curheight_meter$0027. No se puede convertir el valor
«Everest» para escribir «System.Int32». Error: «La cadena de entrada no estaba en un formato correcto».
También en la función PowerShell, puede especificar que algunos parámetros son obligatorios y su orden. Para ello se utiliza la siguiente sintaxis:
Function TestPoShParam {
PARAM (
[PARAMETRO(Obligatorio=$Verdadero,Posición=0,Mensaje de Ayuda ="Especificar ruta completa de la BD")][ValidarLongitud(1,20)][Cadena]$DBPath,
[PARAMETRO(Obligatorio=$True,Position=1,HelpMessage ="Especificar tamaño máximo de la BD")][String]$MaxSize,
[PARÁMETRO(Obligatorio=$Falso,Posición=2)][Cadena]$Tipo=$0027MSSQL$0027
)
Return("Path:" +$DBPath + " DB_size:" + $maxsize + " DB_type:" + $Type)
}
TestPoShParam -DBPath $0027c:mysql$0027 -MaxSize 20

En este ejemplo, los argumentos adicionales aparecieron cerca del interruptor de Parámetros:
- Obligatorio – si se especifica True, este parámetro de la función es muy necesario;
- HelpMessage – ayuda para el usuario sobre el parámetro de la función;
- Posición – posición del argumento cuando se llama a la función (Los parámetros deben ser especificados en un orden estrictamente definido. Si no se especifica uno de los parámetros, entonces PowerShell lo recordará automáticamente y ofrecerá introducir la información que falta);
- ValidateLength – longitud máxima del argumento (no se puede utilizar un valor con una longitud mayor que el límite del argumento especificado).