Python中調用PowerShell、遠程執行bat檔案執行個體_PowerShell

來源:互聯網
上載者:User

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
    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")

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.