ralus67
Goto Top

Powershell: PSScriptRoot als SYSTEM Benutzer

Hallo Community

Ich habe ein Powershell Script, welches als SYSTEM Benutzer ausgeführt wird.

Nun funktioniert die $PSScriptRoot Variable als SYSTEM Benutzer nicht. Wird das Powershell Skript als Benutzer oder Administrator ausgeführt, dann funktioniert diese Variable.

Wie kann ich diese $PSScriptRoot Variable so definieren, dass diese auch als SYSTEM Benutzer läuft?

Im Voraus vielen Dank

Content-ID: 861147195

Url: https://administrator.de/contentid/861147195

Ausgedruckt am: 19.11.2024 um 06:11 Uhr

TK1987
TK1987 30.06.2021 um 11:27:16 Uhr
Goto Top
Moin,

Zitat von @Ralus67:
Nun funktioniert die $PSScriptRoot Variable als SYSTEM Benutzer nicht.
grundsätzlich funktioniert sie auch dort.

Ich nehme an du startest das Skript als geplanten Task? Wie genau sieht dein Aktionsreiter denn aus?

So funktioniert es auf jeden Fall:
Programm starten"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
Argumente-File "C:\Pfad\zum\Skript.ps1"

Gruß Thomas
Ralus67
Ralus67 30.06.2021, aktualisiert am 21.04.2022 um 16:56:25 Uhr
Goto Top
Hallo Thomas

Ja, über einen Aufgabenplaner wird das Powershell aufgerufen.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

und bei den Argumenten

C:\Temp\GS-SoftHosted_001_001\Deploy\P_DE_x99\install_GSSoftHosted.ps1

Leider wird mir dann die Variable $PSScriptRoot nicht mit dem SYSTEM Benutzer erkannt.


system

action
Penny.Cilin
Penny.Cilin 30.06.2021 um 11:45:08 Uhr
Goto Top
Du hast bei den Argumenten den Parameter -File vergessen.
Schau Dir die Antwort und den Screenshot von TK1987 an.

Gruss Penny.
colinardo
Lösung colinardo 30.06.2021 aktualisiert um 12:28:31 Uhr
Goto Top
Servus
Zitat von @Ralus67:

Hallo Community

Ich habe ein Powershell Script, welches als SYSTEM Benutzer ausgeführt wird.

Nun funktioniert die $PSScriptRoot Variable als SYSTEM Benutzer nicht. Wird das Powershell Skript als Benutzer oder Administrator ausgeführt, dann funktioniert diese Variable.

Das gehört wohl eher in die Kategorie "Sagen und Mythen" face-smile, guckst du

Variante A mit psexec Script als SYSTEM ausgeführt:

screenshot_1

Und das ganze auch als Task

screenshot

Fazit: Works as designed face-wink.

Wie kann ich diese $PSScriptRoot Variable so definieren, dass diese auch als SYSTEM Benutzer läuft?
Die funktioniert ohne irgendeine Änderung, aber diese spezielle Variable ist nur gefüllt wenn sie aus einem Skript heraus verwendet wird. Auf einer interaktiven Konsole ist diese leer.

Alternativ zu $psscriptroot kommst du auch immer so an den Pfad des Skripts (ab PS 3.0)
Split-Path $PSCommandPath
oder ab < PS 3.0
Split-Path $MyInvocation.MyCommand.Path
Aber Achtung mit dem letzeren innerhalb von Funktionen, dort hat dieser Befehl nicht den gewünschten Inhalt.

Grüße Uwe
mayho33
mayho33 30.06.2021 aktualisiert um 17:10:11 Uhr
Goto Top
Zitat von @Ralus67:

Nun funktioniert die $PSScriptRoot Variable als SYSTEM Benutzer nicht. Wird das Powershell Skript als Benutzer oder Administrator ausgeführt, dann funktioniert diese Variable.

Natürlich funktioniert PSScriptRoot auch als System. Verwende uch schon seit Jahren und gab nie Probleme damit.

Wir der Name schon sagt geht's halt nur in einem Script.

Willst du dein Problem nicht etwas genauer beschreiben?
EDIT:
Ach! Hast du ja eh schon. In der Commandline des STask noch ergänzen:

Powershell -executionpolicy Bypass -file ...

Hat sich bewährt.
Grüße!
Ralus67
Lösung Ralus67 01.07.2021 um 11:19:43 Uhr
Goto Top
Hallo TK1987

Der Aufgabenplaner hab ich angepasst. Leider funktioniert es immer noch nicht. Die Variable wird nicht erkannt. Hättest du allenfalls eine Idee? Ev. können wir kurz eine Remote Session starten, so dass du das bei mir direkt siehst.


Zitat von @TK1987:

Moin,

Zitat von @Ralus67:
Nun funktioniert die $PSScriptRoot Variable als SYSTEM Benutzer nicht.
grundsätzlich funktioniert sie auch dort.

Ich nehme an du startest das Skript als geplanten Task? Wie genau sieht dein Aktionsreiter denn aus?

So funktioniert es auf jeden Fall:
Programm starten"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
Argumente-File "C:\Pfad\zum\Skript.ps1"

Gruß Thomas
TK1987
TK1987 01.07.2021 aktualisiert um 13:38:35 Uhr
Goto Top
Zitat von @Ralus67:
Der Aufgabenplaner hab ich angepasst. Leider funktioniert es immer noch nicht. Die Variable wird nicht erkannt. Hättest du allenfalls eine Idee? Ev. können wir kurz eine Remote Session starten, so dass du das bei mir direkt siehst.
Hast du den Post von @colinardo überhaupt mal gelesen?

Die Variable funktioniert, das kannst du auch leicht testen, indem du statt deinem Skript folgendes laufen lässt:
"`$PSScriptRoot = $PSScriptVariable" | Out-File "$PSScriptRoot\test.log"  
Dann wirst du sehen, dass in dem Ordner, in dem die Skriptdatei liegt, eine "test.log" erstellt wird, in dem der Pfad steht.

Mit anderen Worten: Es muss an dem Inhalt deines Skripts liegen, dass da irgendetwas nicht so funktioniert, wie du dir das vorstellst. Da du uns dein Skript bislang nicht offenbart hast, ist derzeit keine weitere Hilfestellung möglich.

Gruß Thomas