Я хотел бы иметь запланированную задачу, которая выполняется как, SYSTEM
но запускается с помощью user action
и является on a delay
. Эта часть не кажется такой уж сложной.
Сложность в том, что я хочу, чтобы скрипт (PoSh), который запускается, мог определить, какой пользователь запустил задачу. Как мне это сделать?
Поскольку он находится на задержке, действие может быть уже не в игре. Поскольку задержки задач случайны (с максимальной задержкой), у меня нет определенного времени.
решение1
Запланированная задача, которая выполняется как СИСТЕМА, но запускается действием пользователя и выполняется с задержкой.
Поскольку вы используете случайную задержку, и это, похоже, проблематично по времени, вам следует просто использовать явную задержку для каждого события триггера. Таким образом, каждый триггер имеет свою собственную настройку для задержки.
Попробуйте приложенный 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
не дадут вам имя пользователя, вошедшего в систему и вызвавшего событие.
Как определить, какой пользователь запустил задачу?
Вам, вероятно, придется собирать данные изЖурналы безопасности Event Viewerво время выполнения, чтобы получить данные учетной записи пользователя, вошедшего в систему, сгенерировавшего событие, которое запускает задание планировщика задач, и включить это в логику 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