Wie man den aktuellen Speicherort des PowerShell-Skripts erhält

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

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:

Holen Sie sich den aktuellen Standort des PowerShell-Skripts - Ausgabe 1

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:

Hole den aktuellen Standort des PowerShell-Skripts - Ausgabe 2

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:

Holen Sie sich den aktuellen Standort des PowerShell-Skripts - Ausgabe 3

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:

Holen Sie sich den aktuellen Standort des PowerShell-Skripts - Ausgabe 4

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:

Holen Sie sich den aktuellen Standort des Powershell-Skripts - Ausgabe 5

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.

Genießen Sie unsere Tutorials? Abonnieren Sie DelftStack auf YouTube, um uns bei der Erstellung weiterer hochwertiger Videoanleitungen zu unterstützen. Abonnieren
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn