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
新闻热点
疑难解答