Is there a way of passing some runas=True
arg to a subprocess.run
function in python? I want to run a process as admin (elevate it). Thanks for answers :)\
EDIT: Using Windows OS.
Is there a way of passing some runas=True
arg to a subprocess.run
function in python? I want to run a process as admin (elevate it). Thanks for answers :)\
EDIT: Using Windows OS.
Windows has a command line utility "Run as", which can be used as
runas [{/profile | /noprofile}] [/env] [{/netonly | /savecred}] [/smartcard] [/showtrustlevels] [/trustlevel] /user:<UserAccountName> "<ProgramName> <PathToProgramFile>"
for further reference https://technet.microsoft.com/en-us/library/cc771525.aspx
You can use this in code like below
import subprocess as sp
prog = sp.Popen(['runas', '/noprofile', '/user:Administrator', 'NeedsAdminPrivilege.exe'],stdin=sp.PIPE)
prog.stdin.write('password')
prog.communicate()
If you want to run a command as the same user but with admin privilege
Please refer to this solution:
os.system(r'''
Powershell -Command "& { Start-Process \"notepad.exe\"
-ArgumentList @(\"C:\\Windows\\System32\\drivers\\etc\\hosts\")
-Verb RunAs } " '''
The original answer can be found here https://superuser.com/a/753600/1088510
There are three approaches:
runas
as shown in this answer. The downside of this approach is that it uses the Administrator account instead of the current user's Administrator privileges. This does not work well if you plan to deploy your software to users.ShellExecute
as discussed in this question to start your subprocess. The downside is that you won't be able to work with stdin/stdout/stderr.WinElevator
(signed launcher.exe and elevator.exe are available here). The downside of this approach is that you need to ship two additional ~150kb binaries, the upside is that you can interact with stdin/stdout/stderr.As others have suggested you can achieve this using powershell. These are my PS functions I use to elevate to Admin:
# ========================================= Admin Rights =======================================================
# Usage: asAdmin $PSCommandPath
function asAdmin
{
[string]$cmdPath = $args[0]
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$cmdPath`"" -Verb RunAs; exit }
}
#-noexit
function asAdminWithSTA
{
[string]$cmdPath = $args[0]
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-sta -NoProfile -ExecutionPolicy Bypass -File `"$cmdPath`"" -Verb RunAs; exit }
}
© 2022 - 2024 — McMap. All rights reserved.
Administrator
user account, not generally with users that are part of theAdministrators
group. In practice, the built-inAdministrator
account is often disabled for security reasons. – Iredale