2012/08/10

우하하하~ 간만에 배치파일 만들기


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시간 삽질 스크랩  끝.
..