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

2020-04-14 04:54符明
电脑知识与技术 2020年4期
关键词:调用视图命令

符明

摘要:随着学校的信息化建设的逐步推进,各类服务器和网络系统规模不断增大,对服务器的运行维护也愈发重要。该文通过将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.

[通联编辑:谢媛媛]

猜你喜欢
调用视图命令
只听主人的命令
核电项目物项调用管理的应用研究
LabWindows/CVI下基于ActiveX技术的Excel调用
移防命令下达后
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
基于系统调用的恶意软件检测技术研究
这是人民的命令
利用RFC技术实现SAP系统接口通信