Django+ PowerShell 管理AD系统

简介:

如何利用Flask 调用 Powershell API 实现的一个运维管理系统。


豆子依葫芦画瓢,用Django成功地实现了有一个简单的界面。 直接用Bootstrap模板弄个前端页面,Django 框架,然后后台调用PowerShell API实现查询。


下面是一个简单的demo,输入AD的组,显示组成员


78c29eb3691e6278c898e30de8ff3b02.png


Django没啥好说的,基本的MTV框架流程,主要比较好玩的是这个PowerShell API的模块。网上有现成的HttpListener的模块可以下载,QQ群里的童鞋做了些修改,去掉了一个验证的功能,如果有需求,可以自己手动添加一个函数进去。我这里图省事是直接用的去验证的版本。


这个模块下载导入之后就可以执行了,他提供了一个类似restful的接口来执行Powershell的命令,直接Http get请求对应的接口,然后返回json格式的结果

1
2
Import-Module  C:\users\yuan.li\Documents\GitHub\Powershell\HTTPListener.psm1
start-httplistener  -verb -Auth None


测试一下:

浏览器

50e5bcbc7fd0ffd4697128c38d85cc05.png

Python

c223bcd2dd23639ed0880f96e3fcbee5.png




值得一提的是,具体的Powershell命令放在哪里,我们可以在两个地方设置。一个是直接在uri里面 command=后面输入,简单的命令无所谓,但是如果命令很复杂很长的话,这里就不是太合适了;


另外一个方式是可以在HTTPListener的模块文件里面直接写个function,这样加载的时候一起放入内存了。command=后面直接跟函数名和参数就行了。

比如说:


1
2
3
function  search-adgroupmemeber( $group ){
     Get-ADGroupMember  $group  | select name, SamAccountName,Distinguishedname
}


那我直接调用

http://localhost:8888/?command=search-adgroupmemeber 'domain admins'


显示结果

e80f700b86b5cef3b1d3821326181bfb.png-wh_



okay,基本能工作了,那么在django上弄个界面看看吧


url.py 路由

1
url(r '^powershell' , views.powershell),


views.py 视图函数

1
2
3
4
5
6
7
8
9
10
11
12
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进行提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
{%  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 %}


这样一个查询效果就做出来了。






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1979809,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
API 数据库 Python
Python 教程之 Django(8)在 Django 管理界面中渲染模型
Python 教程之 Django(8)在 Django 管理界面中渲染模型
23 0
Python 教程之 Django(8)在 Django 管理界面中渲染模型
|
5月前
|
搜索推荐 算法 前端开发
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
142 0
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
95 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
2天前
|
数据处理 数据库 开发者
Django中的自定义管理命令:扩展管理功能的途径
【4月更文挑战第15天】Django教程:介绍如何创建和使用自定义管理命令以扩展框架功能。在应用的`management/commands`目录下创建Python文件,继承`BaseCommand`,实现`handle`方法。示例代码展示了如何定义参数和执行逻辑。自定义命令适用于批量数据处理、定期任务、项目初始化和自定义迁移操作。注意文件位置、命令安全性和稳定性。自定义管理命令能提升开发和维护效率。
|
2天前
|
开发者 Python
Django模板系统的强大之处:动态渲染与扩展性
【4月更文挑战第15天】Django模板系统是Web开发中的强大工具,支持动态渲染和扩展性。动态渲染包括变量、标签和过滤器的使用,实现内容根据上下文数据动态生成。模板继承和自定义标签则提升了扩展性,减少代码重复,增强可维护性。通过这些特性,Django模板系统助力开发者构建高效、动态的Web应用。
|
4月前
|
搜索推荐 算法 前端开发
商品购物管理与推荐系统Python+Django网页界面+协同过滤推荐算法
商品购物管理与推荐系统Python+Django网页界面+协同过滤推荐算法
63 0
|
2月前
|
存储 运维 Java
PowerShell系列(八)PowerShell系统默认内置的Provider介绍
【2月更文挑战第3篇】Alias Provider用来标记其他命令的对象,一般用来标记命令中比较长的函数或者命令,也支持在PowerShell当中指定CMD Shell 中的命令的别名。其实目的都是通过较短的别名来简化一些命令的使用。
PowerShell系列(八)PowerShell系统默认内置的Provider介绍
|
3月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
49 0
|
3月前
|
Ubuntu Shell Docker
docker Ubuntu系统中安装使用 powershell
docker Ubuntu系统中安装使用 powershell
34 0
|
3月前
|
存储 安全 数据库
关于“Python”Django 管理网站的核心知识点整理大全52
关于“Python”Django 管理网站的核心知识点整理大全52
19 0