使用服務啟動執行 PowerShell 腳本
我想在服務程序啟動時設置它的
Affinity
和Priority
(不修改服務/程序程式碼,我不擁有程式碼,它是第 3 方服務)。我知道我可以做到:
$Process = Get-Process MyService $Process.ProcessorAffinity = 4
在PowerShell中更改
Affinity
程序或在命令路徑前加上:
cmd.exe /c start "Some Process Name" /affinity 4
但是,這些都不適用於每次啟動服務時自動更改服務程序的
Affinity
和/自己創建一個解決方案,而不是依賴另一個應用程序來“配置”視窗)。Priority
好的,我以@Art.Vandelay05 的評論為基礎,這是(恕我直言最直覺的)解決方案。
Script.ps1
使用以下行創建PowerShell 腳本:
$Process = Get-Process
< service_process_exe_name_WITHOUT_the_exe >
$Process.ProcessorAffinity =
< hex version of bit-code for processor affinity > 2. 轉到Administrative Tools/Task Scheduler
和Create Task...
(NOTCreate Basic Task
) 3. 正常選項卡
- 檢查執行使用者是否登錄
- 將使用者或組更改為您機器上的本地使用者
- 觸發器
- 新的…
- 啟用
- 在事件上開始任務
- 編輯事件過濾器
- 使用一點
XSLT
來查找您的服務啟動的消息。我用了:
<QueryList> <Query Id="0" Path="System"> <Select Path="System"> *[EventData[Data[@Name="param1"] and (Data="
<您的服務名稱>")]] and *[EventData[Data[@Name="param2"] and (Data="running")]] </Select> </Query> </QueryList>
- 行動
- 操作啟動程序
- 程序/腳本:PowerShell.exe
- 添加參數(可選):-File “path_to_script\Script.ps1”
就是這樣!現在,每次您的服務執行時,都會根據您編寫的 PowerShell 腳本設置關聯性。
編輯: 確保您的本地使用者擁有
Debug Programs
權限(管理工具/本地安全策略/使用者權限分配/調試程序/ 將您的本地使用者添加到此權限),否則您的使用者將無法更改程序的親和力。
看看這篇文章: http ://waynes-world-it.blogspot.ca/2009/06/processor-affinity-on-windows-server.html
如果您嘗試控制服務,則可以使用 instsrv/srvany 創建一個服務,該服務將 start 或 psexec 命令包裝在真實的服務二進製文件中。例如,下面的命令創建了另一個版本的假離線服務,它只在第一個處理器上執行。
instsrv Test c:\util\srvany.exe reg add hklm\system\currentcontrolset\services\test\Parameters reg add hklm\system\currentcontrolset\services\test\Parameters /v Application /t reg_sz /d cmd.exe reg add hklm\system\currentcontrolset\services\test\Parameters /v AppParameters /t reg_sz /d "/c start /affinity 1 C:\WINDOWS\system32\spoolsv.exe"