1편에서 이어집니다.
HKEY_LOCAL_USERS의 레지스트리 변경을 위해서는 스케줄러에서 작업을 실행할 유저는 실제 사용자의 계정으로 등록을 해야 한다는 사실을 알았다. 그러면 이것을 GPO로 구현하려면?
%username%과 같은 변수를 사용해? 어떻게 해야 하지? 여기서 난관이 생겼다.
해당 사항은 아무리 찾아도 구글에 나오지 않는다. 내가 스스로 아이디어를 고안해야 한다.
결론적으로 도메인 사용자 계정은 자기자신의 PC에 대해서 Admin 권한을 갖게 하기 위해 Local의 Administrators의 Member 로서 도메인 유저 계정이 들어 있는 것을 확인하였고
실행계정을 Builtin\Administrators로 해 두고 실행을 하였더니 성공했다!
하지만, 또 다른 문제, 작업이 수행되는 특정 시점에 사용자가 로그온을 하지 않고 있다면 작업이 수행이 될까? 그보다 근본적으로 사용자가 로그온을 하지 않고 있을 때, HKEY_CURRENT_USER는 어떤 값이 담기게 될까?
실험 : echo %username% >> c:\c.txt
regedit /e c:\abc.txt "HKEY_CURRENT_USER"
결과값 : c.txt도 생기지 않았다. 우선 작업 자체가 실행을 못한듯, 실행 결과값은 0x41325이다. 사용자 그룹으로 실행을 유도하니 어떤 사용자가 실행해야 할지 못해서 실행 자체가 돌지 않은 것으로 추정된다.
추가로 확인된 사항 : 빌트인 계정으로 작업 실행을 선택하면, 임의로 사용자가 로그온 할 때 실행 / 로그온 여부에 관계 없이 실행을 선택할 수가 없다!
Administators로 선택하면 사용자가 '로그온할때만 실행'에 체크 되고 비활성화(grayed out)되어있다.
반면 SYSTEM으로 선택하면 '사용자의 로그온 여부에 관계없이 실행'에 체크되고 비활성화 되어 있다.
즉, Administrators로 설정시 반!드!시! interactive로 작업이 실행된다는 의미이고 SYSTEM으로 설정시 반드시 백그라운드에서 작업이 실행된다는 의미이다.
즉, task scheduler 설정에 주의할 점은
interaction이 필요한 경우 Run whether user is logged on or not의 옵션을 선택한 경우 제대로 동작하지 않는다는 것이다. 그런 경우 반드시 사용자가 로그온할때만 실행하는 옵션을 해야 정상 동작한다. (오토핫키 작업등록시 제대로 동작하지 않아서 고민했던 부분이다.)
또한 mapped drive의 drive letter를 경로로 하는 스크립트 사용을 자제 해야 한다는 것이다. task scheduler는 사용자의 net use세팅을 알지 못한다. 따라서 내 스크립트가 내가 실행하면 잘돌아도 작업 스케줄러로 잘 동작하지 않을 수도 있다.
자세한 것은 여기서 확인하자
Please note that if you select the option "Run whether user is logged on or not", tasks will not run interactively. For example, you created a task to launch notepad.exe and it wouldn't run. Because notepad.exe needs user interaction and that lead to task failure. What is the end goal of your task? Is it interactive?
Furthermore, check the permission. The user account you select for your program must have permission not only to run your program itself and but also to run all other program that related to your program. If the script involves a mapped drive, try use the full path name such as: \\servername\foldername.
이제 마지막 HKEY_USERS를 자동으로 설정하게 하는 마무리이다. Administrators로 수행하기 위해 반드시 이 작업은 사용자가 로그온 할때만 실행 되어야 한다. 그래서 트리거를 예정된 시간에 수행할 수 없다. 왜냐하면 사용자의 로그온 여부에 따라 작업이 수행되지 않을 수도 있기 때문이다.
가장 좋은 방법은 사용자가 로그온 할때 이 작업을 수행하는 것이다. 여기서 트리거 탭에서 예약상태가 아닌 로그온 할 때를 선택한다. 로그온 할때를 선택하면 모든 사용자와 특정 사용자가 있다. 혹시나 스마트하게 설정하고 싶어서 Specific user or group에 %LogonDomain%\%Logonuser%로 설정했다. 안된다.
그냥 Any user로 설정했다. 동작한다.
드디어 일주일간 고심했던 긴 여정이 끝나는 순간이었다. 이게 엔지니어다.
어떻게든 방법을 찾아낸다.
HKEY_CURRENT_USER의 레지스트리를 GPO로 내리는 것은 다음이 필요하다.
1. 사용자계정이 Local Administrators소속이어야 한다.
2. GPO작업스케줄러에 Administrators 계정으로 실행 시켜야 한다.(이 설정은 사용자가 로그온 할때만 실행됨)
3. 트리거를 사용자 아무나 로그온 할때로 설정해야 함.
긴 삽질을 통해 느낀점
1. 더이상 내가 찾는 자료가 구글에 없을 수 있다. 최대한 되게끔 하는 아이디어를 고민하고 창의력을 발휘하여 방법을 찾아내야 한다.
2. 자료가 없으면 무식한 실험을 해야한다. 수많은 옵션들의 경우의 수를 일일이 적용시켜가며 도출되는 결과값을 숙지해야 할 필요가 있다. 반복하다보면 실험 자체를 효율적으로 하는 방법까지 찾을 수 있다.
3. 과거 고집을 버리자. 반드시 사용자가 로그온 하지 않을 때 이 설정을 실행시키고 싶다거나, 사용자 SID값을 찾아내어 그것을 변수로 값을 쓴다는 등의 방법은 결론적으로 사용자 로그온시 USERS 레지스트리가 활성화 된다는 대 전제조건이 배제된 것이므로 삽질로 시간만 버리게 된 것이었다. 방법이 안 보일때는 한 발치 뒤로 물러서 전혀 다른 방법을 고안해야 할 필요가 있다. 늘 하던 방법에 얽매여 있으면 그만큼 새로운 아이디어를 찾는데 어려움이 찾아온다.
HKEY_LOCAL_USERS의 레지스트리 변경을 위해서는 스케줄러에서 작업을 실행할 유저는 실제 사용자의 계정으로 등록을 해야 한다는 사실을 알았다. 그러면 이것을 GPO로 구현하려면?
%username%과 같은 변수를 사용해? 어떻게 해야 하지? 여기서 난관이 생겼다.
해당 사항은 아무리 찾아도 구글에 나오지 않는다. 내가 스스로 아이디어를 고안해야 한다.
결론적으로 도메인 사용자 계정은 자기자신의 PC에 대해서 Admin 권한을 갖게 하기 위해 Local의 Administrators의 Member 로서 도메인 유저 계정이 들어 있는 것을 확인하였고
실행계정을 Builtin\Administrators로 해 두고 실행을 하였더니 성공했다!
하지만, 또 다른 문제, 작업이 수행되는 특정 시점에 사용자가 로그온을 하지 않고 있다면 작업이 수행이 될까? 그보다 근본적으로 사용자가 로그온을 하지 않고 있을 때, HKEY_CURRENT_USER는 어떤 값이 담기게 될까?
실험 : echo %username% >> c:\c.txt
regedit /e c:\abc.txt "HKEY_CURRENT_USER"
결과값 : c.txt도 생기지 않았다. 우선 작업 자체가 실행을 못한듯, 실행 결과값은 0x41325이다. 사용자 그룹으로 실행을 유도하니 어떤 사용자가 실행해야 할지 못해서 실행 자체가 돌지 않은 것으로 추정된다.
추가로 확인된 사항 : 빌트인 계정으로 작업 실행을 선택하면, 임의로 사용자가 로그온 할 때 실행 / 로그온 여부에 관계 없이 실행을 선택할 수가 없다!
Administators로 선택하면 사용자가 '로그온할때만 실행'에 체크 되고 비활성화(grayed out)되어있다.
반면 SYSTEM으로 선택하면 '사용자의 로그온 여부에 관계없이 실행'에 체크되고 비활성화 되어 있다.
즉, Administrators로 설정시 반!드!시! interactive로 작업이 실행된다는 의미이고 SYSTEM으로 설정시 반드시 백그라운드에서 작업이 실행된다는 의미이다.
즉, task scheduler 설정에 주의할 점은
interaction이 필요한 경우 Run whether user is logged on or not의 옵션을 선택한 경우 제대로 동작하지 않는다는 것이다. 그런 경우 반드시 사용자가 로그온할때만 실행하는 옵션을 해야 정상 동작한다. (오토핫키 작업등록시 제대로 동작하지 않아서 고민했던 부분이다.)
또한 mapped drive의 drive letter를 경로로 하는 스크립트 사용을 자제 해야 한다는 것이다. task scheduler는 사용자의 net use세팅을 알지 못한다. 따라서 내 스크립트가 내가 실행하면 잘돌아도 작업 스케줄러로 잘 동작하지 않을 수도 있다.
자세한 것은 여기서 확인하자
Please note that if you select the option "Run whether user is logged on or not", tasks will not run interactively. For example, you created a task to launch notepad.exe and it wouldn't run. Because notepad.exe needs user interaction and that lead to task failure. What is the end goal of your task? Is it interactive?
Furthermore, check the permission. The user account you select for your program must have permission not only to run your program itself and but also to run all other program that related to your program. If the script involves a mapped drive, try use the full path name such as: \\servername\foldername.
이제 마지막 HKEY_USERS를 자동으로 설정하게 하는 마무리이다. Administrators로 수행하기 위해 반드시 이 작업은 사용자가 로그온 할때만 실행 되어야 한다. 그래서 트리거를 예정된 시간에 수행할 수 없다. 왜냐하면 사용자의 로그온 여부에 따라 작업이 수행되지 않을 수도 있기 때문이다.
가장 좋은 방법은 사용자가 로그온 할때 이 작업을 수행하는 것이다. 여기서 트리거 탭에서 예약상태가 아닌 로그온 할 때를 선택한다. 로그온 할때를 선택하면 모든 사용자와 특정 사용자가 있다. 혹시나 스마트하게 설정하고 싶어서 Specific user or group에 %LogonDomain%\%Logonuser%로 설정했다. 안된다.
그냥 Any user로 설정했다. 동작한다.
드디어 일주일간 고심했던 긴 여정이 끝나는 순간이었다. 이게 엔지니어다.
어떻게든 방법을 찾아낸다.
HKEY_CURRENT_USER의 레지스트리를 GPO로 내리는 것은 다음이 필요하다.
1. 사용자계정이 Local Administrators소속이어야 한다.
2. GPO작업스케줄러에 Administrators 계정으로 실행 시켜야 한다.(이 설정은 사용자가 로그온 할때만 실행됨)
3. 트리거를 사용자 아무나 로그온 할때로 설정해야 함.
긴 삽질을 통해 느낀점
1. 더이상 내가 찾는 자료가 구글에 없을 수 있다. 최대한 되게끔 하는 아이디어를 고민하고 창의력을 발휘하여 방법을 찾아내야 한다.
2. 자료가 없으면 무식한 실험을 해야한다. 수많은 옵션들의 경우의 수를 일일이 적용시켜가며 도출되는 결과값을 숙지해야 할 필요가 있다. 반복하다보면 실험 자체를 효율적으로 하는 방법까지 찾을 수 있다.
3. 과거 고집을 버리자. 반드시 사용자가 로그온 하지 않을 때 이 설정을 실행시키고 싶다거나, 사용자 SID값을 찾아내어 그것을 변수로 값을 쓴다는 등의 방법은 결론적으로 사용자 로그온시 USERS 레지스트리가 활성화 된다는 대 전제조건이 배제된 것이므로 삽질로 시간만 버리게 된 것이었다. 방법이 안 보일때는 한 발치 뒤로 물러서 전혀 다른 방법을 고안해야 할 필요가 있다. 늘 하던 방법에 얽매여 있으면 그만큼 새로운 아이디어를 찾는데 어려움이 찾아온다.
'OS > Windows' 카테고리의 다른 글
| [BATCH] 특정 프로세스가 실행되는지 여부로 스크립트 조건문 분기 (0) | 2019.11.15 |
|---|---|
| Windows 10에서 Adobe Flash Player 업데이트 (0) | 2019.05.23 |
| HKEY_USERS와 Task Scheduler (0) | 2019.05.23 |
| 집구석 Win10 재설치 개삽질기 (0) | 2019.05.09 |
| WSUS IIS Manager에서 Bindings 8531(SSL) 제거 후 오류발생 이슈 해결 (0) | 2018.11.09 |

