首页 > 开发 > PowerShell > 正文

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

2020-05-30 20:18:50
字体:
来源:转载
供稿:网友

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策略的权限可能没有这个问题):

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表