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?
Verwenden Sie stattdessen PSCommandPath in Ihrem Modul:
Beispiel test.psm1
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%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%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.
Ich habe das heute benutzt, nachdem ich ein paar Techniken ausprobiert habe.
%Vor%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 ('\')
Tags und Links powershell powershell-v2.0