QQ羣裏的Evan童鞋分享了一個頗有意思的博客 http://note.youdao.com/noteshare?id=a60709c00fe88cd09155a2ef50815281 大概是如何利用Flask 調用 Powershell API 實現的一個運維管理系統。css
豆子依葫蘆畫瓢,用Django成功地實現了有一個簡單的界面。 直接用Bootstrap模板弄個前端頁面,Django 框架,而後後臺調用PowerShell API實現查詢。html
下面是一個簡單的demo,輸入AD的組,顯示組成員
前端
Django沒啥好說的,基本的MTV框架流程,主要比較好玩的是這個PowerShell API的模塊。網上有現成的HttpListener的模塊能夠下載,QQ羣裏的童鞋作了些修改,去掉了一個驗證的功能,若是有需求,能夠本身手動添加一個函數進去。我這裏圖省事是直接用的去驗證的版本。python
這個模塊下載導入以後就能夠執行了,他提供了一個相似restful的接口來執行Powershell的命令,直接Http get請求對應的接口,而後返回json格式的結果
shell
Import-Module C:\users\yuan.li\Documents\GitHub\Powershell\HTTPListener.psm1 start-httplistener -verb -Auth None
測試一下:django
瀏覽器
json
Python
瀏覽器
值得一提的是,具體的Powershell命令放在哪裏,咱們能夠在兩個地方設置。一個是直接在uri裏面 command=後面輸入,簡單的命令無所謂,可是若是命令很複雜很長的話,這裏就不是太合適了;restful
另一個方式是能夠在HTTPListener的模塊文件裏面直接寫個function,這樣加載的時候一塊兒放入內存了。command=後面直接跟函數名和參數就好了。框架
好比說:
function search-adgroupmemeber($group){ Get-ADGroupMember $group | select name, SamAccountName,Distinguishedname }
那我直接調用
http://localhost:8888/?command=search-adgroupmemeber 'domain admins'
顯示結果
okay,基本能工做了,那麼在django上弄個界面看看吧
url.py 路由
url(r'^powershell', views.powershell),
views.py 視圖函數
import requests def powershell(req): if req.method=="GET": return render(req,'powershell.html') elif req.method=="POST": name=req.POST.get("caption") print(name) res=requests.get("http://localhost:8888/?command=get-adgroupmember '%s' | select name, distinguishedname"%name) print(res) result=res.json() print(result) return render(req,'powershell.html',{'result':result})
powershell.html 模板,這裏我沒用AJAX,就是直接form進行提交
{% extends 'base.html' %} {% block css %} <style> .go{ width:20px; border: solid 1px; color: #66512c; display: inline-block; padding: 5px; } .pagination .page{ border: solid 1px; color: #66512c; display: inline-block; padding: 5px; background-color: #d6dade; margin: 5px; } .pagination .page.active{ background-color: black; color: white; } .hide{ display: none; } .shade{ position: fixed; top: 0; right: 0; left: 0; bottom: 0; background: black; opacity: 0.6; z-index: 100; } .add-modal,.edit-modal{ position: fixed; height: 300px; width: 400px; top:100px; left: 50%; z-index: 101; border: 1px solid red; background: white; margin-left: -200px; } .group{ margin-left: 20px; margin-bottom: 15px; } </style> {% endblock %} {% block content %} <h1 class="page-header">Powershell 測試頁面</h1> <h3 >查詢用戶組</h3> <form method="POST" action="/powershell"> {% csrf_token %} <input type="text" name="caption" placeholder="組名" /> <input type="submit" value="查詢"/> </form> <br> <table border="1"> <thead> <tr> <th>成員</th> <th>DN</th> <th>操做</th> </tr> </thead> <tbody> {% for items in result %} <tr > <td>`items`.`name`</td> <td>`items`.`distinguishedname`</td> <td><a class ='update'>修改 | </a><a class="delete">刪除</a></td> </tr> {% endfor %} </tbody> </table> {% endblock %} {% block title%}PowerShell{% endblock %} {% block js%} <script> </script> {% endblock %}
這樣一個查詢效果就作出來了。