Django+ PowerShell 管理AD系统

2017-11-08 06:20:42

QQ群里的Evan童鞋分享了一个很有意思的博客 http://note.youdao.com/noteshare?id=a60709c00fe88cd09155a2ef50815281  大概是如何利用Flask 调用 Powershell API 实现的一个运维管理系统。

 

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

 

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

 

78c29eb3691e6278c898e30de8ff3b02.png

 

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

 

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

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=后面直接跟函数名和参数就行了。

比如说:

 

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 路由

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 %}

 

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

 

文章转自 http://blog.51cto.com/beanxyz/1979809

<think>嗯,用户想比较VBScript和PowerShell以及其他脚本语言的不同之处。首先,我需要确认用户的需求。他们可能是在选择学习哪种脚本语言,或者是在迁移旧有的VBScript脚本到更现代的解决方案。所以,我需要从多个方面进行比较,比如语法、功能、跨平台支持、社区支持等等。 首先,VBScript是微软早期的脚本语言,主要用于Windows环境,比如在ASP网页和系统管理中。但现在已经过时了,微软官方已经不再支持。而PowerShell是更现代的选择,功能更强大,尤其是在系统管理和自动化方面。用户可能想知道为什么应该转向PowerShell,以及与其他语言如Python、Bash的区别。 接下来,我需要考虑其他脚本语言,比如Python和Bash。Python是跨平台的,应用广泛,特别是在数据处理和Web开发中。Bash主要在Unix/Linux环境下使用,适合文件处理和系统管理。所以,比较这些语言时,需要突出它们的适用场景、语法差异、扩展性等。 用户可能还关心学习曲线。VBScript语法相对简单,但功能有限;PowerShell的语法更灵活,支持管道、对象操作,这对习惯了命令行的用户来说可能需要适应。Python的语法清晰,适合初学者,但高级功能可能需要更多学习。 另外,跨平台支持也很重要。PowerShell Core可以在Linux和macOS上运行,而VBScript只能在Windows上使用。Python和Bash则各自在跨平台和特定系统上有优势。 安全问题也是要考虑的。VBScript存在较多的安全漏洞,而PowerShell有更严格的安全策略,比如执行策略设置,这可能会影响用户的选择。 然后,需要引用用户提供的参考资料,比如CMD和PowerShell的语法差异,以及PowerShell的结构。比如,CMD命令和参数用空格分隔,而PowerShell支持管道符和变量,这说明PowerShell更强大。同时,PowerShell作为脚本引擎嵌入到多个主机中,比如powershell.exe和ISE,这也展示了它的灵活性和应用场景。 可能用户没有明确提到的深层需求是,他们可能在寻找替代VBScript的解决方案,尤其是在自动化任务、系统管理或与其他系统的集成方面。因此,需要强调PowerShell在Windows环境中的优势,以及Python在跨平台和社区支持方面的优势。 最后,生成的相关问题需要围绕性能、迁移方法、适用场景等,帮助用户进一步探索。比如,如何将VBScript迁移到PowerShell,或者在Linux环境下选择哪种脚本语言更合适。 总结来说,回答需要结构清晰,覆盖语法、功能、平台支持、社区和安全性,并引用提供的资料来支持观点,确保信息准确可靠。</think>### VBScript、PowerShell与其他脚本语言特性对比 #### 1. **语法设计** - **VBScript**:基于Basic语法,使用`Dim`声明变量,语句以换行结束,支持过程式编程。 示例:`If x > 5 Then MsgBox "Hello"` - **PowerShell**:结合CMD与面向对象特性,支持管道符`|`、变量`$var`和脚本块`{}`,语法更接近现代编程语言[^1][^2]。 示例:`Get-Process | Where-Object { $_.CPU -gt 100 }` - **Python**:缩进敏感,语法简洁,支持函数式与面向对象编程。 示例:`[x**2 for x in range(10) if x%2==0]` - **Bash**:基于命令链,依赖符号如`$`、`&&`和重定向符`>`,适合文件操作。 示例:`grep "error" /var/log/syslog | awk '{print $2}'` #### 2. **功能特性** - **VBScript**: - 主要用于Windows GUI自动化(如WMI、COM对象)和ASP网页后端。 - 无原生跨平台支持,依赖Windows Script Host(WSH)。 - **PowerShell**: - 支持对象管道(非纯文本),可直接调用.NET库。 - 提供模块化设计(如`Import-Module`),内置远程管理(`Enter-PSSession`)。 - 跨平台支持通过PowerShell Core实现(Windows/Linux/macOS)。 - **Python**: - 丰富的第三方库(如`pandas`、`requests`),支持多线程和异步编程。 - 跨平台兼容性最佳。 - **Bash**: - 专注文件处理和系统命令组合,适合Unix/Linux环境自动化。 #### 3. **应用场景** - **VBScript**:旧版Windows系统维护、遗留ASP应用(逐步淘汰)。 - **PowerShell**:Windows系统管理(如AD域控、Exchange配置)、自动化运维[^2]。 - **Python**:数据分析、Web服务(Django/Flask)、跨平台工具开发。 - **Bash**:Linux服务器运维、Shell脚本编排(如定时任务)。 #### 4. **安全与生态系统** - **VBScript**:安全性较低(如易受恶意WSH脚本攻击),社区支持已停滞。 - **PowerShell**:提供执行策略控制(如`Restricted`/`RemoteSigned`),集成Windows Defender检测。 - **Python**:活跃的开源社区,依赖包需谨慎审核(如PyPI供应链攻击风险)。 - **Bash**:依赖系统权限管理,需防范注入攻击(如未转义变量)。 #### 5. **跨平台能力** | 语言 | Windows | Linux/macOS | 云集成 | |------------|---------|-------------|---------------| | VBScript | ✔️ | ❌ | ❌ | | PowerShell | ✔️(Core)| ✔️(Core) | ✔️(Azure CLI)| | Python | ✔️ | ✔️ | ✔️(AWS SDK等)| | Bash | ❌ | ✔️ | ✔️(SSH/SCP) | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值