2015-04-10 24 views
5

Vielleicht gibt es eine Möglichkeit, es mit Start-Process Cmdlet zu tun, die ich nicht finden kann? Die anderen verwandten Q/A's, die ich in StackOverflow gefunden habe, wie this, this und this, bieten alle eine Lösung, um dies mit einem benutzerdefinierten C# -Code zu tun. Meine Frage ist speziell, gibt es einen einfachen Weg, dies in PowerShell zu tun? Sie befinden sich in einer erhöhten PS-Konsole und möchten einen Prozess als Nicht-Administrator ausführen.Wie führe ich einen Prozess als Nicht-Administrator von einer erhöhten PowerShell-Konsole aus?

+0

Das ist ungewöhnlich erweiterte Funktionen, Powershell kann keine geeignete Wahl sein. –

Antwort

8

Sie verwenden können können die TrustLevel mit runas.exe angeben, effektiv

„eingeschränkt“ Laufen
runas /trustlevel:0x20000 "powershell.exe -command 'whoami /groups |clip'" 

Sie in der Ausgabe von whoami sehen sollte, dass die Administrators Gruppe in Ihrem Token als „Deny Wird nur“ gekennzeichnet ist


enter image description here

+0

'0x20000' lässt das Label" High Mandatory Level "des Kontos aktiviert. Mit '0x1000' sind nur" Jeder "," Benutzer "und" Authentifizierte Benutzer "aktiviert. '/ showtrustlevels' führt diese Ebene nicht einmal auf. Ist das irgendwo dokumentiert? Es wird nicht in dem folgenden Artikel erwähnt, der "0x20000" erwähnt: [Neue ACLs verbessern die Sicherheit in Windows Vista] (https://technet.microsoft.com/en-us/magazine/2007.06.acl.aspx). – eryksun

+0

@eryksun mein Fehler, Trustlevel! = Integritätslevel. Aus dem Artikel: "Als einen Punkt von Interesse, Trustlevel 0x20000 gibt Ihnen ein Token mit dem normalen Satz von SIDs aber abgestreift Privilegien" –

+0

Ich las den Artikel.Ich habe nach '0x1000' gefragt, was, wie ich bereits erwähnte, alle Gruppen ablehnt (einschließlich der Integritätskennzeichnung), mit Ausnahme der Gruppen" Everyone "," Users "und" Authenticated Users ". Ich habe das nur durch Experimente herausgefunden. Es scheint nirgendwo dokumentiert zu sein. – eryksun

-4

in start-process existieren Schalter runas wie

start-process powershell -verb runAs 

aber UAC überprüfen Sie immer noch, wenn in Ihrem System UAC auf Sie erste Bypass UAC sollte gibt es viele Wege gibt es für Bypass UAC aber alle Möglichkeiten, funktioniert nicht in allen Fenstern wie Windows 8 , wenn Sie Skript für den Lauf Prozess schreiben dann compile to exe Sie Programm wie runasadmin für Ausführen als Admin Ihres exe in System aber immer noch funktionieren nicht in Windows 8

+2

Dies scheint das genaue Gegenteil der gewünschten Antwort der Frage zu sein. In der Hilfe zu "Start-Process" "Das Verb RunAs startet den Prozess mit den Berechtigungen eines Mitglieds der Administratorengruppe auf dem Computer. Dies ist das gleiche wie das Starten von Windows PowerShell mit der Option" Als Administrator ausführen "." –

2

Wenn Sie sich mit diesem Problem befassen, wie in den verknüpften Aufgaben erwähnt, gibt es keine Möglichkeit, einen UAC "non" erhöhten Prozess von einem erhöhten Prozess auszuführen. Da dies genau das ist, was ich benötigte, und die Runas-Lösung für mich nicht funktionierte, konvertierte ich die von Microsoft bereitgestellte Codeumgehung, um eine geplante Aufgabe zu verwenden, um einen "nicht" erhöhten Prozess zu starten.

Beispiel powershell.exe als „non“ erhöhten Prozess von einer erhöhten Powershell-Eingabeaufforderung des Laufens:

$apppath = "powershell.exe" 
$taskname = "Launch $apppath" 
$action = New-ScheduledTaskAction -Execute $apppath 
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) 
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName $taskname | Out-Null 
Start-ScheduledTask -TaskName $taskname 
Start-Sleep -s 1 
Unregister-ScheduledTask -TaskName $taskname -Confirm:$false 

Die obige Powershell-Befehle funktionieren nur unter Windows Server 2012/Windows 8 und größer nur.

Oder können Sie die SCHTASKS.EXE Anwendung verwenden, anstatt den meisten Versionen von Windows zu decken:

$apppath = "powershell.exe" 
$taskname = "Launch $apppath" 
schtasks /create /SC ONCE /ST 23:59 /TN $taskname /TR $apppath 
schtasks /run /tn $taskname 
Start-Sleep -s 1 
schtasks /delete /tn $taskname /F 
+0

Dieser Ansatz ist anscheinend gründlicher (stört nicht die Shortcuts meiner Screenshot-App, wenn das neue Fenster den Fokus hat). – Vimes

+0

Um einen Task im Akkubetrieb zu starten, habe ich ein Register-ScheduledTask-Argument hinzugefügt: '-Einstellungen (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries)' – Vimes