AD냐 아니냐에 따라서 실행해야 하는 바이너리가 달라져야 하는 경우가 있는데, 그걸 어떻게 구분해서 띄워주는걸 만드느냐고 타 부서 분이 말씀 하셔서 도와드리기로 결심을 했다.
결국은 레지스트리 키 값을 확인해서 각 각의 경우일때 다른게 실행되도록 하는 배치파일을 하나 만들었다.
뭐... 문제는, 내 PC는 AD가 아니어서 약 2시간여의 삽질끝에 레지스트리 키 값 비교해서 각각 다른 명령어가 실행되는 배치파일을 다 만들고 나서, AD이신 분 PC를 빌려서 실제 AD인경우 생성되는 레지스트리값을 살펴보니, 이게 키 값이 아니라 subkey에 찍혀 있는 거여서, 10분도 안되서 쉽게 만들 수 있는 거였다. 흑흑....
어쨌거나 스크랩 차원에서 만든 샘플을 공유한다.
1) 레지스트리 키에 특정 값이 있으면 A 명령어 실행,
그 값이 없으면 B 명령어 실행의 샘플 예제.
HKLM\Software\Acompany\Aprogram
여기에 "version"에 Reg_sz로 2.8.8.1 이면 최신 버전인 경우.
@echo off setlocal set key="HKLM\Software\Acompany\Aprogram" set value="version" for /f "tokens=2* skip=3" %%a in ('reg query %key% /v %value%') do ( set type=%%a set data=%%b ) echo %type% 정보는 %data:~-7%입니다. set key_v=%data:~-7% echo %key_v% if "%key_v%" EQU "2.8.8.1" echo 최신버전입니다 if "%key_v%" NEQ "2.8.8.1" echo 업데이트가 필요합니다 |
2) 그냥 레지스트리에 특정 subkey가 있느냐 없느냐에 따라 다른 명령어를 실행시키는 예제
AD인 경우는 살펴봤더니...
도메인이 company.com인 경우 아래와 같은 subkey가 생긴다.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ADs\Providers\LDAP\CN=Aggregate,CN=Schema,CN=Configuration,DC=company,DC=com]
하위에 "File", "Time", "ProcessAUX"등의 키값이 생겨있었다.
그럼 AD이냐 아니냐에 따라서 다른 명령어를 실행시키기 위해서는 다음과 같이 하면 된다.
@echo off reg query "HKLM\SOFTware\Microsoft\ADs\Providers\LDAP\CN=Aggregate,CN=Schema,CN=Configuration, DC=company,DC=com " if %ERRORLEVEL% EQU 1 goto notAD else goto AD :AD cls echo AD입니다 pause goto end :notAD cls echo AD가 아닙니다 pause goto end :end |
오늘 아침의 2시간 삽질 스크랩 끝.