none
Powershell Script als anderer User ausführen RRS feed

  • Frage

  • Hallo zusammen,
    ich suche eine Möglichkeit Powershell Scripte als anderer User auszuführen.

    Szenario:
    Die Admins beim Kunden haben alle zwei AD User. Z.B. xyz123user und xyz123admin.
    Standardmäßig arbeiten alle mit ihrer normalen Benutzerkennung.

    Ich habe nun einige Powershell Scripte geschrieben, die die Berechtigungen des Adminusers erfordern.

    Leider gibt es nicht die Möglichkeit mit rechter Maustaste und Shift auf die Scripte zu klicken und "Als anderer Benutzer ausführen" auszuwählen.

    Die einzigen Wege die ich bisher kenne ist entweder sich komplett unter dem Adminuser anzumelden oder das PowerShell ISE als anderer Benutzer starten, das Powershell Script zu laden und von dort auszuführen.

    Diese Wege sind leider nicht besonders praktikabel, daher meine Frage an euch:
    Wie löst ihr dieses Problem?

    LG Peer
    • Bearbeitet Peer Z Montag, 21. Januar 2013 14:32
    Montag, 21. Januar 2013 14:23

Antworten

  • Leider gibt es nicht die Möglichkeit mit rechter Maustaste und Shift auf die Scripte zu klicken und "Als anderer Benutzer ausführen" auszuwählen.

    Doch die gibt es! Wenn du PowerShell Scripte mit einem Windows Link .lnk (Verknüpfung / Shortcut) starten lässt.

    Siehe :
    Vom PowerShell Script zur Applikation Teil 1: Scripte mit Doppelklick als Applikation starten.
    http://www.admin-source.de/BlogDeu/483/vom-powershell-script-zur-applikation-teil-1-scripte-mit-doppelklick-als-applikation-starten


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Peer Z Montag, 21. Januar 2013 15:38
    Montag, 21. Januar 2013 15:22
  • Update:

    Ich habe es inzwischen auch im Script hinbekommen. Man muss beim Aufruf des neuen Prozesses zusätzlich noch das WorkingDirectory mit angeben.

    So sieht der relevante Code der script_start.ps1 jetzt aus:

    $newusercontext = Read-Host 'User waehlen' 
    $newuseranddomain = "nt\"+$newusercontext 
    Start-Process powershell.exe -ArgumentList "-File \\win.muster.de\test\bla\script.ps1" -Credential $newuseranddomain -WorkingDirectory "\\win.muster.de\test\bla\"

    • Bearbeitet Peer Z Dienstag, 22. Januar 2013 14:23
    • Als Antwort markiert Peer Z Dienstag, 22. Januar 2013 14:24
    Dienstag, 22. Januar 2013 13:10

Alle Antworten

  • Mein aktueller Ansatz ist es ein Start-Script zu nutzen, welches den User ändern lässt unter dem das Script ausgeführt werden soll:

    Code von Datei \\win.muster.de\test\bla\script_start.ps1

    $newusercontext = Read-Host 'User waehlen' 
    $newuseranddomain = "nt\"+$newusercontext 
    Start-Process powershell.exe -Credential $newuseranddomain -NoNewWindow -ArgumentList "-File \\win.muster.de\test\bla\script.ps1"
    EDIT: Warum ist die Code-Formatierung eigentlich so komisch? Naja ich denke man erkennt es trotzdem...

    Jetzt habe ich aber ein merkwürdiges Phänomen:
    Wenn ich mich im Windows Explorer im Pfad \\win.muster.de\test\bla\ befinde kann ich das Script "script_start.ps1" ausführen. Dieses führt dann wie erwartet das Script "script.ps1" mit den angegebenen Benutzerinformationen aus.

    Wenn ich aber ein Netzlaufwerk verwende, also mich Pfad x:\bla\ befinde erhalte ich die Fehlermeldung: "Start-Process : Dieser Befehl kann aufgrund des folgenden Fehlers nicht ausgeführt werden: Der Verzeichnisname ist ungültig."

    Warum ist das so? Ich habe in jedem Fall im Script selbst den UNC Pfad angegeben.




    • Bearbeitet Peer Z Montag, 21. Januar 2013 14:36
    Montag, 21. Januar 2013 14:33
  • Leider gibt es nicht die Möglichkeit mit rechter Maustaste und Shift auf die Scripte zu klicken und "Als anderer Benutzer ausführen" auszuwählen.

    Doch die gibt es! Wenn du PowerShell Scripte mit einem Windows Link .lnk (Verknüpfung / Shortcut) starten lässt.

    Siehe :
    Vom PowerShell Script zur Applikation Teil 1: Scripte mit Doppelklick als Applikation starten.
    http://www.admin-source.de/BlogDeu/483/vom-powershell-script-zur-applikation-teil-1-scripte-mit-doppelklick-als-applikation-starten


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Peer Z Montag, 21. Januar 2013 15:38
    Montag, 21. Januar 2013 15:22
  • Stimmt, so kann man es machen. Danke!
    Montag, 21. Januar 2013 15:38
  • Dein Ansatz mit Start-Process ist das zweite was ich vorschlagen würde.

    Der Fehler mit den Pfaden liegt wahrscheinlich an der ExecutionPolicy.
    Die ExecutionPolicy nimmt die Zonen Einstellungen vom Internet Explorer um Trusted Zones zu erkennen.
    Da wird das X:\.... wohl nicht als Trusted Zone erkannt!
    http://support.microsoft.com/kb/303650/en-us


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Montag, 21. Januar 2013 15:55
  • Ich glaube nicht, dass es an der ExecutionPolicy liegt, da diese auf Unrestricted gesetzt ist.
    Montag, 21. Januar 2013 16:14
  • Stimmt, die Fehlermeldung weist auf etwas anderes hin. Gehört denn "-File" in die Argumentliste? Ich denke nicht...

    Wenn Du PowerShell V3 benutzt, kann ein Script auch via Start-Job mit anderen Credentials aufgerufen werden. Rückgabewerte sind so wesentlich komfortabler zu verarbeiten und diese Methode bietet mehr Kontrolle über die gestartete Aktion.

    Start-Job -ScriptBlock { whoami } -Credential $c


    -Raimund

    Dienstag, 22. Januar 2013 00:10
  • Doch -File gehört in die Argumentliste von Powershell: 

    [-File <Dateipfad> <Argumente>] (Auszug powershell.exe /?)

    Das (Start-)Script funktioniert ja auch wunderbar wenn man es von einem lokalen Speicherort oder via UNC Pfad aufruft. Es hängt sich nur auf wenn man es über ein Netzlaufwerk aufruft (das der Adminuser logischerweise nicht kennt).

    Um das nochmal zu verdeutlichen:

    Aufruf von Ort c:\test\ oder \\win.muster.de\test\bla\
    1. Script startet und fragt nach gewünschtem User
    2. Script ruft Datei \\win.muster.de\test\bla\script.ps1 auf (und fragt dabei nach Passwort vom angegebenen User)
    3. Hauptscript startet und läuft wie gewünscht

    Aufruf von Ort x:\bla\ (Netzlaufwerk)
    1. Script startet und fragt nach gewünschtem User
    2. Script ruft Datei \\win.muster.de\test\bla\script.ps1 auf (und fragt dabei nach Passwort vom angegebenen User)
    3. Fehler

    Btw. wenn ich das mit der Start-Job Methode probiere ist es egal welche Auswahl ich bei der Sicherheitswarnung (Execution Policy) treffe: In jedem Fall wird das Script mit der Begründung abgebrochen ich hätte die Ausführung verweigert.

    Dienstag, 22. Januar 2013 10:53
  • Update:

    Ich habe es inzwischen auch im Script hinbekommen. Man muss beim Aufruf des neuen Prozesses zusätzlich noch das WorkingDirectory mit angeben.

    So sieht der relevante Code der script_start.ps1 jetzt aus:

    $newusercontext = Read-Host 'User waehlen' 
    $newuseranddomain = "nt\"+$newusercontext 
    Start-Process powershell.exe -ArgumentList "-File \\win.muster.de\test\bla\script.ps1" -Credential $newuseranddomain -WorkingDirectory "\\win.muster.de\test\bla\"

    • Bearbeitet Peer Z Dienstag, 22. Januar 2013 14:23
    • Als Antwort markiert Peer Z Dienstag, 22. Januar 2013 14:24
    Dienstag, 22. Januar 2013 13:10
  • Also bei mir funktioniert das Ausführen über Start-Job sehr gut und es kommen Objekte zurück und nicht nur Text:

    PS C:\Users\administrator\Desktop> whoami
    a\administrator
    PS C:\Users\administrator\Desktop> $c = Get-Credential vm\administrator
    PS C:\Users\administrator\Desktop> $c
    UserName                                                                         Password
    --------                                                                         --------
    vm\administrator                                             System.Security.SecureString
    PS C:\Users\administrator\Desktop> Start-Job -FilePath \\afs1\share2\test.ps1 -Credential
    $c
    Id     Name            PSJobTypeName   State         HasMoreData     Location
    --     ----            -------------   -----         -----------     --------
    3      Job3            BackgroundJob   Running       True            localhost
    PS C:\Users\administrator\Desktop> Get-Job
    Id     Name            PSJobTypeName   State         HasMoreData     Location
    --     ----            -------------   -----         -----------     --------
    2      PowerShell.E...                 NotStarted    False
    3      Job3            BackgroundJob   Completed     True            localhost
    PS C:\Users\administrator\Desktop> Get-Job -Name Job3 | Receive-Job
    Tuesday, January 22, 2013 5:10:09 PM


    -Raimund

    Dienstag, 22. Januar 2013 16:21
  • Hast du das auch unter meinen Bedingungen probiert, Raimund Andrée?

    - ExecutionPolicy: Unrestricted
    - Script vom Netzlaufwerk starten

    Donnerstag, 24. Januar 2013 22:30