Python Запуск команды от Админа Windows

PowerShel+Python = RunAsAdmin

Ух… полдня нервов, криков, пота и крови. Я искал как запустить от доменного админа программу. Это жесть. Перепробовал тысячи вариантов и способов. А также пытался понять как мне с reg.exe удаленно работать. Также понял что comanda password у знаменитой утилиты PsExec не работает как должна. Но все по порядку…

Os.system против Subprocess.popen

А началось все с того, что мне надо было как-то незаметно запустить для пользователя архивацию. И тут есть замечательная команда os.system:

import os

zip_pass = 'SuperPassword'
log_path = 'E:\\path\\to\\dir'

os.system('7zip a -tzip -ssw -mx1 -p'+zip_pass+' -r0 -sdel ' + log_path + '\\back_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.zip ' + log_path + '\\*.png > nul' )

Однако я это делаю в цикле и при выполнении команды появляется окно cmd. Это меня не устраивало и я искал другой путь. Попробовал subprocess. Все заработало:

import pyscreeze ,subprocess
from time import sleep

zip_pass = 'SuperPassword'
log_path = 'E:\\path\\to\\dir'

def screnshot():
    # скрин цикл
    while True:
        sleep(120) # Pereod making screnshot in sec.
        try:
            pyscreeze.screenshot(log_path + '\\' + strftime("%Y-%m-%d-%H.%M.%S", localtime()) + '.png')
        except Exception:
            pass
        subprocess.run(str(exe7z + ' a -tzip -ssw -mx1 -p'+zip_pass+' -r0 -sdel ' + log_path + '\\back_%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%.zip ' + log_path + '\\*.png > nul').split(' '), shell=True) # Making arhive

screnshot()

Если вы хоть чуть разбираетесь, вы поймете зачем мне бекапиться так часто)))). Но это пол беды. Надумал я ко всему этому бреду добавить проверку и установку забикс. Написал довольно не плохой скрипт установки, но вот беда мне надо его запустить от доменного админа. И тут началось…

Пути неисповедимы или чертов RunAs

На просторах интернета полно рекомендаций с примерно следующем содержанием:

echo password | runas /use:admin@domen c:\programma.exe

Только есть одно «НО» — это не работает начиная с Vista Windows. А все потому, что ради безопасности runas не читает stdin. По этой же причине я 4 часа не мог запустить следующее:

cmd =subprocess.popen('runas /user:admin@domen cmd', stdin=subprocess.PIPE,shell=True)
cmd.stdin.write(b'Password\n')

В общем я понял проблему и начал искать обходные пути. Потратив еще час и перебрав разные варианты я нашел ка это можно сделать с помощью PowerShell . Но не все так просто.

Первое знакомство с PowerShell и…

Ни хрена не понятно. Хотя вроде ни чего сложного. Но найденный тут рецепт а именно :

$username = 'user'
$password = 'password'

$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process Notepad.exe -Credential $credential

Не сработал. А вот спустя еще час мучения и лицезрения неверно задано имя папки я понял. Это же DOS! Я вспомнил как у меня были проблемы с тем что я не мог находясь в одном разделе диска вызвать программу из другого. Поняв это я решил проблему, а заодно понял как написать все в одну строку:

powershell $username = 'admin@domen';$password = 'password';$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;c:; Start-Process C:\zabbix\install.bat -Credential $credential

Но и тут не без нюансов. Все команды через «;» а путь у Start-Process не должен выходить в TMP папку. Ну и полный запуск на python.

Запуск батника из python с правами админа

impor os, subprocess

if not os.path.exists('C:\\zabbix\\install.log'):
	subprocess.run(str('xcopy \\\\samba\\shara\\zabbix\\install.bat '+getenv('APPDATA')+' /Y').split(' '), shell=True)
	subprocess.Popen("powershell $username = 'admin@domen';$password = 'password';$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;c:; Start-Process "+getenv('APPDATA')+"\\install.bat -Credential $credential", shell=True)

Вот так я про#бал мой первый день отпуска. Надеюсь еще напишу более подробную статью о том как я свой кейлогер с бекджеком и шлюхами писал…. Удачи!

Оставьте комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Мысль на тему “Python Запуск команды от Админа Windows”