2

I'm tryng to run a batch file in python with administrator privileges using runas command.

My code is:

prog = subprocess.Popen(['runas', '/noprofile', '/user:Administrator', ' c:\windows\system32\addtask.bat'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,universal_newlines=True)
prog.stdin.write('mypass\n')
prog.stdin.flush()
output, error = prog.communicate()
if prog.returncode != 0: 
    print("FAILED: %d %s - %s" % (prog.returncode, output, error))

but it doesn't work. It outputs:

FAILED: 1 Enter the password for Administrator: - none

I think there's something wrong passing the password through stdin.

Any suggestions?

1 Answers1

2

The question does not state if the password must be entered programmatically.

If you don't mind entering the password manually, via UAC prompt, you could run the bat file using cmd.exe, and use ShellExecuteW to request elevation.

For example:

from ctypes import windll

bat_file_path = 'c:\windows\system32\addtask.bat'  # from OP
result = windll.shell32.ShellExecuteW(
    None,  # handle to parent window
    'runas',  # verb
    'cmd.exe',  # file on which verb acts
    ' '.join(['/c', bat_file_path]),  # parameters
    None,  # working directory (default is cwd)
    1,  # show window normally
)
success = result > 32
djvg
  • 11,722
  • 5
  • 72
  • 103