Powershell

使用服務啟動執行 PowerShell 腳本

  • November 4, 2015

我想在服務程序啟動時設置它的AffinityPriority修改服務/程序程式碼,我擁有程式碼,它是第 3 方服務)。

我知道我可以做到:

$Process = Get-Process MyService $Process.ProcessorAffinity = 4

PowerShell中更改Affinity程序或在命令路徑前加上:

cmd.exe /c start "Some Process Name" /affinity 4

但是,這些都不適用每次啟動服務時自動更改服務程序的Affinity和/自己創建一個解決方案,而不是依賴另一個應用程序來“配置”視窗)。Priority

好的,我以@Art.Vandelay05 的評論為基礎,這是(恕我直言最直覺的)解決方案。

  1. 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 SchedulerCreate Task...(NOT Create Basic Task) 3. 正常選項卡

  • 檢查執行使用者是否登錄
  • 將使用者或組更改為您機器上的本地使用者
  1. 觸發器
  • 新的…
  • 啟用
  • 在事件上開始任務
  • 編輯事件過濾器
  • 使用一點XSLT來查找您的服務啟動的消息。我用了:

&lt;QueryList&gt; &lt;Query Id="0" Path="System"&gt; &lt;Select Path="System"&gt; *[EventData[Data[@Name="param1"] and (Data="<您的服務名稱> ")]] and *[EventData[Data[@Name="param2"] and (Data="running")]] &lt;/Select&gt; &lt;/Query&gt; &lt;/QueryList&gt;

  1. 行動
  • 操作啟動程序
  • 程序/腳本: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"

引用自:https://serverfault.com/questions/732851