tutorial - script powershell ejemplos
Cómo ejecutar un script de Powershell desde la línea de comando y pasar un directorio como parámetro (5)
My Powershell script, Foo.ps1:
Function Foo($directory)
{
echo $directory
}
if ($args.Length -eq 0)
{
echo "Usage: Foo <directory>"
}
else
{
Foo($args[0])
}
Desde la consola de Windows:
powershell -command ./Foo.ps1
Resultados en: "El término ''. / Foo.ps1'' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Compruebe la ortografía del nombre, o si se incluyó una ruta, verifique que la ruta es correcto y vuelve a intentarlo ".
Esto a pesar de que Foo.ps1 está en el directorio actual desde donde estoy llamando Powershell. Luego traté de llamarlo para especificar la ruta completa al archivo de script; porque esta ruta contiene un espacio, creo que tengo que citarlo de alguna manera. También necesito pasar un argumento a la secuencia de comandos que también es un nombre de archivo que contiene uno o más espacios. No importa lo que intento, no puedo hacer que funcione. Esta es mi mejor estimación hasta el momento:
powershell -command "''C:/Dummy Directory 1/Foo.ps1'' ''C:/Dummy Directory 2/File.txt''"
Lo que da el error "Token inesperado" C: / Dummy Directory 2 / File.txt ''en la expresión o declaración En la línea: 1 char: 136 ".
Editar: he resuelto por qué
powershell -command ./Foo.ps1
no funcionó. Esto fue porque mi archivo Microsoft.PowerShell_profile.ps1 tenía
cd C: /
así que tan pronto como PowerShell se estaba iniciando, estaba cambiando de directorio.
Agregue la declaración de param en la parte superior del archivo ps1
test.ps1
param(
# Our preferred encoding
[parameter(Mandatory=$false)]
[ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
[string]$Encoding = "UTF8"
)
write ("Encoding : {0}" -f $Encoding)
resultado
C:/temp> ./test.ps1 -Encoding ASCII
Encoding : ASCII
Usando el -Command
bandera puede ejecutar toda su línea de powershell como si fuera un comando en el indicador de PowerShell:
powershell -Command "& ''<PATH_TO_PS1_FILE>'' ''<ARG_1>'' ''<ARG_2>'' ... ''<ARG_N>''"
Esto resolvió mi problema con la ejecución de comandos de PowerShell en Visual Studio Post-Build y Pre-Build events.
está llamando a un archivo de script no a un comando, por lo que debe usar -file, por ejemplo:
powershell -executionPolicy bypass -noexit -file "c:/temp/test.ps1" "c:/test with space"
para PS V2
powershell.exe -noexit &''c:/my scripts/test.ps1''
(marque la parte inferior de esta página de Technet http://technet.microsoft.com/en-us/library/ee176949.aspx )
prueba esto:
powershell "C:/Dummy Directory 1/Foo.ps1 ''C:/Dummy Directory 2/File.txt''"
Cambie su código a lo siguiente:
Function Foo($directory)
{
echo $directory
}
if ($args.Length -eq 0)
{
echo "Usage: Foo <directory>"
}
else
{
Foo([string[]]$args)
}
Y luego invocarlo como:
powershell -ExecutionPolicy RemoteSigned -File "c: / foo.ps1" "c: / Documents and Settings" "c: / test"