标题 | 基于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 完成功能代码如下: 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] 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下载服务。