Wie man den aktuellen Speicherort des PowerShell-Skripts erhält
-
Verwendung des
Split-Path
Cmdlets, um den aktuellen Standort des PowerShell-Skripts zu ermitteln -
Verwendung der
$PSScriptRoot
Variable, um den aktuellen Standort des PowerShell-Skripts zu ermitteln - Ermitteln des Arbeitsverzeichnisses in Windows PowerShell, um den aktuellen Standort des PowerShell-Skripts zu erhalten
- Fazit

In diesem umfassenden Leitfaden behandeln wir verschiedene Methoden, um den aktuellen Standort eines PowerShell-Skripts zu bestimmen, ein fundamentales Konzept, das die Portabilität und Zuverlässigkeit von Skripten verbessert. Jede diskutierte Methode richtet sich an verschiedene Versionen von PowerShell und Skript-Szenarien und gewährleistet eine breite Anwendbarkeit.
Wir beginnen mit dem Split-Path
Cmdlet, einem vielseitigen Ansatz für frühere PowerShell-Versionen, und wechseln dann zur Bequemlichkeit von $PSScriptRoot
in PowerShell 3 und später. Weiterhin erkunden wir die robuste $ExecutionContext
Methode und das unkomplizierte Get-Location
Cmdlet, die sich an unterschiedliche Umgebungen und Anforderungen anpassen.
Abschließend vereinfachen wir den Prozess mit dem vertrauten pwd
Alias, der die Anpassungsfähigkeit von PowerShell zeigt.
Verwendung des Split-Path
Cmdlets, um den aktuellen Standort des PowerShell-Skripts zu ermitteln
Vor PowerShell 3 gab es keinen besseren Weg, die MyInvocation.MyCommand.Definition
Eigenschaft über das Split-Path
Cmdlet abzufragen.
Der Hauptzweck der Verwendung von Split-Path
mit $global:MyInvocation
besteht darin, den Verzeichnispfad des aktuell ausgeführten PowerShell-Skripts zu extrahieren. Dies ist besonders nützlich, wenn Skripte mit anderen Dateien oder Verzeichnissen im selben Standort wie das Skript interagieren müssen oder wenn das Verhalten des Skripts von seinem Standort abhängt.
$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Definition
Write-Host "Current script location: $scriptDirectory"
In diesem Beispiel verwenden wir Split-Path
mit dem -Parent
Parameter, um die Verzeichnis-Komponente vom vollständigen Pfad des laufenden Skripts zu isolieren. Dieser Pfad wird aus $MyInvocation.MyCommand.Definition
abgerufen.
Der resultierende Verzeichnispfad wird in der Variablen $scriptDirectory
gespeichert.
Schließlich verwenden wir Write-Host
, um diesen Verzeichnispfad auszugeben, und bieten eine klare und unmittelbare Sicht auf den aktuellen Standort des Skripts. Diese Methode ist nicht nur effizient, sondern gewährleistet auch die Kompatibilität über verschiedene Versionen von PowerShell hinweg.
Ausgabe:
Es ist erwähnenswert, dass dies nur funktioniert, wenn Sie die oben angegebene Syntax in einer gespeicherten PowerShell (.ps1
) Datei einfügen. Das Ausführen der obigen Syntax in der Befehlszeile gibt eine Null
Ausnahme zurück.
Es ist auch erwähnenswert, dass das Ausführen der obigen Syntax in PowerShell’s Integrated Scripting Environment (ISE) als Auswahl (Ausführen als Auswahl oder Drücken von F8) eine ParameterArgumentValidationErrorNullNotAllowed
oder eine Null-Ausnahme auslöst.
Ein einfaches Mittel zur Behebung des Problems besteht darin, die Variable $psISE
aufzurufen und die CurrentFile.FullPath
Eigenschaft abzurufen, und von dort aus können Sie den aktuellen Standort des Skripts ermitteln.
Verwendung der $PSScriptRoot
Variable, um den aktuellen Standort des PowerShell-Skripts zu ermitteln
Wenn Sie PowerShell Version 3 oder später verwenden, wurde eine automatische Variable eingeführt, um das Verzeichnis der aktuellen Datei oder des Moduls zu speichern.
Die $PSScriptRoot
Variable enthält den Verzeichnispfad des ausgeführten Skripts. Diese automatische Variable ist unglaublich nützlich für die Erstellung tragbarer Skripte, bei denen das Hardcodieren von Pfaden nicht praktikabel ist.
Sie ist besonders praktisch, wenn Ihre Skripte Dateien oder Module laden müssen, die sich im selben Verzeichnis wie das Skript selbst befinden.
Write-Host "The current script is located in: $PSScriptRoot"
In unserem Skript verwenden wir das Write-Host
Cmdlet, um den Wert von $PSScriptRoot
auszugeben. Diese Variable enthält automatisch den vollständigen Pfad zum Verzeichnis, in dem sich das Skript befindet.
Durch den Aufruf von Write-Host
stellen wir sicher, dass der Pfad in der PowerShell-Konsole angezeigt wird. Dieser Ansatz ist sowohl einfach als auch wirksam und macht das Skript vielseitig für verschiedene Umgebungen und Szenarien.
Ausgabe:
Ermitteln des Arbeitsverzeichnisses in Windows PowerShell, um den aktuellen Standort des PowerShell-Skripts zu erhalten
Jetzt, da wir besprochen haben, wie man den aktuellen Standort im Skript ermittelt, wäre es nicht schädlich, zu lernen, wie man das aktuelle Arbeitsverzeichnis unseres Skripts erhält.
In Windows PowerShell v2 enthält die $ExecutionContext
Variable die EngineIntrinsics
Eigenschaft. Sie können diese Variable und Eigenschaft verwenden, um die Ausführungsobjekte zu finden, die für Cmdlets verfügbar sind, einschließlich des aktuellen Arbeitsverzeichnisses des laufenden Windows PowerShell-Skripts.
$currentScriptLocation = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
Write-Host "Current script location: $currentScriptLocation"
In diesem Beispiel verwenden wir $ExecutionContext
, um den Standort des aktuellen Skripts zu erwerben. Indem wir die Methode GetUnresolvedProviderPathFromPSPath
mit dem Parameter '.\'
aufrufen, bitten wir PowerShell effektiv, das aktuelle Verzeichnis (dargestellt durch '.\'
) in einen vollständigen Pfad zu übersetzen.
Das Ergebnis wird in der Variablen $currentScriptLocation
gespeichert, die wir dann mit Write-Host
anzeigen. Diese Methode ist besonders robust, da sie nicht darauf angewiesen ist, dass das Skript auf eine bestimmte Weise ausgeführt wird, und funktioniert über verschiedene Versionen von PowerShell hinweg.
Ausgabe:
Wenn Sie jedoch die neueste Version von Windows PowerShell verwenden, wurde ein separates Cmdlet eingeführt, um die Dinge einfach zu gestalten. Wir können das Get-Location
Cmdlet verwenden und die Path
Eigenschaft aufrufen, um das aktuelle Arbeitsverzeichnis des Skripts zu erhalten.
$currentDirectory = (Get-Location).Path
Write-Host "Current directory: $currentDirectory"
Im bereitgestellten Code verwenden wir zuerst das Get-Location
Cmdlet, um das aktuelle Standortobjekt abzurufen. Dann greifen wir auf dessen Path
Eigenschaft zu, um das aktuelle Verzeichnis als Zeichenfolge zu erhalten, die wir in der Variablen $currentDirectory
speichern.
Schließlich verwenden wir Write-Host
, um diese Informationen anzuzeigen. Diese Methode ist äußerst effektiv für Skripte, die ihren Ausführungskontext in Bezug auf den Verzeichnisstandort kennen müssen.
Ausgabe:
In PowerShell ist pwd
ein Alias für das Get-Location
Cmdlet. Das Get-Location
Cmdlet ruft das aktuelle Arbeitsverzeichnis der PowerShell-Sitzung ab, was genau das ist, was der traditionelle pwd
(print working directory) Befehl in Unix-ähnlichen Systemen tut.
PowerShell bietet mit Blick auf Flexibilität und Kompatibilität diese Aliase, um es Benutzern, die mit anderen Shell-Umgebungen (wie Unix oder Linux) vertraut sind, zu erleichtern, ähnliche Befehle in PowerShell zu verwenden.
$currentDirectory = pwd
Write-Host "Current directory: $currentDirectory"
In diesem Beispiel verwenden wir den pwd
Befehl, um das aktuelle Standortobjekt zu erhalten, das dann in der Variablen $currentDirectory
gespeichert wird. Indem wir Write-Host
nutzen, geben wir den Pfad des aktuellen Verzeichnisses in der Konsole aus.
Diese Methode ist bemerkenswert unkompliziert und erfordert keine komplexe Syntax oder zusätzliche Parameter. Es ist eine schnelle und zuverlässige Möglichkeit, das Verzeichnis zu ermitteln, von dem das Skript ausgeführt wird.
Ausgabe:
Fazit
Dieser Artikel bietet eine gründliche Erkundung verschiedener Methoden zur Ermittlung des aktuellen Standorts eines PowerShell-Skripts, die jeweils auf unterschiedliche PowerShell-Versionen und Skriptkontexte zugeschnitten sind. Vom Split-Path
Cmdlet, das für frühere Versionen geeignet ist, bis zur automatischen $PSScriptRoot
Variable in späteren Versionen gewährleistet der Leitfaden Relevanz für eine breite Palette von PowerShell-Nutzern.
Darüber hinaus bieten die Verwendung von $ExecutionContext
und das Get-Location
Cmdlet robuste und unkomplizierte Alternativen, während der pwd
Alias eine vertraute Option für Benutzer aus unterschiedlichen Skripting-Hintergründen präsentiert. Dieser umfassende Leitfaden verbessert nicht nur die Portabilität und Zuverlässigkeit von Skripten, sondern unterstreicht auch die vielseitige Natur von PowerShell.
Bewaffnet mit diesen Techniken sind Skriptersteller und Systemadministratoren besser gerüstet, um Abhängigkeiten von Dateipfaden zu handhaben, was ihre Skripte anpassungsfähiger und effektiver in verschiedenen Umgebungen macht. Letztendlich ist das Verständnis dieser Methoden grundlegend für das Meistern des PowerShell-Skriptings und die Optimierung der Funktionalität von Skripten über verschiedene Plattformen und Szenarien hinweg.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn