符明
摘要:隨著學(xué)校的信息化建設(shè)的逐步推進(jìn),各類服務(wù)器和網(wǎng)絡(luò)系統(tǒng)規(guī)模不斷增大,對(duì)服務(wù)器的運(yùn)行維護(hù)也愈發(fā)重要。該文通過將Powershell命令運(yùn)用到NET MVC 5架構(gòu)網(wǎng)站中,來實(shí)現(xiàn)一種遠(yuǎn)程服務(wù)器無須安裝額外軟件即可進(jìn)行服務(wù)器遠(yuǎn)程監(jiān) 控的方法。
關(guān)鍵詞:PowerShell;遠(yuǎn)程;MVC 5;Visual Basic
中圖分類號(hào):TP393
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)04-0007-02
收稿日期:2019-12-05
隨著信息化建設(shè)的快速發(fā)展,各類應(yīng)用系統(tǒng)以及網(wǎng)絡(luò)系統(tǒng)的規(guī)模不斷加大,各種操作系統(tǒng)、數(shù)據(jù)庫、應(yīng)用軟件、中間件的數(shù)量和類型也不斷增多,IT信息系統(tǒng)越來越復(fù)雜,學(xué)校逐漸意 識(shí)到IT運(yùn)維監(jiān)控的重要性。
1 Powershell的簡單介紹
PowerShell是構(gòu)建于.NET上基于任務(wù)的命令行shell和腳本語言。PowerSheU可幫助系統(tǒng)管理員和高級(jí)用戶快速自動(dòng)執(zhí)行用于管理操作系統(tǒng)(Linux、macOS和Windows)和流程的任務(wù)。
一個(gè)校園局域網(wǎng)內(nèi)部有若干WEB.SQL服務(wù)器,利用Invoke-Command命令,在執(zhí)行命令后不保持連接,遠(yuǎn)程主機(jī)上的Power Shell進(jìn)程立即退岀。通過在命令后面添加腳本塊,執(zhí)行后將其推送到目標(biāo)主機(jī)上,然后從目標(biāo)主機(jī)返回結(jié)果。
Windows PowerShell遠(yuǎn)程管理使用WS-Management協(xié)議,Windows PowerShell遠(yuǎn)程處理可以在一臺(tái)或多臺(tái)遠(yuǎn)程計(jì)算機(jī)上運(yùn)行任何Windows PowerShell命令。用戶可以建立持久連接、啟動(dòng)交互會(huì)話并在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行腳本。Invoke-Command可在本地和遠(yuǎn)程計(jì)算機(jī)運(yùn)行,返回包括錯(cuò)誤在內(nèi)的所有信息。
2MVC5的簡單介紹
ASP.NET MVC 5是Microsoft開發(fā)的一種網(wǎng)站應(yīng)用程序框架,是使用“模型Model-視圖View-控制器Controller”設(shè)計(jì)模式構(gòu)建Web應(yīng)用和API的豐富框架。模型Model表示應(yīng)用程序特定方面的狀態(tài)。控制器Controller處理交互并更新模型以反映應(yīng)用程序狀態(tài)的更改,然后將信息傳遞給視圖Viewo視圖View接受來自控制器Controller的必要信息,并呈現(xiàn)用戶界面以顯示該信息。
3?以獲得服務(wù)器CPU負(fù)載為例的實(shí)現(xiàn)
頁面前端釆用JQuery的setlnterval()與$普.getJSON()方法。以10秒為間隔,不刷新頁面獲得所需參數(shù)。
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”])方法可按照指定的周期(以毫秒計(jì))來調(diào)用函數(shù)或計(jì)算表達(dá)式。setlnterval()方法會(huì)不停地調(diào)用函數(shù),直到clearlnterval()被調(diào)用或窗口被關(guān)閉。
2)jQuery.getJSON(url,data,success(data,status,xhr))通過HTTP GET請(qǐng)求載入JSON數(shù)據(jù)。
3.2?前端 HTML
DIV標(biāo)簽中的文本直接由Javascript讀取Json數(shù)據(jù)包不刷新頁面寫入。
3.3?后端MVC Control控制器
代碼釆用Visual Basic.NET調(diào)用系統(tǒng)PowerShell進(jìn)行遠(yuǎn)程控制。網(wǎng)站必須首先調(diào)用PowerShell模塊,才能在項(xiàng)目中運(yùn)行 PowerShell命令。在代碼上中首先調(diào)用如下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數(shù)據(jù)包給前端頁面JavaScript顯示。
3.4 遠(yuǎn)程獲得Windows和Ubuntu服務(wù)器CPU負(fù)載信息
3.4.1 創(chuàng)建PowerShell遠(yuǎn)程登錄Windows 2016憑證
遠(yuǎn)程服務(wù)器操作系統(tǒng)為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 服務(wù)器 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 執(zhí)行 Bash 命令獲得 Ubuntu 18.04服務(wù)器CPU信息
直到PowerShell 6.0,Microsoft才支持在Linux中直接運(yùn)行 PowerShell命令。PowerShell 5.1 則需要安裝第三方POSH-SSH 模塊,通過SSH協(xié)議在遠(yuǎn)程Linux執(zhí)行Bash命令,以獲得服務(wù)器
CPU負(fù)載信息。Ubuntu服務(wù)器需要安裝SSH Server服務(wù)。
POSH-SSH 中使用 New-SSHSession [-ComputerName] < string[]〉[-Credential]
1)配置本地訪問權(quán)限,調(diào)用第三方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 研究結(jié)論
方法優(yōu)點(diǎn):MVC網(wǎng)頁服務(wù)器通過運(yùn)行不同的Powershell和Bash命令就能對(duì)遠(yuǎn)程計(jì)算機(jī)(Windows、Linux、MacOS)進(jìn)行遠(yuǎn)程監(jiān)控。在強(qiáng)大的Jquery第三方圖像控件的支持下,可以圖形化數(shù)據(jù),使得遠(yuǎn)程服務(wù)器無須安裝額外軟件即可被監(jiān)控。
方法缺點(diǎn):無法實(shí)時(shí)監(jiān)控遠(yuǎn)程計(jì)算機(jī)信息。遠(yuǎn)程計(jì)算機(jī)的信息是通過PowerShell對(duì)遠(yuǎn)程計(jì)算機(jī)執(zhí)行命令所獲取。通過對(duì)虛擬機(jī)的觀察,當(dāng)對(duì)遠(yuǎn)程計(jì)算機(jī)命令執(zhí)行設(shè)置刷新時(shí)間為1秒時(shí),則遠(yuǎn)程服務(wù)器CPU負(fù)載將直接上升20%-30%,這個(gè)后果是不合適的。因此設(shè)置一個(gè)適當(dāng)?shù)拿钏⑿滤俣仁潜匾摹?/p>
發(fā)展方向:Microsoft公司已把PowerShell6.0開源,促使應(yīng)用能跨平臺(tái)使用。今后PowerShell將可以在Windows,Linux,MacOS服務(wù)器中發(fā)揮更大的作用。
參考文獻(xiàn):
[1] DonJones,JefferyHick.WindowsPowerShell實(shí)戰(zhàn)指南[M].宋沃劍,譯.北京:人民郵電出版社,2016.
[2] 朱育發(fā).jQuery與jQueryMobile開發(fā)完全技術(shù)寶典[M].北京:中國鐵道出版社,2014.
[3] AdamFreeman.精通ASP.NETMVC5[M].北京:人民郵電出版社,2016.
[通聯(lián)編輯:謝媛媛]