PowerShell 2.0 实践(四)管理Windows进程
上一次我們對Windows服務(wù)進(jìn)行了簡單的管理,學(xué)習(xí)了獲取本地及遠(yuǎn)程計算機(jī)上服務(wù)的方法,以及查找特定服務(wù),開始、結(jié)束、暫停、恢復(fù)服務(wù)等操作。本次我們來關(guān)注一下Windows管理中另一個核心內(nèi)容:進(jìn)程管理。
測試腳本下載
本系列所有腳本均在Windows Server 2008 R2 DataCenter (PowerShell 2.0) + PowerGUI Script Editor Free Edition x64中測試通過。
進(jìn)程是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ),是一個正在執(zhí)行的程序,是計算機(jī)中正在運(yùn)行的程序?qū)嵗?#xff0c;可以分配給處理器并由處理器執(zhí)行的一個實體。由單一順序的執(zhí)行顯示,是一個由當(dāng)前狀態(tài)和一組相關(guān)的系統(tǒng)資源所描述的活動單元。
PowerShell中與進(jìn)程相關(guān)的命令主要有5個:
Get-Process
Start-Process
Stop-Process
Debug-Process
Wait-Process
首先來查看一下進(jìn)程對象的成員:
Get-Process | Get-Member
運(yùn)行結(jié)果:
可以看到,Get-Process返回的是.NET對象System.Diagnostics.Process的實例,其中有5個別名非常重要:
Handles | 進(jìn)程打開的句柄數(shù) |
NPM | 進(jìn)程正在使用的非分頁內(nèi)存量,以千字節(jié)為單位 |
PM | 進(jìn)程正在使用的可分頁的內(nèi)存量,以千字節(jié)為單位 |
VM | 進(jìn)程正在使用的虛擬內(nèi)存量,以兆字節(jié)為單位。虛擬內(nèi)存包括磁盤上分頁文件中的存儲 |
WS | 進(jìn)程工作集的大小,以千字節(jié)為單位。工作集包括進(jìn)程最近引用的內(nèi)存的頁面 |
查看占用分頁內(nèi)存最多的前10個進(jìn)程:
Get-Process | SortPM-Descending | Select-First 10
運(yùn)行結(jié)果:
獲取所有占用 > 50 MB的進(jìn)程,并倒排序:
Get-Process | Where {$_.WS -gt 50MB} | SortWS–Descending
運(yùn)行結(jié)果:
在PowerShell 2.0中,還可以查看遠(yuǎn)程計算機(jī)上的進(jìn)程。
如下圖所示,虛擬機(jī)中計算機(jī)的IP為:192.168.200.132:
Get-Process-ComputerName192.168.200.132
運(yùn)行結(jié)果:
開啟一個進(jìn)程。在PowerShell 2.0中,可以在本地計算機(jī)上使用Start-Process來啟動一個進(jìn)程:
Start-Processiexplore.exe
Start-Process只能用于本地計算機(jī)。
運(yùn)行結(jié)果:
注意,默認(rèn)會啟動32位的程序,如果想啟動64位的程序,需要添加-FilePath參數(shù),指明64位程序所在位置:
Start-Process-FilePath"C:\Program Files\Internet Explorer\iexplore.exe"
運(yùn)行結(jié)果:
結(jié)束進(jìn)程。
首先啟動一個記事本進(jìn)程,并記錄下來,接著線程休眠3秒,然后結(jié)束該進(jìn)程:
$notepad= [System.Diagnostics.Process]::Start("notepad")
[System.Threading.Thread]::Sleep(3000)
Stop-Process-Id$notepad.Id
運(yùn)行結(jié)果:
3秒后記事本會自動關(guān)閉。
4、獲取Word進(jìn)程所在的目錄信息:
(Get-ProcessWINWORD).MainModule
運(yùn)行結(jié)果:
獲取Excel進(jìn)程依賴的庫信息
Start-ProcessEXCEL
(Get-ProcessEXCEL).Modules
Stop-Process-NameEXCEL
運(yùn)行結(jié)果:
獲取進(jìn)程的元數(shù)據(jù):
Get-Process | Select Company,Product,ProductVersion
運(yùn)行結(jié)果:
Google Chrome的版本號居然沒有被正確識別J
設(shè)置進(jìn)程優(yōu)先級:
每個進(jìn)程都有相應(yīng)的優(yōu)先級,優(yōu)先級決定它何時運(yùn)行和接收多少 CPU 時間。最終的優(yōu)先級共 32 級,是從 0 到 31 的數(shù)值,稱為基本優(yōu)先級別(Base Priority Level)。系統(tǒng)按照不同的優(yōu)先級調(diào)度進(jìn)程的運(yùn)行,0-15 級是普通優(yōu)先級,進(jìn)程的優(yōu)先級可以動態(tài)變化,高優(yōu)先級進(jìn)程優(yōu)先運(yùn)行,只有高優(yōu)先級進(jìn)程不運(yùn)行時,才調(diào)度低優(yōu)先級進(jìn)程運(yùn)行,優(yōu)先級相同的進(jìn)程按照時間片輪流運(yùn)行。16-31 級是實時優(yōu)先級,實時優(yōu)先級與普通優(yōu)先級的最大區(qū)別在于相同優(yōu)先級進(jìn)程的運(yùn)行不按照時間片輪轉(zhuǎn),而是先運(yùn)行的進(jìn)程就先控制 CPU,如果它不主動放棄控制,同級或低優(yōu)先級的進(jìn)程就無法運(yùn)行。
可由PriorityClass屬性讀寫,有效值列表:Normal, Idle, High, RealTime, BelowNormal, AboveNormal。
$process=Get-ProcessWINWORD
Write-Host$process.PriorityClass
$process.PriorityClass="High"
Write-Host$process.PriorityClass
運(yùn)行結(jié)果:
可見,Word的優(yōu)先級由Normal變?yōu)榱薍igh。
5、調(diào)試進(jìn)程:
Debug-Process-NameWINWORD
會彈出提示窗口選擇調(diào)試器:
等待進(jìn)程結(jié)束
Wait-Process-Namenotepad
腳本輸入窗口會一直等待,直到該進(jìn)程結(jié)束后才可以繼續(xù)輸入:
關(guān)閉記事本窗口后:
小結(jié):
本次對Windows進(jìn)程進(jìn)行了簡單的管理操作,相比Windows服務(wù)來說進(jìn)程管理略顯單一,主要是查看進(jìn)程與設(shè)置進(jìn)程優(yōu)先級,但是重要性是一樣的。進(jìn)程和服務(wù)是Windows的基礎(chǔ)功能,維系著運(yùn)行的程序,如果設(shè)置不當(dāng)可能會引起系統(tǒng)不穩(wěn)定。此外,PowerShell 2.0增強(qiáng)了遠(yuǎn)程處理能力,方便了遠(yuǎn)程管理操作。下一次我們來關(guān)注一下注冊表的相關(guān)操作。
轉(zhuǎn)載于:https://blog.51cto.com/jiangjianguo/1200155
總結(jié)
以上是生活随笔為你收集整理的PowerShell 2.0 实践(四)管理Windows进程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codeigniter中创建自己的类库
- 下一篇: 对象方法Android之多媒体使用——M