2016-04-25 5 views

Antwort

0

Leider ist die einfachste Lösung ist es, spwan tatsächlich Powershell-Prozess und fordern Sie die Daten über das Invoke-Command Cmdlets:

def run_powershell(scriptblock, cwd=os.getcwd()): 
    log.debug("Running PowerShell Block:\r\n%s", scriptblock) 
    log.debug("Current Directory: %s\r\n" % cwd) 
    psProc = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe', 
           '-ExecutionPolicy', 'Bypass', 
           '-noprofile', 
           '-c', '-',], 
           cwd=cwd, 
           stdin=subprocess.PIPE, 
           stdout=subprocess.PIPE, 
           stderr=subprocess.PIPE) 
    stdoutdata, stderrdata = psProc.communicate(scriptblock) 

    if stdoutdata: 
     log.debug("Script Output:\r\n%s" % stdoutdata) 
    elif not stderrdata: 
     log.debug("Script completed succssfully (no stdout/stderr).") 
    if stderrdata: 
     log.error("Script Error:\r\n%s" % stderrdata) 

    return stdoutdata, stderrdata 


def get_certificates(server_list, location="LocalMachine", store="My"): 
    cmd = ''' 
$sb = { ls Cert:\%s\%s | Select Subject,ThumbPrint } 
$Servers = '%s' | ConvertFrom-Json 

Invoke-Command -ComputerName $Servers -ScriptBlock $sb -Authentication Negotiate | ConvertTo-Json -Depth 999 
    ''' % (location, store, json.dumps(server_list)) 
    stdoutdata, stderrdata = run_powershell(cmd) 
    return json.loads(stdoutdata) 
Verwandte Themen