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