{"id":190,"date":"2018-03-19T11:31:11","date_gmt":"2018-03-19T10:31:11","guid":{"rendered":"http:\/\/hslomka.de\/techno\/?p=190"},"modified":"2018-03-19T11:31:11","modified_gmt":"2018-03-19T10:31:11","slug":"umgebungsvariablen-in-der-powershell","status":"publish","type":"post","link":"https:\/\/techno.slomka.biz\/?p=190","title":{"rendered":"Umgebungsvariablen in der PowerShell"},"content":{"rendered":"<p><strong>Abfragen von Umgebungsvariablen<\/strong><br \/>\nDie Anzeige der Umgebungsvariablen war in der &#8220;alten&#8221; Kommandozwile (cmd) einfach per env durchzuf\u00fchren.<\/p>\n<p>Die PowerShell bietet einen \u00e4hnlich einfachen Aufruf mit <em>Get-ChildItem<\/em> oder per Alias <em>gci<\/em>. Zu beachten ist, dass Get-ChildItem einen Pfad erwartet:<\/p>\n<p><code class=\"kasten\">Get-ChildItem env:<\/code><\/p>\n<p>Eine bestimmte Variable kann mit env: abgefragt werden:<\/p>\n<p><code class=\"kasten\">gci env:PATH<\/code><\/p>\n<p>Einfacher kann die Variable auch wie jeder Variable in Powershell angezeogt werden.<\/p>\n<p><code class=\"kasten\">$Env:Path<\/code><\/p>\n<p>Dieser Weg eignet sich besonders gut f\u00fcr Skripte. An dieser Stelle zeigt die PowerShell ihre St\u00e4rke. Die Variable kann mit Zeichenkettenoperationen weiter verarbeitet werden, da es ein STRING Objekt ist. Beispielsweise kann -replace zum Bearbeiten von Teilen der Variable verwendet werden:<br \/>\n<code><\/code><\/p>\n<p class=\"kasten\">$Env:myVar=&#8221;Toast&#8221;<br \/>\n$Env:myVar<\/p>\n<p><code class=\"einzug\">Toast<\/code><br \/>\n<code><\/code><\/p>\n<p class=\"kasten\">$Env:myVar = $Env:myVar -replace(&#8220;oa&#8221;,&#8221;e&#8221;)<br \/>\nEnv:myVar<\/p>\n<p><code class=\"einzug\">Test<\/code><br \/>\n&nbsp;<br \/>\n<strong>Setzen und \u00c4ndern von Umgebungsvariablen<\/strong><br \/>\nEine Umgebungsvariable kann einfach \u00fcber eine Zuweisung mit &#8220;=&#8221; gesetzt oder \u00fcberschrieben werden:<br \/>\n<code><\/code><\/p>\n<p class=\"kasten\">$env:myVar=&#8221;D:\\TEMP&#8221;<br \/>\ngci env:myVar<\/p>\n<p>M\u00f6chte man an eine bestehende Variable etwas anh\u00e4ngen, geschieht dies per +=:<code><\/code><\/p>\n<p class=\"einzug\">Name Value<br \/>\n&#8212;- &#8212;&#8211;<br \/>\nmyVar D:\\TEMP<\/p>\n<p>\n<em>Achtung: <\/em>Bei der Verkn\u00fcpfung ist die Syntax selbst korrekt anzugeben. Pfad Variablen (wie <em>$env:PATH<\/em>) erwarten oft ein <strong>&#8220;;&#8221;<\/strong> als Trennzeichen.<br \/>\n<code><\/code><\/p>\n<p class=\"kasten\">$env:myVar+=&#8221;;D:\\Cache&#8221;<br \/>\ngci env:myVar<\/p>\n<p><code><\/code><\/p>\n<p class=\"einzug\">Name Value<br \/>\n&#8212;- &#8212;&#8211;<br \/>\nmyVar D:\\TEMP;D:\\Cache<\/p>\n<\/p>\n<p><strong><span class=\"highlight\">Achtung:<\/span><\/strong> Diese Variablen sind nur auf Prozessebene, also in der aktuellen Sitzung gesetzt. Um eine Variable dauerhaft zu setzen, ist auf die Funktionen des .NET Frameworks zur\u00fcckzugreifen.<\/p>\n<p><code><\/code><\/p>\n<p class=\"kasten\">[Environment]::SetEnvironmentVariable(&#8220;myVar&#8221;, &#8220;TestWert&#8221;, &#8220;User&#8221;)<\/p>\n<\/p>\n<p>Der obige Befehl setzt oder \u00fcberschreibt die Variable myVar mit dem Wert &#8220;TestWert&#8221; dauerhaft in der Umgebung des Benutzers. Der dritte Parameter bietet die folgenden Optionen:<\/p>\n<ul>\n<li><em>User<\/em> (Benutzer-Ebene) &#8211; Die Variable wird dauerhaft f\u00fcr diesen Benutzer gesetzt.<\/li>\n<li><em>Machine<\/em> (Maschinen-Ebene = System) &#8211; g\u00fcltig f\u00fcr alle Benutzer des Systems. Dieser Aufruf erfordert adminsitrative Berechtigungen.<\/li>\n<li><em>Process<\/em> (Process-Ebene) &#8211; Das ist der Standard und entspricht dem Verhalten von $env:myVar\n<\/li>\n<\/ul>\n<p><code><\/code><\/p>\n<p class=\"kasten\">[Environment]::GetEnvironmentVariable(&#8220;myVar&#8221;, &#8220;machine&#8221;)<\/p>\n<p><code class=\"einzug\">TestWert<\/code><\/p>\n<p><strong>L\u00f6schen von Umgebungsvariablen<\/strong><br \/>\n<code><\/code><\/p>\n<p class=\"kasten\">Remove-Item env:myVar<br \/>\ngci env:myVar<\/p>\n<p class=\"einzug\"><span class=\"error\">gci : Der Pfad &#8220;myVar&#8221; kann nicht gefunden werden, da er nicht vorhanden ist.<br \/>\nIn Zeile:1 Zeichen:1<br \/>\n+ gci env:myVar<br \/>\n+ ~~~~~~~~~~~~~<br \/>\n+ CategoryInfo : ObjectNotFound: (myVar:String) [Get-ChildItem], ItemNotFoundException<br \/>\n+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand<\/span><\/p>\n<\/p>\n<p>Das L\u00f6schen von Variablen auf System-Ebene (&#8220;machine&#8221;) oder Benutzer-Ebene (&#8220;User&#8221;) erfolgt mit dem .NET Aufruf:<br \/>\n<code><\/code><\/p>\n<p class=\"kasten\">[Environment]::SetEnvironmentVariable(&#8220;myVar&#8221;,$null,&#8221;Machine&#8221;)<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Abfragen von Umgebungsvariablen Die Anzeige der Umgebungsvariablen war in der &#8220;alten&#8221; Kommandozwile (cmd) einfach per env durchzuf\u00fchren. Die PowerShell bietet einen \u00e4hnlich einfachen Aufruf mit Get-ChildItem oder per Alias gci. Zu beachten ist, dass Get-ChildItem einen Pfad erwartet: Get-ChildItem env: Eine bestimmte Variable kann mit env: abgefragt werden: gci env:PATH Einfacher kann die Variable auch wie jeder Variable in Powershell angezeogt werden. $Env:Path Dieser Weg eignet sich besonders gut f\u00fcr Skripte. An dieser Stelle zeigt die PowerShell ihre St\u00e4rke. Die Variable kann mit Zeichenkettenoperationen weiter verarbeitet werden, da es ein STRING Objekt ist. Beispielsweise kann -replace zum Bearbeiten von Teilen der Variable verwendet werden: $Env:myVar=&#8221;Toast&#8221; $Env:myVar Toast $Env:myVar = $Env:myVar -replace(&#8220;oa&#8221;,&#8221;e&#8221;) Env:myVar Test &nbsp; Setzen und \u00c4ndern von Umgebungsvariablen Eine Umgebungsvariable kann einfach \u00fcber eine Zuweisung mit &#8220;=&#8221; gesetzt oder \u00fcberschrieben werden: $env:myVar=&#8221;D:\\TEMP&#8221; gci env:myVar M\u00f6chte man an eine bestehende Variable etwas anh\u00e4ngen, geschieht dies per +=: Name Value &#8212;- &#8212;&#8211; myVar D:\\TEMP Achtung: Bei der Verkn\u00fcpfung ist die Syntax selbst korrekt anzugeben. Pfad Variablen (wie $env:PATH) erwarten oft ein &#8220;;&#8221; als Trennzeichen. $env:myVar+=&#8221;;D:\\Cache&#8221; gci env:myVar Name Value &#8212;- &#8212;&#8211; myVar D:\\TEMP;D:\\Cache Achtung: Diese Variablen sind nur auf Prozessebene, also in der aktuellen Sitzung gesetzt. Um eine Variable dauerhaft zu setzen, ist auf die Funktionen des .NET Frameworks zur\u00fcckzugreifen. [Environment]::SetEnvironmentVariable(&#8220;myVar&#8221;, &#8220;TestWert&#8221;, &#8220;User&#8221;) Der obige Befehl setzt oder \u00fcberschreibt die Variable myVar mit dem Wert &#8220;TestWert&#8221; dauerhaft in der Umgebung des Benutzers. Der dritte Parameter bietet die folgenden Optionen: User (Benutzer-Ebene) &#8211; Die Variable wird dauerhaft f\u00fcr diesen Benutzer gesetzt. Machine (Maschinen-Ebene = System) &#8211; g\u00fcltig f\u00fcr alle Benutzer des Systems. Dieser Aufruf erfordert adminsitrative Berechtigungen. Process (Process-Ebene) &#8211; Das ist der Standard und entspricht dem Verhalten von $env:myVar [Environment]::GetEnvironmentVariable(&#8220;myVar&#8221;, &#8220;machine&#8221;) TestWert L\u00f6schen von Umgebungsvariablen Remove-Item env:myVar gci env:myVar gci : Der Pfad &#8220;myVar&#8221; kann nicht gefunden werden, da er nicht vorhanden ist. In Zeile:1 Zeichen:1 + gci env:myVar + ~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (myVar:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand Das L\u00f6schen von Variablen auf System-Ebene (&#8220;machine&#8221;) oder Benutzer-Ebene (&#8220;User&#8221;) erfolgt mit dem .NET Aufruf: [Environment]::SetEnvironmentVariable(&#8220;myVar&#8221;,$null,&#8221;Machine&#8221;)<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38,26],"tags":[59,78],"class_list":["post-190","post","type-post","status-publish","format-standard","hentry","category-powershell","category-windows","tag-environment","tag-powershell"],"_links":{"self":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=190"}],"version-history":[{"count":0,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts\/190\/revisions"}],"wp:attachment":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}