안녕하세요, Scripting Guy!

안녕하세요, Scripting Guy!

TechNet 칼럼에 오신 것을 환영합니다. 이 칼럼에는 Microsoft Scripting Guy가 해결한 시스템 관리 스크립팅과 관련하여 자주 물어보는 질문에 대한 답변이 나와 있습니다. 시스템 관리 스크립팅과 관련하여 질문이 있다면 scripter@microsoft.com으로 전자 메일을 보내 주십시오. 모든 질문에 답해 드릴 수는 없지만 최선을 다해 답변해 드리겠습니다.

안녕하세요, Scripting Guy! - Archive (영문)를 확인하는 것도 잊지 마십시오.

오늘의 질문: ADAM 설치 여부를 확인하는 방법은 무엇입니까?


ADAM 설치 여부를 확인하는 방법은 무엇입니까?

Q

안녕하세요, Scripting Guy! ADAM 설치 여부를 확인하는 방법은 무엇입니까?

-- 김갑동

A

김갑동님, 로널드 레이건 전 대통령이 "일단 신뢰하되, 검증하라(Trust but verify)"라는 명언을 남겼지만 이 말은 시스템 관리자가 하는 말이기도 합니다. "컴퓨터에 ADAM을 설치했다는 말을 신뢰하지만 설치 여부를 검증해야만 합니다. 이건 전혀 다른 문제입니다."

컴퓨터에 ADAM(Active Directory 응용 프로그램 모드 (영문))이 설치되어 있는지 확인할 수 있는 방법은 무엇일까요? 이제 방법을 제시해 드리겠습니다. 이 스크립트 솔루션은 레이건 전 대통령 덕분에 만들어졌다고 할 수 있겠습니다.

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery _
    ("Select * from Win32_Service where Name Like '%ADAM_%'")

If colServices.Count = 0 Then
    Wscript.Echo "ADAM is not installed."
Else
    For Each objService in colServices
        Wscript.Echo objService.Name & " -- " & objService.State
    Next
End If

이 스크립트는 ADAM이 서비스로 실행된다는 점에 착안한 것입니다. 스크립트가 ADAM 서비스 인스턴스를 찾으면 ADAM이 설치되어 있다는 것을 알 수 있습니다. 여기서 주의할 점이 있습니다. ADAM의 각 인스턴스는 서로 다른 이름의 별도 서비스로 실행됩니다. 다행히 ADAM 인스턴스가 설치되어 있는지 확인할 수 있는 쉬운 방법이 있습니다. 계속해서 설명할 내용은 바로 이 방법입니다.

스크립트는 로컬 컴퓨터에 있는 WMI 서비스에 연결하는 것으로 시작됩니다. 이전과 마찬가지로 strComputer 변수에 컴퓨터 이름을 지정하는 것으로 간단하게 스크립트가 원격 컴퓨터에서 동작하도록 수정할 수 있습니다. 그 다음 설명할 코드 행은 아래와 같습니다.

Set colServices = objWMIService.ExecQuery _
    ("Select * from Win32_Service where Name Like '%ADAM_%'")

이 코드의 역할은 Like 연산자를 사용하여 서비스 이름에 ADAM_ 문자가 있는 모든 서비스를 반환하는 것입니다. WMI의 LIKE 연산자를 사용할 때 백분율 기호 두 개는 "모든 문자"를 의미합니다. 즉, 이 쿼리는 "Name 속성에 **ADAM_**이라는 문자가 포함된 모든 서비스를 반환하십시오. ADAM_ 앞이나 뒤에 있는 문자는 상관없습니다. Name의 아무 곳에나 ADAM_ 문자열이 있으면 됩니다."라는 뜻입니다.

왜 이렇게 할까요? 앞서 설명한 것처럼 ADAM의 각 인스턴스는 별도의 서비스로 실행되지만 각 서비스 이름은 ADAM_이라는 문자로 시작합니다. 예를 들어 이름이 Fabrikam인 ADAM 인스턴스의 서비스 이름은 ADAM_Fabrikam이 되고 이름이 Contoso인 ADAM 인스턴스의 서비스 이름은 ADAM_Contoso가 됩니다. 이 두 인스턴스 및 Name에 ADAM_ 문자가 있는 다른 모든 서비스가 서비스 컬렉션의 일부로 반환되도록 쿼리를 구성했습니다.

참고 물론 "LIKE 연산자는 Windows XP와 Windows Server 2003에서만 지원되지 않습니까? 그렇다면 Windows 2000에서 ADAM을 실행하는 경우는 어떻게 합니까?"라는 의문이 생길 수 있습니다. 맞습니다. LIKE 연산자는 Windows XP와 Windows Server 2003에서만 지원됩니다. 하지만 ADAM 자체가 Windows XP와 Windows Server 2003에서만 지원되기 때문에 이것이 문제가 되지는 않습니다. Windows 2000에서는 ADAM을 실행할 수 없으므로 Windows 2000 컴퓨터에 ADAM이 설치되어 있는지 확인할 필요가 없습니다. 이 스크립트는 Windows XP 또는 Windows Server 2003 컴퓨터에서만 실행해야 합니다. ADAM을 사용할 때 이와 같은 컴퓨터를 쉽게 찾을 수 있으리라 믿습니다.

 

서비스 컬렉션을 검색한 후 If Then Else 블록을 실행합니다.

If colServices.Count = 0 Then
    Wscript.Echo "ADAM is not installed."
Else
    For Each objService in colServices
        Wscript.Echo objService.Name & " -- " & objService.State
    Next
End If

여기서 수행되는 작업은 반환된 컬렉션의 Count 속성이 0인지 확인하는 것입니다. Count로 컬렉션에 있는 항목 수를 알 수 있습니다. Count가 0이면 컬렉션에 항목이 없는 것입니다. 이것은 컴퓨터에 설치된 ADAM 인스턴스가 없다는 의미이고 해당 메시지를 출력합니다.

Count가 0보다 크면 적어도 하나 이상의 ADAM 인스턴스를 찾았다는 의미입니다. 이 경우에는 모든 ADAM 인스턴스를 처리하는 간단한 For Each 루프를 설정하여 각 인스턴스에 대해 인스턴스 Name과 State(실행 중, 중지, 일시 중지 등)를 출력합니다.

앞으로 해야 할 일은 이 스크립트를 실행하여 확인하는 것뿐입니다. 이것은 우리가 관리자를 신뢰하지 않는다는 의미일까요? 아닙니다. 신뢰하지만 스크립트가 실제로 동작하는지 검증하려는 것입니다. 그건 전혀 다른 문제이므로 이해할 수 있을 것입니다. 스크립트를 실행하여 결과를 확인하십시오.

 

자세한 정보

자세한 내용은 안녕하세요, Scripting Guy! - Archive (영문)를 참조하십시오.

페이지 위쪽페이지 위쪽