python調(diào)用本地powershell方法
1、現(xiàn)在準(zhǔn)備一個(gè)簡陋的powershell腳本,功能是測試一個(gè)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簡陋的調(diào)用方法:
代碼如下:
# -*- coding: utf-8 -*-
import subprocess
def python_call_powershell(ip):
try:
args=[r"powershell",r"D:/jzhou/test_ping.ps1",ip] #args參數(shù)里的ip是對應(yīng)調(diào)用powershell里的動態(tài)參數(shù)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)
可能會報(bào)下面的錯(cuò)誤(如果服務(wù)器本身開啟了運(yùn)行了powershell策略的權(quán)限可能沒有這個(gè)問題):
第二種調(diào)用方法可以解決這個(gè)方法
2、調(diào)用時(shí)設(shè)置powershell執(zhí)行策略,這種方法一旦將策略設(shè)置好后,后面就通用了,如果需要的話再在powershell腳本最后加上已經(jīng)將策略改回去
代碼如下:
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
新聞熱點(diǎn)
疑難解答
圖片精選