예약된 작업에 인수를 어떻게 전달할 수 있나요?

예약된 작업에 인수를 어떻게 전달할 수 있나요?

작업 스케줄러에는 배치 파일을 실행하는 SYSTEM 계정을 사용하는 작업이 있습니다. 사용자(관리자가 아닌)에게 작업을 실행하는 다른 배치 파일이 있습니다. 사용자 배치는 작업 배치에서 사용할 수 있는 변수를 어떻게 설정할 수 있나요?

답변1

작업 스케줄러에서 실행될 배치 스크립트에서 변수 값을 동적으로 설정합니다.

귀하가 다음 사항을 명확하고 확인했기 때문에:

  1. 배치 스크립트에 변수 값이 필요합니다.작업 스케줄러SYSTEM로그인 스크립트를 실행하는 사용자의 SID와 일치하는 값으로 설정되도록 실행됩니다.
  2. 스크립트 위치에 대해 컴퓨터당 로컬 파일 경로를 사용할 수 있습니다.작업 스케줄러실행됩니다
  3. 이 스크립트를 실행할 동일한 OS에 동시에 로그인하는 사용자는 두 명 이상일 수 없습니다.

나는 제안된 접근 방식에 대해 더 자세히 설명하면서 이 솔루션을 별도의 답변으로 작성했습니다.

다음 사항을 확인해야 합니다.

  • 상관 확인 예약된 작업배치 스크립트를 로컬로 실행할 각 시스템에 이름이 설정됩니다.
  • 각각의 상관관계를 확인하세요.예약된 작업실행되는 각 시스템에서 schtasks모두 동일한 표준 배치 스크립트 경로와 파일 이름을 가리킵니다.

일괄 [로그인] 스크립트 예시

이에 대해 이미 설정한 논리를 재사용했지만 몇 가지 변수와 조건을 추가했습니다.만약에로컬 컴퓨터의 로컬 폴더를 배치 스크립트가 아직 존재하지 않는 경우 배치 스크립트로 만드는 논리삭제실행 시 생성되므로 해당 폴더에 배치 파일이 이미 존재하는 경우 해당 폴더에 배치 파일을 추가합니다.

기본적으로 이는 실행될 때마다(로그인 시) 동적 배치 스크립트를 생성합니다. 생성된 배치 스크립트에는 Reg Add로그인 시 로그인 스크립트가 실행된 사용자의 SID 부분 값이 포함된 논리와 명령이 포함됩니다. 그래서 언제작업 스케줄러스크립트를 실행하면 로그인/스크립트 실행마다 스크립트에 항상 필요한 값이 추가되도록 합니다.

@ECHO ON

SET LocalDir=C:\localfolder
SET TaskScript=TaskScript.cmd

IF NOT EXIST "%LocalDir%" MD "%LocalDir%"
IF EXIST "%LocalDir%\%TaskScript%" DEL /Q /F "%LocalDir%\%TaskScript%"

for /f "tokens=2" %%i in ('whoami /user /fo table /nh') do set usersid=%%i

ECHO reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usersid%" /v "State" /t REG_DWORD /d 128 /f>>"%LocalDir%\%TaskScript%"

schtasks /run /tn "My Profile Changer"

예약된 작업

에 실행하라고 지시한 작업 schtasks(예: )이 및 변수 값 "My Profile Changer"에 대해 로그인 배치 스크립트에 지정한 것과 동일한 전체 경로를 가리키는지 확인하기만 하면 됩니다.SET LocalDir=SET TaskScript=

따라서 로그인 스크립트 변수가 동일하면 C:\localfolder\TaskScript.cmd이는 필드 Program/Script가 가리킬 값과 동일합니다. 또한 필드 SET LocalDir=에 변수 값을 입력하는 것이 좋지만 Start in (optional):인수를 추가할 필요가 없으므로 Add Arguments (optional):필드를 공백으로 두거나 아무것도 입력하지 않고 비워두세요(아래 스크린샷).

여기에 이미지 설명을 입력하세요


추가 리소스

관련 정보