2017-05-18 3 views
1

Ich möchte Funktion in Datei functions.ps1 definieren und dann von einem anderen Skript aufrufen. Etwas wie folgt aus:Wie öffentliche Funktion zu machen

Functions.ps1:

Function Hi() 
{ 
"hi" 
} 

Anruf von einem anderen Skript (Call.ps1).

Call.ps1:

invoke-expression -Command .\functions.ps1 
Hi 

Aber Funktion in lokalem Bereich von Skript functions.ps1 definiert ist und ich err:

The term 'hi' 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, v erify that the path is correct and try 
again. 

Gibt es eine einfache Möglichkeit, dies zu beheben?

Antwort

5

Sie müssen dotSource Ihr Skript in Ihre aktuelle Runspace zu laden:

. .\functions.ps1 
Hi 
0

Ich denke, die Art und Weise, dies zu tun würde soruce die Datei im Skript zu Punkt sein, der die Funktion verwendet werden soll (s).

Also im Skript, das die Funktion verwenden wird, setzen Sie so etwas.

. . \ functions.ps1 Dann können Sie Funcitons in dieser Datei aufrufen.

Ein bisschen von Speicher, aber denke, es würde funktionieren.

Edit: eine Brainfart entfernt .. :)

+0

Während Ihre Antwort richtig ist, es keine weiteren Informationen an die Antwort gibt, habe ich schon zur Verfügung gestellt .... –

+0

Ich verstehe nicht, den Punkt, dass Kommentar. Was ist das Problem mit meiner Antwort .. ist es richtig oder nicht? Es war wie 2 Minuten zwischen den beiden .. was nur bedeutet, ich verbrachte mehr Zeit als Sie tippen .. –

+0

Sie haben beide Recht. Wenn Sie Ihre Antwort hinzugefügt haben, war das zwar legitim, aber es fügt der anderen Antwort nichts hinzu. –

0

Yup, dotSource ist das, was Sie suchen. Wenn Ihr Skript Leerzeichen enthält, würden Sie Quelle es wie dieses

."C:\Dotsourced script.ps1" 

Ohne Zwischenraumpunkt- ist wie die anderen Leute Alle sagen

.C:\function1.ps1 

die Funktionen und Logik im dotsourced Skript enthalten werden geladen nach der Beschaffung. Versuchen Sie also, die Skripts in Ihren Funktionen zu behalten, sonst läuft es bei der Quelle.

Lesen Sie mehr darüber auf SS64 zum Beispiel: https://ss64.com/ps/source.html

Verwandte Themen