Как запустить скрипт на Python с аргументами powershell от имени администратора - PullRequest
0 голосов
/ 26 июня 2019

Существуют различные темы на эту тему, но ничто не помогает в моем конкретном случае. Обычно я не пользователь Windows, поэтому, может быть, я что-то упускаю.

Мне нужно запустить серию сценариев Python с аргументами из одного сценария PowerShell для Windows (2016). Сценарии python должны запускаться от имени администратора (поскольку им необходим доступ к локальному реестру).

Я дошел до этого, основываясь на материалах других тем по теме:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Unrestricted -File `"$PSCommandPath`"" -Verb RunAs; exit }


& python.exe V:Scripts\script.py --hostnames del rodney

Это запускает подоболочку как администратор, но эта подоболочка не работает при запуске сценария python. Подоболочка исчезает до того, как у меня появляется шанс увидеть сообщение об ошибке, но журнал событий powershell сообщает «Состояние двигателя изменено с Доступно на Остановлено», что, как я полагаю, указывает на ошибку разрешений.

Скрипт python работает нормально, если он запускается непосредственно из PowerShell администратора. Любые указатели с благодарностью приняты.

1 Ответ

0 голосов
/ 26 июня 2019

Ваш код проверяет, выполняется ли текущий сеанс powershell от имени администратора, а если нет, то выполняет другой сеанс от имени администратора.

Однако ваш код Python все еще выполняется в начальном сеансе Poweshell (который не работает от имени администратора).

Измените ваш код следующим образом:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Unrestricted -command ""python.exe V:Scripts\script.py --hostnames del rodney""" -Verb RunAs
} else {
    python.exe V:Scripts\script.py --hostnames del rodney
}

Это проверит, запущен ли текущий сеанс с правами администратора, он напрямую запустит код Python; Если это не так, он запустит новый сеанс Powershell от имени администратора и запустит в нем код Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...