run - powershell exe
Pasar una variable a un script de powershell a través de la línea de comando (3)
Soy nuevo en PowerShell y trato de enseñarme lo básico. Necesito escribir un script ps para analizar un archivo, que no ha sido demasiado difícil.
Ahora quiero cambiarlo para pasar una variable al script. esa variable será la cadena de análisis. Ahora, la variable siempre será 1 palabra, y no un conjunto de palabras o palabras múltiples.
Esto parece súper simple pero me plantea un problema. Aquí está mi código simple:
$a = Read-Host
Write-Host $a
Cuando ejecuto el script desde mi línea de comando, la variable que pasa no funciona:
./test.ps1 hello
./test.ps1 "hello"
./test.ps1 -a "hello"
./test.ps1 -a hello
./test.ps1 -File "hello"
Como puede ver, he intentado muchos methos sin éxito, y el script ha tomado el valor y lo ha generado.
La secuencia de comandos se ejecuta, y espera a que escriba un valor, y cuando lo hago, echos ese valor.
Solo quiero que muestre mi valor pasado, ¿qué cosa tan minúscula me estoy perdiendo?
Gracias.
Aquí hay un buen tutorial sobre los parámetros de Powershell:
PowerShell ABC''s - P es para parámetros
Básicamente, debe usar una declaración param
en la primera línea del script
param([type]$p1 = , [type]$p2 = , ...)
o use la variable incorporada $ args, que se completa automáticamente con todos los argumentos.
Declare el parámetro en test.ps1:
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$input_dir,
[Parameter(Mandatory=$True)]
[string]$output_dir,
[switch]$force = $false
)
Ejecute la secuencia de comandos desde Ejecutar O Programador de tareas de Windows:
powershell.exe -command "& C:/FTP_DATA/test.ps1 -input_dir C:/FTP_DATA/IN -output_dir C:/FTP_DATA/OUT"
o,
powershell.exe -command "& ''C:/FTP DATA/test.ps1'' -input_dir ''C:/FTP DATA/IN'' -output_dir ''C:/FTP DATA/OUT''"
Haga esto en su test.ps1, en la primera línea
param(
[string]$a
)
Write-Host $a
Entonces puedes llamarlo con
./Test.ps1 "Here is your text"
Encontrado here