안녕하세요, Scripting Guy! - 특정 IP 주소 범위에 대해 스크립트를 실행하려면 어떻게 합니까?


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

오늘의 질문: 특정 IP 주소 범위에 대해 스크립트를 실행하려면 어떻게 합니까?


특정 IP 주소 범위에 대해 스크립트를 실행하려면 어떻게 합니까?

Q 안녕하세요, Scripting Guy! 서브넷에 있는 모든 컴퓨터에 대해 스크립트를 실행하고 싶은데 스크립트에 모든 IP 주소를 직접 입력하지 않고도 이 작업을 할 수 있을까요?

-- 병섭
A
병섭님, 전자 메일로 문의하신 내용을 보니 해당 서브넷의 IP 주소 범위가 192.168.1.1에서 192.168.1.254 사이인 것 같습니다. 즉, 병섭님은 첫 번째 IP 주소로 시작하여 해당 컴퓨터에서 특정 코드를 실행한 다음 두 번째 주소로 이동하여 동일한 코드를 실행하는 과정을 모든 컴퓨터에 대해 반복하는 스크립트가 필요합니다. 또한 수백 개의 IP 주소를 직접 입력할 필요 없이 가능한 짧은 코드를 사용해서 이 작업을 수행하고 싶습니다.

사실 이러한 스크립트는 생각보다 쉽게 만들 수 있습니다.

먼저 특정 범위의 IP 주소를 순환하는 방법에 대해 설명하겠습니다. 아래 샘플 코드는 단지 각각의 IP 주소 이름을 출력합니다. 이 스크립트의 작동 방법에 대해 설명한 다음 보다 실제적인 예를 보여 드리겠습니다.
On Error Resume Next
intStartingAddress = 1
intEndingAddress = 254
strSubnet = "192.168.1."
For i = intStartingAddress to intEndingAddress
    strComputer = strSubnet & i
    Wscript.Echo strComputer
Next

보시다시피 간단한 코드입니다. 먼저 변수를 지정합니다. intStartingAddress에는 값 1이, intEndingAddress에는 값 254가, strSubnet에는 192.168.1.(1 뒤의 마침표에 주의)이할당됩니다. 짐작하셨겠지만 이 값들은 IP 주소를 만드는 데 사용됩니다.

변수를 지정한 후에는 1(intStartingAddress)부터 254(intEndingAddress)까지 실행되는 For-Next 루프를 작성합니다. 1부터 254까지인 이유는 IP 주소 범위가 이 IP 범위이기 때문입니다. 예를 들어 IP 범위가 192.168.1.7부터 109.168.1.54까지인 경우 동일한 루프를 사용하지만 intStartingAddress의 값을 7로 변경하고 intEndingAddress의 값을 54로 변경하면 됩니다.

루프 안에서 문자열 값 192.168.1.에 루프 변수의 현재 값인 (i)가 결합됩니다. 루프를 처음 실행하면 i는 1이 되고 192.168.1.에 1이 결합됩니다. 즉, 192.168.1.1이 첫 번째 IP 주소가 됩니다. 루프의 마지막에서 192.168.1.254가 결합되어 마지막 IP 주소는 192.168.1.254가 됩니다. 이 스크립트를 실행하면 결과는 다음과 같습니다.

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

아주 간단하죠?

여러 IP 주소의 출력 이외에 일부 WMI 코드를 대신 실행하고 싶은 경우 다음과 같이 할 수 있습니다.

On Error Resume Next
intStartingAddress = 1
intEndingAddress = 254
strSubnet = "192.168.1."
For i = intStartingAddress to intEndingAddress
    strComputer = strSubnet & i
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
        ("Select * From Win32_OperatingSystem")
    For Each objItem in ColItems
        Wscript.Echo strComputer & ": " & objItem.Caption
    Next
Next

보시다시피 IP 주소에 다시 strComputer 변수 값을 설정한 후 해당 주소가 나타내는 컴퓨터의 WMI 서비스에 연결합니다. WMI에서 컴퓨터에 연결할 때는 컴퓨터 이름과 IP 주소를 모두 사용할 수 있으므로 간단하게 이 방법을 사용할 수 있습니다.

이제 약간 살을 붙여 보겠습니다. 라우터나 기타 용도로 사용되기 때문에 제외하고 싶은 IP 주소가 있는 경우 다음과 같이 Select Case 문을 사용하여 특정 컴퓨터를 제외하도록 스크립트를 수정할 수 있습니다.

intEndingAddress = 254
strSubnet = "192.168.1."
For i = intStartingAddress to intEndingAddress
    Select Case i
        Case 10
        Case 50
        Case 100
        Case Else
            strComputer = strSubnet & i
            Set objWMIService = GetObject _
                ("winmgmts:\\" & strComputer & "\root\cimv2")
            Set colItems = objWMIService.ExecQuery _
                ("Select * From Win32_OperatingSystem")
            For Each objItem in ColItems
                Wscript.Echo strComputer & ": " & objItem.Caption
            Next
    End Select
Next


i의 값(IP 주소의 마지막 8진수)이 10, 50, 100인 경우 아무 일도 발생하지 않습니다. 컴퓨터의 IP 주소가 192.168.1.10, 192.168.1.50 또는 192.168.1.100이면 WMI 코드가 실행되지 않고 스크립트의 루프가 지나가기 때문에 아무 일도 발생하지 않습니다. WMI 코드는 이 세 주소를 제외한 나머지 IP 주소의 컴퓨터에 대해서만 실행됩니다. 이 방법은 간단하지만 스크립트의 WMI 부분에서 특정 IP 주소를 제외하는 효과적인 방법입니다.


자세한 정보

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

페이지 맨 위로 페이지 맨 위로

최종수정일 : 2005년 6월 22일