开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Django框架入门
Django框架入门
14 0
Django框架之ORM
Django框架之ORM
34 0
Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战
Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战
442 0
【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口
【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口
35 0
django框架--路由系统
目录 一、路由系统理解 二、路由系统功能划分 三、路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四、自定义错误页面 五、图示路由系统在框架中的定位 六、路由系统的进阶想法 一、路由系统理解 系统功能:根据用户访问的不同url,执行对应的视图函数。
1282 0
基于Django实现 RESTful API 之RestFramework框架3
接下来学习RestFramework框架中的认证、权限、频率组件的使用 一、首先实现用户login登录认证功能 做用户登录认证功能可以通过session、cookie和token三种形式,下面的login认证基于token实现 关键点 -- 首先需要...
1315 0
Python全栈 Web(Django框架、概述、安装)
Python、Django、框架、服务器、客户端、浏览器、交互、WEB、Python前端、CSS、JAVA、HTML、H5、PHP、JavaScript、JQuery、分布式开发
24791 0
基于Django实现 RESTful API 之RestFramework框架2
前言:上一篇关于RestFramework框架的文章介绍了APIView、解析器和序列化三个很重要的组件,这三个组件的源码执行流程可以说是RestFramework框架的核心部分,要是你完全吃透了,那先恭喜您了,接下来的组件对您来说就很简单了,顺着之前的源码思路很快就融会贯通了。
1440 0
基于Django实现 RESTful API 之RestFramework框架1
一、首先什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资...
1575 0
Python高级进阶(二)Python框架之Django写图书管理系统(LMS)
正式写项目准备前的工作   Django是一个Web框架,我们使用它就是因为它能够把前后端解耦合而且能够与数据库建立ORM,这样,一个Python开发工程师只需要干自己开发的事情就可以了,而在使用之前就我们需要给Django做文件配置和数据库配置   上一章写过的文章,有些朋友反应,对于Web框...
1793 0
+关注
20376
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载