Estás reinventando la rueda. Los scripts normales de PowerShell tienen parámetros que comienzan con -
, comoscript.ps1 -server http://devserver
Luego los manejas en la param
sección al comienzo del archivo.
También puede asignar valores predeterminados a sus parámetros, 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 del guión puedes simplemente
write-output $server
ya que todos los parámetros se convierten en variables disponibles en el alcance del script.
En este ejemplo, $server
obtiene un valor predeterminado si se llama al script sin él, el script se detiene si omite el -username
parámetro y solicita la entrada del terminal si -password
se omite.
Actualización: es posible que también desee pasar una "bandera" (un parámetro booleano verdadero / falso) a un script de PowerShell. Por ejemplo, su script puede aceptar una "fuerza" donde el script se ejecuta en un modo más cuidadoso cuando no se usa la fuerza.
La palabra clave para eso es el [switch]
tipo de parámetro:
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
Dentro del guión, entonces trabajarías de esta manera:
if ($force) {
//deletes a file or does something "bad"
}
Ahora, al llamar al script, establecería el parámetro switch / flag de esta manera:
.\yourscript.ps1 -server "http://otherserver" -force
Si desea declarar explícitamente que el indicador no está configurado, hay una sintaxis especial para eso
.\yourscript.ps1 -server "http://otherserver" -force:$false
Los enlaces a la documentación relevante de Microsoft (para PowerShell 5.0; aunque las versiones 3.0 y 4.0 también están disponibles en los enlaces):
[string]$username = $(throw "-username is required.")
que hay sintaxis de parámetros obligatorios:[Parameter(Mandatory=$true)][string]$username
. Aquí hay más información sobre la diferencia entre estas técnicas: blogs.technet.com/b/heyscriptingguy/archive/2011/05/22/…