어떤 사용자가 작업을 실행했는지 식별하는 방법은 무엇입니까?

어떤 사용자가 작업을 실행했는지 식별하는 방법은 무엇입니까?

SYSTEM다음으로 실행 되지만 a user 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

추가 파워셸

(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시간보다 큰지 확인하고 시간 지연 조건에 따라 스크립트를 실행하는 경우에만 사용할 수 있습니다.

ClownMan
Active
4/14/2021 7:46 AM

추가 리소스

관련 정보