#powershell #python #sccm
#powershell #python #sccm
Вопрос:
Я пытаюсь использовать этот код, чтобы получить список действий в SCCM, загруженных в python, но все, что я получаю в retun, — это пустая строка байтов.
count = r"""
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
$arguments = "amp; '" $myinvocation.mycommand.definition "'"
Start-Process powershell -Verb runAs -ArgumentList $arguments
Break
}
$CMGR = New-Object -ComObject CPApplet.CPAppletMgr
$ClientActions = Out-String ($CMGR.GetClientActions() | Select Name).count
$ClientActions
"""
def runPS(command):
import subprocess
process=subprocess.run(["powershell", "-ExecutionPolicy", "Bypass", command],stdout=subprocess.PIPE);
print(process.stdout)
Все эти выходные данные b''
Что я делаю не так???
РЕДАКТИРОВАТЬ: я понял часть этого. Это потому, что он технически запускает другой powershell внутри этого (Python>> Powershell>> Admin Powershell), а второй не возвращает свое значение первому. (Python <> Powershell >> Admin Powershell)
Комментарии:
1. Попробуйте более простой Powershell, например, привет, мир! пример. Работает ли его вывод? Если это так, что-то не так с SCCM Powershell. Если этого не происходит, что-то нужно для получения выходных данных из процесса.
2. @vonPryz Я это сделал, и он фактически получает возвращаемое значение. Странная часть заключается в том, что когда я запускаю это в окне Powershell (без python), он возвращает правильное число (в данном случае «9»)
Ответ №1:
Я бы предложил использовать check_output()
вместо run()
here . Это позволяет вам обнаруживать ненулевой код выхода из дочернего процесса. Дополнительная информация здесь. Возможно, по какой-то причине Powershell не работает, но вы не фиксируете stderr или не проверяете код возврата.
Что-то вроде этого может быть более надежным:
def runPS(command):
import subprocess
output = subprocess.check_output(["powershell", "-ExecutionPolicy", "Bypass", command])
return output
РЕДАКТИРОВАТЬ: я понял часть этого. Это потому, что он технически запускает другой powershell внутри этого (Python>> Powershell>> Admin Powershell), а второй не возвращает свое значение первому. (Python <> Powershell >> Admin Powershell)
Хм. Извините, я не знаю powershell, поэтому я не могу помочь вам с этой половиной.