Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:如何使用指令碼降低處理序的優先順序?


如何使用指令碼降低處理序的優先順序?

嗨,Scripting Guy!我要如何使用指令碼降低處理序的優先順序?

-- HS

HS,您好。大家應該都知道,所有處理序在建立時,並非一視同仁,而是會指定優先順序值。高優先順序的處理序比低優先順序的處理序更常執行 (因此執行速度似乎較快)。譬如說,在系統處理序中執行的鍵盤與滑鼠就具有非常高的優先順序。不然每次敲擊鍵盤上的按鍵或移動滑鼠時,會發現有延遲的現象。

一般而言,多數處理序都以「標準」優先順序來執行,不快也不慢。這種機制運作得還不錯,不過,有時候您可能想要變更特定處理序的優先順序。例如,您可能想提高 X 處理序在夜間的優先順序,如此一來,就可以確保該處理序所執行的工作可以更快完成。反過來說,當 X 處理序在日間執行時,您可能想要降低其優先順序,這麼一來,此處理序便不會干擾正在電腦上執行的其他工作。以上是前情提要,實際開始變更處理序優先順序之前,顯然還有其他事項有待考量。但至少讓您對我們的主題有個概念。

假設您確定要變更處理程序的優先順序,可使用工作管理員輕鬆地完成這項工作,只要在處理序上按右鍵,選擇 [設定優先順序],然後設定以下其中一個可用選項:

 

處理序優先順序


很好,但是可以使用指令碼完成相同的工作嗎?

只要您執行的是 Windows XP 或 Windows Server 2003,答案是肯定的 (對 Windows 2000 的使用者很抱歉,沒辦法)。這是因為在這些 Windows 版本中有一個 WMI 類別 Win32_Process,其中包含稱為 SetPriority 的方法,可讓您修改執行中處理序的優先順序。例如,以下指令碼將 Notepad.exe 的優先順序設為「標準以下」:

Const BELOW_NORMAL = 16384

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcesses
    objProcess.SetPriority(BELOW_NORMAL) 
Next

指令碼一開始會定義稱為 BELOW_NORMAL 的常數,並將值設為 16384;跟您想的一樣,我們稍後會使用這個常數,將記事本的優先順序變更為「標準以下」。有什麼其他值可用來指定不同的處理序優先順序嗎?當然有:

優先順序類別
標準32
64
即時128
256
標準以下16384
標準以上32768

建立常數之後,指令碼會連接到 WMI 服務,然後使用以下這行程式碼來擷取包含名稱 Notepad.exe 的所有處理序集合:

Set colProcesses = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'Notepad.exe'")

待集合傳回後,就只需使用 For Each 迴圈來循環 Notepad.exe 的所有執行個體 (在這個指令碼中,我們假設只有一個執行個體,但是萬一有多個執行個體,則全都要設為「標準以下」優先順序)。我們在該迴圈內呼叫 SetPriority 方法,將 BELOW_NORMAL 常數傳遞給唯一參數:

objProcess.SetPriority(BELOW_NORMAL)

只要查看 Notepad.exe 的優先順序 (使用指令碼或工作管理員),就會看到其優先順序為「標準以下」。

提醒您:在檔案伺服器上實際執行此指令碼之前,請考慮先在測試機器上嘗試各種優先順序。將記事本的優先順序變更成「標準以下」應該沒有大礙,但是將資料庫應用程式的優先順序變更成「標準以下」可能會造成使用者的困擾。同樣地,我們也不建議您將任何處理序的優先順序設為「即時」,這麼做的話,該處理序很可能會吞食所有系統資源,甚至阻止其他處理序 (包括重要的作業系統功能) 執行。這是好鄰居 Scripting Guys 給您的實用小叮嚀!


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首