안녕하세요, Scripting Guy! - 스크립트를 사용할 때 폼 선택은 어떻게 하나요?


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

오늘의 질문: 스크립트를 사용할 때 폼 선택은 어떻게 하나요?


스크립트를 사용할 때 폼 선택은 어떻게 하나요?

Q 안녕하세요, Scripting Guy! 각각 다른 컴퓨터를 나타내는 4개의 라디오 단추를 가진 폼을 만들고 싶습니다. 라디오 단추를 선택하고 다른 단추를 클릭하면 선택한 컴퓨터에 대해 스크립트가 실행되었으면 합니다. 어떻게 하면 되나요?

-- CW
A 안녕하세요, CW님. VBScript와 Windows Script Host만 사용하면 대답은 간단합니다. 그와 같은 폼은 만들 수 없습니다. VBScript와 WSH는 메시지 상자 표시를 제외한 그래픽 사용자 인터페이스를 만들 수 없습니다. 스크립트 내에서 라디오 단추, 목록 상자, 드롭다운 목록 및 기타 그래픽 요소를 사용할 수 없습니다.

그러나 예전에 이러한 경우를 경험한 적이 있으실 것입니다. 맞습니다. 먼저 무엇을 할 수 없는지 알려 드린 후 이 작업을 수행할 수 있는 방법을 소개하겠습니다. 누구에게나 요령은 필요하니까요! 앞서 말씀 드린 대로 VBScript만으로는 이 작업을 수행할 수 없지만 HTA(HTML Application)를 사용하면 이 작업이 가능합니다.

오늘은 HTA에 대한 자세한 설명을 생략하니 관심이 있으시면 1년 전 이 주제를 다루었던 웹캐스트를 참조하시기 바랍니다. 간단히 말해 HTA를 사용하면 Internet Explorer과 스크립팅 코드를 결합하여 스크립트에 그래픽 사용자 인터페이스를 포함시킬 수 있습니다. 이 외에도 스크립트에 그래픽 사용자 인터페이스를 통합할 수 있는 다른 방법이 있지만 GUI 개발을 처음 시작하는 경우에는 이 방법이 가장 간편합니다.

먼저 HTA용 코드를 소개한 후 코드의 작동 방법을 설명하겠습니다. 이 샘플 HTA는 각각 서로 다른 컴퓨터를 의미하는 4개의 라디오 단추를 나타냅니다. 컴퓨터를 선택하고 Run Script 단추를 클릭합니다. 그러면 서브루틴이 실행되어 선택한 컴퓨터와 연결된 후 해당 컴퓨터에 설치된 운영 체제 이름을 보고합니다. 원리는 간단하지요? 작동 방법을 보려면 이 코드를 복사하여 메모장에 붙여넣은 다음 이 파일을 .hta라는 파일 확장명(예: os_name.hta)으로 저장합니다. .vbs 파일 확장명은 작동하지 않으므로 사용하지 마십시오. 반드시 .hta를 사용해야 합니다.
< SCRIPT LANGUAGE="VBScript" >
Sub RunScript
    If ComputerOption(0).Checked Then
        strComputer = ComputerOption(0).Value
    End If
    If ComputerOption(1).Checked Then
        strComputer = ComputerOption(1).Value
    End If
    If ComputerOption(2).Checked Then
        strComputer = ComputerOption(2).Value
    End If
    If ComputerOption(3).Checked Then
        strComputer = ComputerOption(3).Value
    End If
    If strComputer = "" Then
        Exit Sub
    End If
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
        ("Select * From Win32_OperatingSystem")
    For Each objItem in ColItems
        Msgbox objItem.Caption
    Next
End Sub
Sub CancelScript
   Self.Close()
End Sub
< /SCRIPT >
< BODY >
< input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01< BR >
< input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02< BR >
< input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03< BR >
< input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04< P >
< input id=runbutton class="button" type="button" value="Run Script" name="ok_button" 
onClick="RunScript">
   
< input id=runbutton class="button" type="button" value="Cancel" name="cancel_button" 
onClick="CancelScript">
< /BODY >

그러면 지금부터 작동 방법을 자세히 설명하겠습니다. 이 코드는 네 개의 섹션으로 나눌 수 있습니다. HTML 태그를 사용하여 라디오 단추, Run ScriptCancel 단추를 나타내는 두 섹션과 Run Script 또는 Cancel 단추의 클릭 여부에 따라 서브루틴을 실행하는 두 섹션으로 나뉩니다. 이러한 각 섹션을 좀 더 자세히 살펴봅시다.

예를 들어, 다음은 네 개의 라디오 단추를 나타내는 HTML 코드입니다. HTML을 알고 있다면 아래 코딩이 특별한 점이 없는 표준 HTML 코딩임을 확인할 수 있습니다. 모든 단추는 동일한 이름(ComputerOption)을 갖고 있어 한 번에 한 개의 단추만 선택할 수 있습니다. 또한 각 단추의 값은 해당 컴퓨터 이름으로 설정됩니다.

< BODY >
< input type="radio" name="ComputerOption" value="atl-ws-01" >atl-ws-01< BR >
< input type="radio" name="ComputerOption" value="atl-ws-02" >atl-ws-02< BR >
< input type="radio" name="ComputerOption" value="atl-ws-03" >atl-ws-03< BR >
< input type="radio" name="ComputerOption" value="atl-ws-04" >atl-ws-04< P >

다음은 Run ScriptCancel 단추를 나타내는 코드입니다. 이 코드의 핵심은 단추를 클릭했을 때 실행되는 서브루틴의 종류를 나타내는 onClick 매개 변수입니다. 첫 번째 단추를 클릭하면 서브루틴 RunScript가 실행되고 두 번째 단추를 클릭하면 서브루틴 CancelScript가 실행됩니다.

< input id=runbutton class="button" type="button" value="Run Script" name="ok_button" 
onClick="RunScript">
   
< input id=runbutton class="button" type="button" value="Cancel" name="cancel_button" 
onClick="CancelScript">
< /BODY >

CancelScript 서브루틴은 HTA를 닫습니다. 보여지는 것처럼 이러한 절차는 그다지 복잡하지 않습니다.

Sub CancelScript
   Self.Close()
End Sub

이제 마지막으로, 한 가지 유용한 정보를 알려 드리겠습니다. 귀하가 라디오 단추를 선택한 후 Run Script를 클릭했을 때 HTA에서는 선택된 단추가 무엇이며 스크립트를 실행할 컴퓨터는 무엇인지 어떻게 알까요? 또한 실행하려는 스크립트는 어디에 있을까요? 모든 정보는 바로 이 RunScript 루틴에 있습니다.

Sub RunScript
    If ComputerOption(0).Checked Then
        strComputer = ComputerOption(0).Value
    End If
    If ComputerOption(1).Checked Then
        strComputer = ComputerOption(1).Value
    End If
    If ComputerOption(2).Checked Then
        strComputer = ComputerOption(2).Value
    End If
    If ComputerOption(3).Checked Then
        strComputer = ComputerOption(3).Value
    End If
    If strComputer = "" Then
        Exit Sub
    End If
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
        ("Select * From Win32_OperatingSystem")
    For Each objItem in ColItems
        Msgbox objItem.Caption
    Next
End Sub

이 서브루틴의 전반부에서는 선택한 단추가 무엇인지 확인합니다. 라디오 단추(동일한 이름을 가진 경우)는 배열로 저장됩니다. 배열에서 첫 번째 단추는 항목 0, 두 번째 단추는 항목 1이 되며 이러한 방식으로 저장됩니다. 따라서 어떤 단추가 선택되었는지 확인하려면 각 단추의 Checked 속성을 확인하면 됩니다. 예를 들어, 다음 코드 줄은 단추 0(배열의 첫 번째 단추)의 Checked 속성이 true인지 여부를 확인하며 true인 경우 선택된 단추임을 나타냅니다.

If ComputerOption(0).Checked Then

Checked 속성이 true이면 어떻게 될까요? 그러면 이 라디오 단추의 값(단추의 값은 컴퓨터 이름에 해당)을 변수 strComputer에 할당합니다.

strComputer = ComputerOption(0).Value

Checked 속성이 False이면 어떻게 될까요? 각 라디오 단추의 값을 확인하므로 상관 없습니다. 곧 어떤 단추가 선택되었는지 확인할 수 있습니다. 단추는 하나만 선택할 수 있습니다. 선택한 단추가 하나도 없으면 서브루틴이 종료됩니다. 이 코드는 다음과 같습니다.

If strComputer = "" Then
    Exit Sub
End If

단추가 선택되면 strComputer는 연결하려는 컴퓨터의 이름과 같게 됩니다. 이 내용이 서브루틴의 나머지 후반부에 해당됩니다. 이는 특정 컴퓨터에 연결하여 이 컴퓨터에 설치된 운영 체제 이름을 반환하는 표준 WMI 스크립트입니다.

지금까지 작업을 잘 따라 오셨나요? 실제로 해 보면 내용을 충분히 이해하실 것입니다. 그러나 알아야 할 것이 하나 더 있습니다. 여기에 소개된 샘플 HTA는 컴퓨터에 설치된 운영 체제 이름을 검색한 후 메시지 상자에 이 이름을 표시합니다. 그렇다면 컴퓨터에 설치된 모든 서비스 목록을 표시할 경우 어떻게 될까요? 이 경우 수많은 메시지 상자에 일일이 응답해야 하는 불편을 겪을 수도 있습니다.

그렇다면 이 문제를 수정할 수 있을까요? 물론입니다. 여기에 소비되는 시간을 줄이려면 몇 가지 조치를 취해야 합니다. 첫째, 화면에서 정보를 기록할 수 있는 식별 가능한 영역인 SPAN 영역을 HTA에 추가합니다. 다음과 같은 코드를 사용해 모든 단추 아래에 ID가 DataArea인 SPAN을 추가합니다.

< P >
< span id=DataArea >< /span >

둘째, 메시지 상자에 모든 데이터를 표시하는 대신 이 데이터를 수집하여 변수에 모두 저장해야 합니다. 이 코드는 변수 strText의 값을 현재 strText에 있는 값과 캡션 속성의 값 및
태그(키보드에서 Enter 키를 누른 것과 동등한 HTML 기능)를 합한 값으로 설정합니다.

strText = strText & objItem.Caption & "<br>"

마지막으로 SPAN의 InnerHTML 속성을 변수 strText의 값으로 설정해야 합니다.

DataArea.InnerHTML = strText

이해가 충분히 되셨는지요? 다음은 컴퓨터에 설치된 모든 서비스 이름을 수집한 후 HTA에 이러한 이름을 기록하는 수정된 HTA입니다.

< SCRIPT LANGUAGE="VBScript" >
Sub RunScript
    If ComputerOption(0).Checked Then
        strComputer = ComputerOption(0).Value
    End If
    If ComputerOption(1).Checked Then
        strComputer = ComputerOption(1).Value
    End If
    If ComputerOption(2).Checked Then
        strComputer = ComputerOption(2).Value
    End If
    If ComputerOption(3).Checked Then
        strComputer = ComputerOption(3).Value
    End If
    If strComputer = "" Then
        Exit Sub
    End If
    Set objWMIService = GetObject _
        ("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
        ("Select * From Win32_Service")
    For Each objItem in ColItems
        strText = strText & objItem.Name & "< BR >"
    Next
    DataArea.InnerHTML = strText
End Sub
Sub CancelScript
   Self.Close()
End Sub
< /SCRIPT >
< BODY >
< input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01< BR >
< input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02< BR >
< input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03< BR >
< input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04< P >
< input id=runbutton class="button" type="button" value="Run Script" name="ok_button" 
onClick="RunScript">
   
< input id=runbutton class="button" type="button" value="Cancel" name="cancel_button" 
onClick="CancelScript">
< P >
< span id=DataArea>< /span >
< /BODY >

자세한 정보

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

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

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