欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python中调用PowerShell、远程执行bat文件实例

程序员文章站 2024-01-07 13:28:40
python调用本地powershell方法 1、现在准备一个简陋的powershell脚本,功能是测试一个ip列表哪些可以ping通: 复制代码 代码如下: fun...

python调用本地powershell方法

1、现在准备一个简陋的powershell脚本,功能是测试一个ip列表哪些可以ping通:

复制代码 代码如下:

function test_ping($iplist)
{
    foreach ($myip in $iplist)
    {
        $strquery = "select * from win32_pingstatus where address = '$myip'"
        # 利用 get-wmiobject 送出 ping 的查詢
        $wmi = get-wmiobject -query $strquery
        if ($wmi.statuscode -eq 0)
        {
            return "pinging`t$myip...`tsuccessful"
        }
        else
        {
            return "pinging`t$myip...`terrorcode:" + $wmi.statuscode
        }
    }
}

test_ping args[0]

python简陋的调用方法:

复制代码 代码如下:

# -*- coding: utf-8 -*-
import subprocess
 
def python_call_powershell(ip):
    try:
        args=[r"powershell",r"d:\jzhou\test_ping.ps1",ip]  #args参数里的ip是对应调用powershell里的动态参数args[0],类似python中的sys.argv[1]
        p=subprocess.popen(args, stdout=subprocess.pipe)
        dt=p.stdout.read()
        return dt
    except exception,e:
        print e
    return false

if __name__=="__main__":
    ip=["1.1.1.1","2.2.2.2","3.3.3.3"]
    print python_call_powershell(ip)

可能会报下面的错误(如果服务器本身开启了运行了powershell策略的权限可能没有这个问题):

Python中调用PowerShell、远程执行bat文件实例

第二种调用方法可以解决这个方法

2、调用时设置powershell执行策略,这种方法一旦将策略设置好后,后面就通用了,如果需要的话再在powershell脚本最后加上已经将策略改回去

复制代码 代码如下:

def python_call_powershell(ip):
    try:
        args=[r"c:\windows\system32\windowspowershell\v1.0\powershell.exe","-executionpolicy","unrestricted", r"d:\jzhou\test_ping.ps1",ip]
        p=subprocess.popen(args, stdout=subprocess.pipe)
        dt=p.stdout.read()
        return dt
    except exception,e:
        print e
    return false

3、还有一点需要注意的是powershell脚本里最后必须要调用一下自己的函数,并且函数要有返回值,以便python能接收powershell脚本返回的结果,同时powershell脚本调用函数传参的方式是args[0],args[1]等等,然后在python里的args里传入对应的参数。

如果需要将策略设置为原来的默认状态,在powershell脚本最后加上:set-executionpolicy restricted

python远程调用bat执行命令

1、首先安装python的wmi包
2、远程调用bat如下:

复制代码 代码如下:

# -*- coding: utf-8 -*-
import wmi,json
import time

logfile = 'logs_%s.txt' % time.strftime('%y-%m-%d_%h-%m-%s', time.localtime())

#远程执行bat文件
def call_remote_bat(ipaddress,username,password):
    try:
        #用wmi连接到远程服务器
        conn = wmi.wmi(computer=ipaddress, user=username, password=password)
        filename=r"d:\apps\autorun.bat"   #此文件在远程服务器上
        cmd_callbat=r"cmd /c call %s"%filename
        conn.win32_process.create(commandline=cmd_callbat)  #执行bat文件
        print "执行成功!"
        return true
    except exception,e:
        log = open(logfile, 'a')
        log.write(('%s, call bat failed!\r\n') % ipaddress)
        log.close()
        return false
    return false

if __name__=='__main__':
    call_remote_bat(computer="192.168.1.2", user="testuser", password="testpwd")

上一篇:

下一篇: