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