2009-09-10 36 views

Respuesta

63

lo más habitual es "punto" de la secuencia de comandos en el alcance (global, otro script, dentro de un ScriptBlock). Puntear un script cargará y ejecutará el script dentro de ese alcance sin crear un nuevo alcance anidado. Con las funciones, esto tiene la ventaja de que se quedan después de que se haya ejecutado el script. Se podría hacer lo Tomer sugiere excepto que usted tendría que salpican el ejemplo de script:

powershell -command "& { . <path>\script1.ps1; My-Func }" 

Si lo que desea es ejecutar la función de su sesión de PowerShell actual y luego hacer esto:

. .\script.ps1 
My-Func 

Sólo ten consciente de que cualquier script que no esté en una función se ejecutará y cualquier variable de script se convertirá en una variable global.

+0

+1, el segundo fragmento de código era justo lo que necesitaba, para hacer una depuración sencilla de funciones separadas en un archivo de secuencia de comandos desde ISE –

+1

En el segundo fragmento de código, puede rodear el código con '& {...} 'como en' & {. . \ script1.ps1; My-Func} 'para evitar la contaminación del alcance. –

+0

Si tiene parámetros en la función, colóquelos después del nombre de la función, p. powershell -command "& {." C: \ script.ps1 "; MyMethod" arg1 "" arg2 "}" – HockeyJ

2

Tal vez algo así como

powershell -command "& { script1.ps; My-Func }" 
0

La instrucción arroja el siguiente mensaje de error. El punto es necesario antes del nombre del nombre del archivo para cargarlo en la memoria, como sugirió Keith Hill.

MyFunction: The term 'MyFunction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Cuestiones relacionadas