Estás reinventando la rueda. scripts de PowerShell normales tienen parámetros a partir de -
, como script.ps1 -server http://devserver
A continuación, las manejan en param
sección en el principio del archivo (ver tutorial: https://devcentral.f5.com/articles/powershell-abcs-p-is-for-parameters)
También puede asignar valores por defecto a sus parametros, leerlos desde la consola si no está disponible o detener la ejecución del script:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $(Read-Host "Input password, please")
)
Dentro de la secuencia de comandos que puede simplemente
write-output $server
ya que todos los parámetros se convierten en variables disponibles en el alcance del script.
En este ejemplo, el $server
obtiene un valor por defecto si el script se llama sin ella, la escritura se detiene si se omite el parámetro -username
y pide la entrada del terminal si se omite -password
.
Actualización: Es posible que desee pasar un "indicador" (un parámetro booleano verdadero/falso) a un script de PowerShell. Por ejemplo, su secuencia de comandos puede aceptar una "fuerza" donde la secuencia de comandos se ejecuta en un modo más cuidadoso cuando no se utiliza la fuerza.
La palabra clave para ese tipo es [switch]
parámetro:
param (
[string]$server = "http://defaultserver",
[string]$password = $(Read-Host "Input password, please"),
[switch]$force = $false
)
Dentro de la secuencia de comandos, entonces sería trabajar con él de esta manera:
if ($force) {
//deletes a file or does something "bad"
}
Ahora, cuando se llama a la secuencia de comandos lo haces con la parámetro de interruptor/bandera como este:
.\yourscript.ps1 -server "http://otherserver" -force
Si explícitamente desea st comió que la bandera no está definida, hay una sintaxis especial para que
.\yourscript.ps1 -server "http://otherserver" -force:$false
Los enlaces a la documentación pertinente Microsoft (por PowerShell 5.0; las versiones 3.0 y 4.0 también están disponibles en los enlaces):
increíble! Y gracioso porque originalmente estaba tratando de usar param pero me alejé de él porque no pude descifrar la sintaxis. ¡Jaja gracias! –
De hecho, una de las grandes ventajas de PowerShell es que proporciona una infraestructura de análisis de parámetro estándar que es fácil de usar. –
Tiene "-site" en el ejemplo de la línea de comandos y no coincide con "[string] $ server" en el script ¿Eso es un error tipográfico? – JasDev