Wie kann der Name des aufrufenden Skripts von einem Powershell-Modul zurückgegeben werden?

8

Ich habe zwei Powershell-Dateien, ein Modul und ein Skript, das das Modul aufruft.

Modul: test.psm1

%Vor%

Skript: myTest.ps1

%Vor%

Wenn ich ./myTest.ps1 starte, bekomme ich

Get-Info

Ich möchte den Namen des aufrufenden Skripts (test.ps1) zurückgeben. Wie kann ich das tun?

    
Mark Allison 29.04.2014, 16:18
quelle

6 Antworten

9

Verwenden Sie stattdessen PSCommandPath in Ihrem Modul:
Beispiel test.psm1

%Vor%

Beispiel myTest.ps1

%Vor%

Ausgabe:

%Vor%

Wenn Sie nur den Namen des Skripts haben möchten, das durch Ausführen von

verwaltet werden kann %Vor%

Das würde ausgeben:

%Vor%     
TheMadTechnician 29.04.2014, 16:47
quelle
6

Ich glaube, Sie könnten das Cmdlet Get-PSCallStack verwenden, das ein Stack-Array zurückgibt Rahmenobjekte. Sie können damit das aufrufende Skript bis zur Codezeile identifizieren.

Modul: test.psm1

%Vor%

Ausgabe:

%Vor%     
James 30.04.2014 00:30
quelle
2

Die Verwendung von $ MyInvocation.MyCommand ist relativ zum Gültigkeitsbereich.

Ein einfaches Beispiel (eines Skripts: C: \ Dev \ Test-Script.ps1):

%Vor%

Die Ausgabe beim Ausführen. \ c: \ Dev \ Test-Script.ps1:

%Vor%

Wie Sie sehen, ist $ MyInvocation relativ zum Gültigkeitsbereich. Wenn Sie den Pfad Ihres Skripts haben möchten, schließen Sie es nicht in eine Funktion ein. Wenn Sie den Befehl aufrufen möchten, müssen Sie ihn umbrechen.

Sie können den Callstack auch wie vorgeschlagen verwenden, beachten Sie jedoch die Scoping-Regeln.

    
CmdrTchort 30.04.2014 08:30
quelle
0

Ich habe das heute benutzt, nachdem ich ein paar Techniken ausprobiert habe.

%Vor%     
BeastianSTi 17.10.2014 03:02
quelle
0

Dies stellt den Skriptpfad mit einem umgekehrten umgekehrten Schrägstrich als eine Variable und dem Skriptnamen als einem anderen bereit.

Der Pfad funktioniert mit Powershell 2.0 und 3.0 und 4.0 und wahrscheinlich 5.0 Wo mit Posershell $ PSscriptroot jetzt verfügbar ist.

$ _ INST = $ meininvokation.mycommand.pathstring (0, ($ myinvocation.mycommand.path.length - $ MyInvocation.mycommand.name.length))

$ _ ScriptName = $ myinvocation.mycommand.path_string ($ MyInvocation.MyCommand.Definition.LastIndexOf ('\'), ($ MyInvocation.mycommand.name.length +1))

$ _ ScriptName = $ _ScriptName.TrimStart ('\')

    
DeployGuy 10.04.2015 21:07
quelle
0

Um auf die Aufrufinformationen des aufrufenden Skripts zu verweisen, verwenden Sie:

%Vor%

z.B.:

%Vor%     
iRon 21.12.2017 14:10
quelle

Tags und Links