SYSTEM
として実行されるが、 によってトリガーされ、 であるuser action
スケジュールされたタスクが必要です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 を使用して計算して、日付と時刻が 1 時間を超えていること、および 1 時間の遅延条件ごとにスクリプトが実行される場合にのみ、日付と時刻が 1 時間を超えていることを確認できます。
ClownMan
Active
4/14/2021 7:46 AM