网站首页  词典首页

请输入您要查询的论文:

 

标题 基于Powershell进行服务器远程监控的MVC5网站研究
范文

    符明

    摘要:随着学校的信息化建设的逐步推进,各类服务器和网络系统规模不断增大,对服务器的运行维护也愈发重要。该文通过将Powershell命令运用到NET MVC 5架构网站中,来实现一种远程服务器无须安装额外软件即可进行服务器远程监 控的方法。

    关键词:PowerShell;远程;MVC 5;Visual Basic

    中图分类号:TP393

    文献标识码:A

    文章编号:1009-3044(2020)04-0007-02

    收稿日期:2019-12-05

    随着信息化建设的快速发展,各类应用系统以及网络系统的规模不断加大,各种操作系统、数据库、应用软件、中间件的数量和类型也不断增多,IT信息系统越来越复杂,学校逐渐意 识到IT运维监控的重要性。

    1 Powershell的简单介绍

    PowerShell是构建于.NET上基于任务的命令行shell和脚本语言。PowerSheU可帮助系统管理员和高级用户快速自动执行用于管理操作系统(Linux、macOS和Windows)和流程的任务。

    一个校园局域网内部有若干WEB.SQL服务器,利用Invoke-Command命令,在执行命令后不保持连接,远程主机上的Power Shell进程立即退岀。通过在命令后面添加脚本块,执行后将其推送到目标主机上,然后从目标主机返回结果。

    Windows PowerShell远程管理使用WS-Management协议,Windows PowerShell远程处理可以在一台或多台远程计算机上运行任何Windows PowerShell命令。用户可以建立持久连接、启动交互会话并在远程计算机上运行脚本。Invoke-Command可在本地和远程计算机运行,返回包括错误在内的所有信息。

    2MVC5的简单介绍

    ASP.NET MVC 5是Microsoft开发的一种网站应用程序框架,是使用“模型Model-视图View-控制器Controller”设计模式构建Web应用和API的丰富框架。模型Model表示应用程序特定方面的状态。控制器Controller处理交互并更新模型以反映应用程序状态的更改,然后将信息传递给视图Viewo视图View接受来自控制器Controller的必要信息,并呈现用户界面以显示该信息。

    3?以获得服务器CPU负载为例的实现

    页面前端釆用JQuery的setlnterval()与$普.getJSON()方法。以10秒为间隔,不刷新页面获得所需参数。

    3.1 前端HTML的JavaScript

    $(document).ready(function (){

    setlnterval(function (){

    $ .getJSON(“home/cpuload? ip=yourServerIP&usemame=administrator&password=yourpassword

    ",function (data){

    $("#cpuloading").text(data.cpuloading);

    });

    },10000)

    })

    其中:

    1)setlnterval(code,millisec[,”lang”])方法可按照指定的周期(以毫秒計)来调用函数或计算表达式。setlnterval()方法会不停地调用函数,直到clearlnterval()被调用或窗口被关闭。

    2)jQuery.getJSON(url,data,success(data,status,xhr))通过HTTP GET请求载入JSON数据。

    3.2?前端 HTML

    

    DIV标签中的文本直接由Javascript读取Json数据包不刷新页面写入。

    3.3?后端MVC Control控制器

    代码釆用Visual Basic.NET调用系统PowerShell进行远程控制。网站必须首先调用PowerShell模块,才能在项目中运行 PowerShell命令。在代码上中首先调用如下DLL:

    Imports System.Collections.ObjectModel

    Imports System.Management.Automation

    Imports System.Management.Automation.Runspaces

    Function CPULoad(ByVal ip As String,ByVai username As String,ByVai password As String)As JsonResult

    'Your Codes Here

    Return Json(New With {.cpuloading=cpuLoading),JsonRequestBehavior.AllowGet)

    End Function

    代码将返回Json数据包给前端页面JavaScript显示。

    3.4 远程获得Windows和Ubuntu服务器CPU负载信息

    3.4.1 创建PowerShell远程登录Windows 2016凭证

    远程服务器操作系统为Windows 2016,原生PowerShell版 本为5.1。

    Dim SecuredPass=New SecureString

    For Each c As Char In password

    SecuredPass.AppendChar(c)

    Next

    Dim Credential As PSCredential=New PSCredential(user-name,SecuredPass)

    3.4.2 PowerShell 中 Get-WmiObject-Class Win32_Proces-sorlselect LoadPercentage 获得 Windows 2016 服务器 CPU信息

    PowerShell 中利用 Invoke-Command [[-ComputerName] < String[] >] [-Credential ] [-ScriptBlock] 执行远程命令o

    完成功能代码如下:

    Dim setRemoteRights=True

    Dim psi As PowerShell

    Dim initial As InitialSessionState=InitialSessionState.Creat-eDefault()

    Dim runspace As Runspace 二 RunspaceFactory.CreateRuns-pace(initial)

    runspace.Open()

    psi=PowerShell .Create

    psi.Runspace=runspace

    Dim SecuredPass=New SecureString

    For Each c As Char In password

    SecuredPass.AppendChar(c)

    Next

    Dim Credential As PSCredential=New PSCredential(user-name,SecuredPass)

    myScript="Get-WmiObject-Class Win32_Processorlselect LoadPercentage "

    psi.AddStatement。

    psi.AddCommand(" Invoke—C ommand ")

    psi.AddParameter("ComputerName",ip)

    Dim block As ScriptBlock=ScriptBlock.Create(myScript)

    psi.AddParameter('*ScriptBlock'*,block)

    psi.AddParameter("Authentication","Negotiate")psi.AddParameter("Credential",Credential)

    Dim myResult As Collection(Of PSObject)=psi.Invoke

    Dim cpuLoading=myResult.FirstQ.Members(" LoadPercentage").Value

    runspace.CloseQ runspace.Dispose。

    3.4.3 PowerShell 利用 POSH-SSH 执行 Bash 命令获得 Ubuntu 18.04服务器CPU信息

    直到PowerShell 6.0,Microsoft才支持在Linux中直接运行 PowerShell命令。PowerShell 5.1 则需要安装第三方POSH-SSH 模块,通过SSH协议在远程Linux执行Bash命令,以获得服务器

    CPU负载信息。Ubuntu服务器需要安装SSH Server服务。

    POSH-SSH 中使用 New-SSHSession [-ComputerName] < string[]〉[-Credential] [-Force]建立远程连接进 程;用 Invoke—SSHCommand [―Sessionld] [—Command] < string>在遠程进程中运行Bash命令,并获得返回信息。Ubuntu 使用Bash命令:top-bnllgrep,Cpu(s),获得CPU负载,然后正则 取出想要的信息。

    1)配置本地访问权限,调用第三方POSH-SSH模块

    Dim scriptinvoker As Runspacelnvoke=New Runspaceln-voke(runspace)

    scriptinvoker.Invoke("Set—ExecutionPolicy —Scope Curren-

    tUser Unrestricted")

    psi.AddCommand("Import—Module")

    psi.AddParameter(”Name”,"Posh-SSH")

    2)完整功能代码如下:

    Dim mybash As String=String.Empty

    Dim setRemoteRights=True

    Dim psi As PowerShell

    Dim initial As InitialSessionState=InitialSessionState.Creat-eDefault()

    Dim runspace As Runspace=RunspaceFactory.CreateRuns-pace(initial)

    runspace.OpenQ

    Dim scriptinvoker As Runspacelnvoke=New Runspaceln-voke(runspace)

    scriptinvoker.Invoke("Set—ExecutionPolicy —Scope Curren-tUser Unrestricted")

    psi=PowerShell.Create

    psi.Runspace=runspace

    Dim SecuredPass=New SecureString

    For Each c As Char In password

    SecuredPass.AppendChar(c)

    Next

    Dim Credential As PSCredential=New PSCredential(username,SecuredPass)

    psi.AddStatementQ psi.AddCommand("Import—Module")psi.AddParameter(”Name”,"Posh-SSH")psi.AddStatement()psi.AddCommand("New-SSHSession")psi.AddParameterC'ComputerName",ip)psi.AddParameter(' * Credential'',Credential)psi.AddParameter("Force")psi.AddStatement()

    psi.AddC ommand("Invoke—SSHC ommand ")

    psi.AddParameter("SessionId",0)psi.AddParameter("Command","top-bnllgrep,Cpu(s)/")Dim myResult As Collection(Of PSObject)=psi.Invoke Dim cpuloding As StringQ=myResult.Last().Members("Out-put").Value

    Dim cpuload As String=cpuloding(O)

    Dim match As Match=Regex.Match(cpuload,"\d*\.\d",Re-gexOptions.IgnoreCase)

    Dim outcpuload=match.Groups(0).Value

    runspace.CloseQ

    runspace.Dispose。

    4 研究结论

    方法优点:MVC网页服务器通过运行不同的Powershell和Bash命令就能对远程计算机(Windows、Linux、MacOS)进行远程监控。在强大的Jquery第三方图像控件的支持下,可以图形化数据,使得远程服务器无须安装额外软件即可被监控。

    方法缺点:无法实时监控远程计算机信息。遠程计算机的信息是通过PowerShell对远程计算机执行命令所获取。通过对虚拟机的观察,当对远程计算机命令执行设置刷新时间为1秒时,则远程服务器CPU负载将直接上升20%-30%,这个后果是不合适的。因此设置一个适当的命令刷新速度是必要的。

    发展方向:Microsoft公司已把PowerShell6.0开源,促使应用能跨平台使用。今后PowerShell将可以在Windows,Linux,MacOS服务器中发挥更大的作用。

    参考文献:

    [1] DonJones,JefferyHick.WindowsPowerShell实战指南[M].宋沃剑,译.北京:人民邮电出版社,2016.

    [2] 朱育发.jQuery与jQueryMobile开发完全技术宝典[M].北京:中国铁道出版社,2014.

    [3] AdamFreeman.精通ASP.NETMVC5[M].北京:人民邮电出版社,2016.

    [通联编辑:谢媛媛]

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/23 7:59:55