usar tutorial script para ejemplos ejecutar desde crear copiar como comandos archivos archivo powershell powershell-v2.0

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"