如何使用Python远程在Windows机器上安装证书?

时间:2016-04-25 09:52:03

标签: python windows powershell wmi certificate-store

我希望远程查询某些Windows计算机,并获取其证书存储详细信息(已安装的证书名称,到期日期和指纹)。 我使用的是Python 2.7。

如何做到这一点?我对pywin32wmi套餐没有任何好运。

1 个答案:

答案 0 :(得分:0)

可悲的是,最简单的解决方案是实际spwan powershell进程并通过Invoke-Command cmdlet请求数据:

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)