2011-12-14 23 views
32

Sto iniziando a utilizzare PowerShell e sto creando funzioni in un file 'libreria' per migliorare la leggibilità che poi chiamo dal mio 'worker' script.Come chiamare una funzione in un altro script PowerShell quando si esegue lo script PowerShell usando 'Esegui 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 ========================== 

L'esecuzione del 'lavoratore' script funziona bene quando nel PowerShell IDE ma quando right-click il file dei lavoratori e scelgo 'Corri con PowerShell' non riesce a trovare la funzione 'ShowMessage'. Entrambi i file si trovano nella stessa cartella. Cosa potrebbe succedere qui, per favore?

+0

Si noti inoltre che richiamando lo script utilizzando '&', ad es. '&" c: \ scratch \ b.ps1 "' non importa le funzioni. – ashes999

risposta

53

tenta di aggiungere script come questo:

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

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

Che funziona bene, grazie. –

+1

Attenzione quando si utilizza il percorso relativo: non dimenticare di anteporre un punto prima del percorso '. ". \ B.ps1" '. Essendo molto nuovo per psh, non sapevo che il primo punto è un operatore per modificare l'ambito e in quel contesto non ha nulla a che fare con i percorsi. Vedi [Dot Source Notation] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes). –

11

Nel file dei lavoratori, dot-source file di libreria, questo verrà caricato tutti i contenuti (funzioni, variabili, ecc) per la portata globale, e poi si sarà in grado di chiamare le funzioni dal file della libreria.

=================== 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

È più sicuro racchiudere il percorso tra virgolette, nel caso ci sia spazio, come Program Files –

+0

Accetto, ma questo percorso non ha spazi :). Tendo a rimuovere le virgolette quando non sono necessarie. –

Problemi correlati