Codeblock lokal als anderer Benutzer im Powershell-Skript ausführen

8

Das ist etwas unglaublich Einfaches, aber ich kann einfach nichts zur Arbeit bringen. Ich möchte einen Blockcode in einem Powershell-Skript unter einem bestimmten Benutzer ausführen. Das Schlüsselwort ist lokal und ich verwende Powershell 2.0.

Invoke-Command scheint einen Remote-Host zu benötigen? Ich führe das folgende aus und die Fehlermeldung, die ich sehe, scheint so viel zu empfehlen:

%Vor%

Start-Job mit -ScriptBlock wird nicht mit Powershell 2.0 unterstützt? Ich führe das folgende aus und die Fehlermeldung, die ich sehe, scheint so viel zu empfehlen:

%Vor%

Tue ich etwas falsch oder gibt es einen alternativen Weg?

Hinzugefügt: Hier ist, was ich versuche, an erster Stelle zu tun. Ich mache eine geplante Aufgabe, die ausgeführt wird, wenn sich ein Benutzer bei einem Terminal anmeldet / entsperrt, das Anmeldeinformationen in eine Datei schreibt. Der geplante Task wird als lokaler Benutzer ausgeführt, um die Informationen zum Benutzernamen, Profil usw. zu erhalten. Die Anmeldeinformationen werden dann unter Verwendung eines anderen Benutzerkontos in eine Protokolldatei geschrieben. Dies ist das einzige Konto, das die Datei ändern kann. Um den Zugriff auf die Anmeldeinformationen im Skript zu verhindern, konvertiere ich das Skript mit PS2EXE in eine EXE.

    
wrieedx 01.09.2014, 07:33
quelle

3 Antworten

2

Ein anderer Ansatz ist die Impresonation, es ist eine gute Option, wenn Sie Remoting nicht aktivieren wollen.

Sieh dir das an - Ссылка

Sie sollten dieses Modul einfach importieren und Ihren Code zwischen

setzen
  

Push-ImpersonationContext $ credential

und

  

Pop-ImpersonationContext

    
olegk 30.09.2015 10:32
quelle
1

Es würde Ihnen helfen, die Fehlermeldungen zu sehen, die Sie uns nicht zeigen, aber ich denke, die Antwort auf Ihre Frage ist die Verwendung von PowerShell Remoting, wie Sie es mit Invoke-Command versucht haben. Der Computername . ist in Ordnung, wie auch localhost , aber Sie müssen Remoting auf Ihrem Computer aktiviert haben, um dies zu tun.

Um Remoting zu aktivieren, führen Sie Enable-PSRemoting in der Powershell aus, oder führen Sie winrm quickconfig in einer normalen Eingabeaufforderung aus.

Wenn Remoting bereits aktiviert ist, versuchen Sie möglicherweise, das Remoting mit einem nicht administrativen Benutzer durchzuführen. Wenn das der Fall ist, sehen Sie sich die Ausgabe von Get-PSSessionConfiguration an. Sie erhalten eine Liste der Endpunkte und der angewendeten Berechtigungen.

Der Endpunkt, mit dem Sie sich standardmäßig verbinden, heißt Microsoft.Powershell und Sie können die Berechtigungen mit Set-PSSessionConfiguration ändern (achten Sie darauf, den Parameter -ShowSecurityDescriptorUI zu verwenden, es sei denn, Sie wollen mit SDDL umgehen).

Aber anstatt das zu tun, sollte es bereits eine Gruppe namens " BUILTIN\Remote Management Users " geben, der Sie Ihren eingeschränkten Benutzer hinzufügen können.

Wenn nichts davon hilft, geben Sie weitere Details und Fehlermeldungen an.

Bearbeiten

Nachdem ich die Erklärung dessen gesehen habe, was Sie letztendlich erreichen wollen, habe ich einen anderen Vorschlag für Sie.

  1. Ihre vorhandene geplante Aufgabe schreibt die Informationen an einen bekannten Ort.
  2. Eine andere geplante Aufgabe, die unter dem privilegierten Benutzerkonto ausgeführt wird, nimmt diese Information und legt sie in die Datei ab, auf die der beschränkte Benutzer nicht zugreifen kann.
  3. Bonus: startet die zweite Aufgabe von der ersten Aufgabe.

Dies könnte ein schneller Kompromiss sein, um das zu tun, was Sie wollen, ohne Remoting und ohne die Anmeldeinformationen des privilegierten Benutzers offenzulegen.

Probleme mit dem aktuellen Ansatz:

Das Hauptproblem meiner ursprünglichen Idee besteht darin, dass Sie die Anmeldeinformationen in das Skript einbetten müssen, damit der eingeschränkte Benutzer Zugriff auf die Anmeldeinformationen des Kontos erhält, das die Datei sowieso ändern kann.

Idealerweise:

Sie hätten einen Web-Service, den Sie mit Ihrem Powershell-Skript für begrenzte Benutzer aufrufen können, in dem Sie ihm nur die Anmeldeinformationen geben und nichts zurückbekommen. Sie würden also eine URL eingeben und ein POST oder was auch immer mit den Daten machen, die Sie protokollieren möchten, aber dieser Benutzer kann niemals irgendwelche Informationen abrufen. Es könnte etwas mehr als das sein, was Sie dafür tun wollen.

    
briantist 01.09.2014 18:54
quelle
1

Hier ist ein anderer Weg.

%Vor%

Mit der Option -LoadUserProfile hat dies den zusätzlichen Vorteil, dass das Benutzerprofil erstellt wird, falls es nicht bereits existiert.

    
Nathan Hartley 08.12.2015 21:30
quelle

Tags und Links