PowerShell-Umgebung

0

Ich beherrsche Bash und habe Probleme, die Umgebung in PowerShell zu verstehen. Gibt es einen Weg, der gleichbedeutend ist mit /usr/bin für das Hinzufügen von ausführbaren Dateien zur Umgebung? Wie ist die Umgebung in PowerShell dargestellt - welcher Typ ist dies?

twinlakes
quelle

Antworten:

2

Es ist absolut nichts Besonderes /usr/bin auf * nix-Dateisystemen, mit der Ausnahme, dass dies ein Speicherort ist, der standardmäßig für alle Benutzer in der Umgebungsvariablen PATH enthalten ist. Windows hat dieselbe Umgebungsvariable, aber die einzigen Speicherorte, die standardmäßig für alle Benutzer verfügbar sind, sind Dinge wie C:\Windows\System32.

Sie können Verwenden Sie System32 als Bin-Ordner, aber Sie können auch einfach einen neuen Ordner für Bins erstellen. C:\bin würde funktionieren, obwohl es standardmäßig von allen Benutzern beschreibbar ist, sodass Sie möglicherweise die Berechtigungen anpassen möchten, und Sie können es dann der maschinenweiten Umgebungsvariablen PATH hinzufügen, damit alle Benutzer problemlos darauf zugreifen können. Alternativ können Sie a bin Ordner in jedem Benutzerverzeichnis mit seinem Pfad in der PATH-Umgebungsvariablen pro Benutzer (wenn eine Umgebungsvariable sowohl im Benutzer- als auch im Maschinenspeicher definiert ist, wird sie bei der tatsächlichen Verwendung verkettet, zuerst auf der Maschine).

PowerShell legt alle Umgebungsvariablen in einem virtuellen "Laufwerk" mit dem Namen "Env:" ab (ähnlich C: für Dateien oder HKLM: für die HKLM-Registrierungsstruktur). Lesen Sie hier mehr darüber: http://ss64.com/ps/syntax-env.html Auf die Umgebungsvariablen können Sie über zugreifen $env:<VARNAME> wie jede andere Variable (der Typ ist String) ; Sie können beispielsweise an PATH anhängen (Hinweis: Bei Windows-Umgebungsvariablennamen wird die Groß- und Kleinschreibung nicht berücksichtigt.) wie folgt:

$env:path = $env:path + ";C:\foo\bar\baz"

Dies gilt jedoch nur für den aktuellen Prozess (und seine untergeordneten Prozesse). Wenn Sie den Wert in der Registrierung speichern möchten, damit er für andere Prozesse oder sogar andere Benutzer sichtbar ist (Hinweis: Für die Bearbeitung von Umgebungsvariablen, die andere Benutzer betreffen, sind Administratorrechte erforderlich), ist die Verwendung von .NET-Klassen die einfachste Methode, die mir bekannt ist ( PowerShell ist im Grunde genommen ".NETscript". Um diesen Ordner beispielsweise der computerweiten Umgebungsvariablen PATH hinzuzufügen, gehen Sie wie folgt vor (als Administrator):

[System.Environment]::SetEnvironmentVariable("path", $env:path + "C:\foo\bar\baz", "Machine")

Der letzte Parameter ist die Zeichenfolgendarstellung eines Werts in der System.EnvironmentVariableTaget-Enumeration , wie von der System.Environment.SetEnvironmentVariable statische Methode .

Sie können sicherlich ein Skript / Cmdlet erstellen, das den Aufruf dieser Funktion vereinfacht. Sie können auch die [System.Environment]::GetEnvironmentVariable(name, [optional store]) statische Funktion zum Lesen von Umgebungsvariablen direkt aus den Benutzer- oder Maschinenspeichern. Auch hier sind alle Umgebungsvariablen Strings (und wenn Sie eine Sammlung davon erhalten, handelt es sich um ein Dictionary).

CBHacking
quelle
1
Sie können Ihrem Pfad in Ihrem Profil "c: \ bin" hinzufügen. (@twinlakes, tippe $profile um zu sehen, wo das ist. Möglicherweise müssen Sie es erstellen.)
dangph
Guter Nachtrag. Wenn Sie sich nur mit Powershell beschäftigen (im Gegensatz zu CMD, Windows Explorer usw.), können Sie Ihr Powershell-Profil (ähnlich einer .bashrc-Datei) so einrichten, dass Umgebungsvariablen bearbeitet werden, wie Sie möchten. Die in meiner Antwort aufgeführten Methoden funktionieren in der Powershell-Skriptdatei (.ps1) für das Profil.
CBHacking
1
Ebenfalls erwähnenswert: Der Profilspeicherort ist (standardmäßig) %USERPROFILE%\Documents\WindowsPowerShell\PowershellProfile.ps1 für den aktuellen Benutzer. Es gibt insgesamt 6 Profile. Sehen Grundlegendes zu den sechs PowerShell-Profilen für die anderen 5.
DavidPostill