2011-12-14 27 views
32

Estoy empezando a usar PowerShell y estoy creando funciones en un archivo 'biblioteca' para mejorar la legibilidad que luego llamo desde mi 'trabajador' guión.Cómo llamar a una función en otra secuencia de comandos de PowerShell al ejecutar la secuencia de comandos de PowerShell con 'Ejecutar con PowerShell'

=================== Library file ========================== 
function ShowMessage($AValue) 
{ 
    $a = new-object -comobject wscript.shell 
    $b = $a.popup($AValue) 
} 
=================== End Library file ========================== 


=================== Worker file ========================== 
. {c:\scratch\b.ps1} 

ShowMessage "Hello" 
=================== End Worker file ========================== 

Ejecución del 'trabajador' script funciona bien cuando en el IDE PowerShell pero cuando haga clic en el archivo de los trabajadores y seleccione 'Ejecutar con PowerShell' no puede encontrar la función 'ShowMessage'. Ambos archivos están en la misma carpeta. ¿Qué podría estar pasando aquí, por favor?

+0

También tenga en cuenta que al invocar el script usando '&', ej. '&" c: \ scratch \ b.ps1 "' no importa las funciones. – ashes999

Respuesta

53

intenta agregar script como el siguiente:

=================== Worker file ========================== 
. "c:\scratch\b.ps1" 

ShowMessage "Hello" 
=================== End Worker file ========================== 
+2

Eso funciona bien, gracias. –

+1

Atención cuando se utiliza una ruta relativa: no olvide agregar un punto antes de la ruta '. ". \ b.ps1" '. Siendo muy nuevo en psh, no sabía que el primer punto es un operador para modificar el alcance y en ese contexto no tiene nada que ver con las rutas. Consulte [Notación de la fuente de puntos] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes). –

11

En el archivo de trabajo, punto-fuente del archivo de biblioteca, esto va a cargar todo el contenido (funciones, variables, etc.) para el ámbito global, y luego Podrá llamar funciones desde el archivo de la biblioteca.

=================== Worker file ========================== 
# dot-source library script 
# notice that you need to have a space 
# between the dot and the path of the script 
. c:\library.ps1 

ShowMessage -AValue Hello 
=================== End Worker file ====================== 
+5

Es más seguro incluir la ruta entre comillas, en caso de que haya espacio, como Archivos de programa –

+0

De acuerdo, pero esta ruta no tiene espacios :). Tiendo a eliminar citas cuando no son necesarias. –

Cuestiones relacionadas