我想要一個運行為SYSTEM
但由 auser action
和 is觸發的計劃任務on a delay
。這部分看起來並不難。
困難的部分是我希望執行的 (PoSh) 腳本能夠識別哪個使用者觸發了任務。我該怎麼做呢?
由於有延遲,該動作可能不再進行。由於任務延遲是隨機的(有最大延遲),所以我沒有特定的時間。
答案1
作為 SYSTEM 運行但由使用者操作觸發且存在延遲的計劃任務。
由於您使用的是隨機延遲,而且每次計時似乎都很麻煩,因此您應該為每個觸發事件使用明確延遲。每個觸發器都有自己的延遲設定。
嘗試XML
從我在我這邊的系統上設定的作業中附加的導出進行一些更改,以掩蓋真實的腳本和進程名稱。
您可以匯入它,然後查看所有設定和配置,以了解所有設定的設定、進行調整等。
任務計劃程序作業 - XML 匯出
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2019-12-10T13:30:30.3849335</Date>
<Author>Administrator</Author>
<URI>\Kill Daemon</URI>
</RegistrationInfo>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
</Settings>
<Triggers>
<LogonTrigger>
<Delay>PT10S</Delay>
</LogonTrigger>
<SessionStateChangeTrigger>
<Delay>PT10S</Delay>
<StateChange>RemoteConnect</StateChange>
</SessionStateChangeTrigger>
<SessionStateChangeTrigger>
<Delay>PT10S</Delay>
<StateChange>ConsoleConnect</StateChange>
</SessionStateChangeTrigger>
</Triggers>
<Actions Context="Author">
<Exec>
<Command>Powershell</Command>
<Arguments>-ExecutionPolicy Bypass -File "C:\process\killit.ps1"</Arguments>
<WorkingDirectory>C:\process</WorkingDirectory>
</Exec>
</Actions>
</Task>
我希望執行的 (PoSh) 腳本能夠識別哪個使用者觸發了任務
由於任務的觸發器是事件,而不是使用者點擊腳本來執行排程任務,因此執行的 PoSH 腳本無法根據執行它的事件來判斷登入的使用者。
這意味著進行簡單的日誌記錄和使用$env:username
不會為您提供導致事件發生的登入使用者名稱。
如何辨識哪個使用者觸發了任務?
您可能必須從以下位置捕獲數據事件檢視器安全日誌在執行時獲取登入的使用者帳戶詳細信息,產生觸發任務計劃程序作業的事件,並將其合併到 PoSH 邏輯中以保存日誌等。
您也許能夠執行該quser
命令並記錄活動會話使用者名,並以這種方式按照 PoSH 邏輯進行記錄。
quser 範例輸出
C:\Users\ClownMan>quser
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
>ClownMan console 1 Active none 4/14/2021 7:46 AM
額外的 PowerShell
(quser)[1].Split("").Where({$_.Trim() -ne ""})[0] -join " " -replace ">";
(quser)[1].Split("").Where({$_.Trim() -ne ""})[3];
(quser)[1].Split("").Where({$_.Trim() -ne ""})[5..7] -join " ";
範例輸出
筆記: 使用這些值,您可以取得活動使用者帳戶的名稱,然後使用 PowerShell 進行計算,以確保日期和時間大於一小時,並且僅當要按小時延遲條件執行腳本時。
ClownMan
Active
4/14/2021 7:46 AM