Scharping-FVB 11 Geschrieben 7. Juni Melden Teilen Geschrieben 7. Juni Liebes Forum, ich möchte eine Systemvariable prüfen und wenn sie nicht vorhanden ist, setzen: $check = $false while ($check = $false) { if ([Environment]::GetEnvironmentVariable('tnsadmin')) { "TNSADMIN Systemvariable vorhanden." $check = $true } else { Write-Host "TNSADMIN Systemvariable NICHT vorhanden." -ForegroundColor Red Write-Host "Lege TNSADMIN an." -ForegroundColor Green [Environment]::SetEnvironmentVariable('TNSADMIN', 'C:\instantclient_12_1\client-1\network\admin\', 'Machine') } } Das it-else funktioniert auch wunderbar und legt die fehlende Variable an, aber der while-Check kann die Variable nicht finden, da diese außerhalb der Session erstellt wurde und so in der aktuellen Session noch nicht vorhanden ist. Wie kann ich diese neu erstellte Systemvariable dennoch abprüfen? Viele Grüße Davorin Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 7. Juni Melden Teilen Geschrieben 7. Juni (bearbeitet) vor 4 Stunden schrieb Scharping-FVB: while ($check = $false) Damit weist Du der Variablen "$check" den Wert "$false" zu. Da diese Operation mit an Sicherheit grenzender Wahrscheinlichkeit IMMER funktioniert, wird das "while" immer "true" sein, oder? ... oder hab ich was falsch verstanden? In der "while" condition sollte also nur stehen while ($check) { bearbeitet 7. Juni von BOfH_666 Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 7. Juni Autor Melden Teilen Geschrieben 7. Juni vor 1 Minute schrieb BOfH_666: Damit weist Du der Variablen "$check" den Wert "$false" zu. Da diese Operation mit an Sicherheit grenzender Wahrscheinlichkeit IMMER funktioniert, wird das "while" immer "true" sein, oder? ... oder hab ich was falsch verstanden? In der "while" condition sollte also nur stehen while ($check) { Au weia, was ein Anfängerfehler... So geht es aber auch nicht: $check = $false while ($check -eq $false) { da die Systemvariable nicht in der PS-Sitzung zur Verfügung steht, eine Abfrage liefert nur den Zustand zum Zeitpunkt des Startens der Sitzung, nicht den geänderten Zustand mit der angelegten Variablen. Mir fehlt also immer noch die Aktualisierung der Systemvariablen in die aktuelle Sitzung. Weiß da jemand mehr? Zitieren Link zu diesem Kommentar
Beste Lösung BOfH_666 577 Geschrieben 7. Juni Beste Lösung Melden Teilen Geschrieben 7. Juni vor 9 Stunden schrieb Scharping-FVB: da die Systemvariable nicht in der PS-Sitzung zur Verfügung steht, eine Abfrage liefert nur den Zustand zum Zeitpunkt des Startens der Sitzung, nicht den geänderten Zustand mit der angelegten Variablen. Wie wahrscheinlich ist es denn, dass der Befehl eine Umgebungsvariable zu setzen fehlschlägt? Im einfachsten Fall checkst Du einfach "$?" ... dann kannst Du davon ausgehen, dass der Befehl erfolgreich ausgeführt wurde. Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 7. Juni Melden Teilen Geschrieben 7. Juni Ein Prozess bekommt seine Umgebung beim Start. Was auch immer Du jetzt in der (übergeordneten) Umgebung änderst, kommt im Prozess nicht an. War schon immer so, Du mußt auf andere Weise prüfen oder so wie @BOfH_666 vorschlägt. Zitieren Link zu diesem Kommentar
testperson 1.675 Geschrieben 7. Juni Melden Teilen Geschrieben 7. Juni Hi, ein anderer Ansatz, die Systemvariable per Gruppenrichtlinie setzen. Gruß Jan 1 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 8. Juni Melden Teilen Geschrieben 8. Juni Oder, wenn es eine Maschinenvariable sein soll, mit der SETX.exe in einer Batch, die ist im System ja auch vorhanden. :) Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 9. Juni Melden Teilen Geschrieben 9. Juni Hilft beides nix beim Ursprungsproblem - Prozesse erben ihre Umgebung, wenn sie erstellt werden. Danach ändert sich daran nichts mehr. Gibt nur einen "Frickel-Workaround": Variable nicht nur global setzen, sondern auch im aktuellen Prozess. Hilft aber allen anderen Prozessen natürlich nichts 1 Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 11. Juni Melden Teilen Geschrieben 11. Juni Wie wäre es mit dem env-Laufwerk. Evtl. kann man dort die Variable setzen. Ich habe es nicht getestet. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 11. Juni Melden Teilen Geschrieben 11. Juni vor 2 Stunden schrieb tesso: Ich habe es nicht getestet. Wir warten, bis Du soweit bist und es getestet hast. 😘 Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 12. Juni Autor Melden Teilen Geschrieben 12. Juni vor 11 Stunden schrieb tesso: Wie wäre es mit dem env-Laufwerk. Evtl. kann man dort die Variable setzen. Ich habe es nicht getestet. Funktioniert genauso nicht :-( Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 12. Juni Melden Teilen Geschrieben 12. Juni Was ist denn das eigentliche Ziel? Warum willst Du das zwingend in der aktuellen Session machen? Wenn Du eine Software-Verteilung hast, starte einfach 2 unabhängige Sessions nacheinander. In der zweiten hast Du dann Deine Umgebungsvariable wie gewünscht. Oder zur Not per "geplanter Aufgabe" .... Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 12. Juni Autor Melden Teilen Geschrieben 12. Juni vor 1 Minute schrieb BOfH_666: Was ist denn das eigentliche Ziel? Warum willst Du das zwingend in der aktuellen Session machen? Wenn Du eine Software-Verteilung hast, starte einfach 2 unabhängige Sessions nacheinander. In der zweiten hast Du dann Deine Umgebungsvariable wie gewünscht. Oder zur Not per "geplanter Aufgabe" .... Ich möchte sicher gehen, dass die Systemvaribale auch fest gesetzt wurde und nicht nach der Session wieder weg ist. Aber weiter oben wurde ja schon erwähnt, dass das Setzen einer Systemvariablen auch fest ist und nicht nur in der Sitzung. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 12. Juni Melden Teilen Geschrieben 12. Juni vor 1 Minute schrieb Scharping-FVB: Ich möchte sicher gehen, dass die Systemvariable auch fest gesetzt wurde und nicht nach der Session wieder weg ist. Das macht ja der "Kontext", den Du mit "Machine" angibst. Meine eigentliche Frage ging eher in Richtung "Was ist das GROSSE Ziel?" oder "Warum willst Du dafür so einen großen Aufwand betreiben?" ... oder "Gibt es Grund zur Annahme, dass das Setzen der Umgebungsvariable, nicht wie gewünscht funktioniert?" Hast Du Dich denn schon für eine Lösung entschieden? Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 12. Juni Autor Melden Teilen Geschrieben 12. Juni vor 8 Minuten schrieb BOfH_666: Meine eigentliche Frage ging eher in Richtung "Was ist das GROSSE Ziel?" oder "Warum willst Du dafür so einen großen Aufwand betreiben?" ... oder "Gibt es Grund zur Annahme, dass das Setzen der Umgebungsvariable, nicht wie gewünscht funktioniert?" Ich möchte das narrensicher machen, damit auch (m)eine Vertretung, die nicht Vollzeit-Windows-Admin ist, eine zuverlässige Methode hat, die Systemvaribale zu setzen. Anfangs dachte ich, dass ich falsch programmiert hätte, lag aber eben daran, dass die Änderungen an den Systemvariablen nicht in die Session synchronisiert werden. Daher ist das Problem ja gelöst, weil es kein wirkliches war Vielen Dank an alle, die sich Gedanken und/oder Vorschläge gemacht haben! Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.