
작업 스케줄러에는 배치 파일을 실행하는 SYSTEM 계정을 사용하는 작업이 있습니다. 사용자(관리자가 아닌)에게 작업을 실행하는 다른 배치 파일이 있습니다. 사용자 배치는 작업 배치에서 사용할 수 있는 변수를 어떻게 설정할 수 있나요?
답변1
작업 스케줄러에서 실행될 배치 스크립트에서 변수 값을 동적으로 설정합니다.
귀하가 다음 사항을 명확하고 확인했기 때문에:
- 배치 스크립트에 변수 값이 필요합니다.작업 스케줄러
SYSTEM
로그인 스크립트를 실행하는 사용자의 SID와 일치하는 값으로 설정되도록 실행됩니다.- 스크립트 위치에 대해 컴퓨터당 로컬 파일 경로를 사용할 수 있습니다.작업 스케줄러실행됩니다
- 이 스크립트를 실행할 동일한 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):
필드를 공백으로 두거나 아무것도 입력하지 않고 비워두세요(아래 스크린샷).