PythonでPowerShellを呼び出してbatファイルをリモート実行する例
ローカルのPowershellを呼び出すPythonメソッド
1. ここで、IPのリストのうちどれがPingを打てるかをテストする関数を持つ、初歩的なpowershellスクリプトを用意します。
function test_ping($iplist)
{
foreach ($myip in $iplist)
{
$strQuery = "select * from win32_pingstatus where address = '$myip'"
# Send a ping query using Get-WmiObject
$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 parameter ip is the dynamic parameter args[0] in the corresponding call to powershell, similar to sys.argv[1] in python
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回目の呼び出しで、このメソッドを解決します
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 の中に渡すことで、poython で引数を渡せるようにします。
ポリシーを元のデフォルトの状態にする必要がある場合は、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())
# Remote execution of bat file
def call_remote_bat(ipaddress,username,password):
try:
# Connect to remote server with wmi
conn = wmi.WMI(computer=ipaddress, user=username, password=password)
filename=r"D:\apps\autorun.bat" #This file is on the remote server
cmd_callbat=r"cmd /c call %s"%filename
conn.Win32_Process.Create(CommandLine=cmd_callbat) #Execute the bat file
print "Execution successful! "
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")
関連
-
Powershellを選択すべき10の理由(cmdを捨てるべき)
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
PowerShellでパフォーマンスカウンターのバイナリファイル(.blg)の記録を読み込んで計算結果をまとめる
-
PowershellによるWindowsログのクエリ方法
-
win10のスタートメニューと通知センターが開けないのをpowershellで解決する。
-
PowerShellを使用してレジストリを変更する
-
PowerShellの条件付きパイプライン終了方法
-
文字列中の大文字を検索するPowerShellの実装
-
PowerShelプログラム実行後、スクリプト自体を削除する方法
-
Powershellですべてのディスクレターを取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
powershellで仮想マシンを作成する
-
制限された言語パターンを迂回するPowerShellコードインジェクションの脆弱性を防ぐ方法
-
オリジナルpowershellスクリプト gadget ctracert.ps1 trace route(win8+系)
-
SQL SERVERデータベースに接続して操作するためのPowerShellコード
-
PowerShell 5.0の新機能が公開されました。
-
PowerShell 3.0 Hyper-V 3.0 の管理
-
PowerShell パラメータの相互排除の例
-
PowerShellでプログラム的にIEのキャッシュを空にする
-
Powershell ISE 抽象構文木 プログラミング例
-
タイプ別ソートのPowershell実装