─━ IT ━─

기계 가동 상황을 확인하는 사활 감시 도구

DKel 2021. 8. 16. 00:55
반응형
첫 번째로 Windows XP에 표준으로 설치되어 있는 WMI(Windows Management Instrumentation)를 이용하여 다양한 컴퓨터 관리 작업을 하실 수 있습니다.WMI에 대한 자세한 내용은 TechNet 스크립트 센터에서 확인하십시오.여기서는 .NET Fraemwork에서 WMI를 이용하여 ping을 실행하고 그 결과를 추출하는 프로그램을 만듭니다.대상 독자 .NET Framework에서 WMI를 이용하는 관리 툴을 만들고 싶은 분.샘플은 C#에서 기술하고 있습니다만 VB.NET으로의 치환은 어렵지 않다고 생각합니다.필요한 환경 .NET Framework ver 1.1이 설치된 Windows XP 머신.WMI를 이용하여 ping을 실행하는 네트워크상의 머신의 가동확인을 하려면 상대방의 머신에 대해 ping을 실행하고 그 결과를 확인하는 것이 일반적입니다.WMI를 이용하면 ping의 결과를 프로그램에서 다룰 수 있는 형태로 추출할 수 있기 때문에 자신만의 사활 감시 도구를 쉽게 만들 수 있습니다.샘플로서 복수의 머신 이름, 또는 IP 주소를 인수로 건네줌으로써 그 머신에 대해 ping을 실행하는 콘솔 어플리케이션을 만들어 봅니다. using System;
using System . Management ;

class PingExec
{
public static void Main ( string [ ] args ) {

if ( args . Length > 0 )
{
foreach ( string arg in args )
{
// 쿼리문자열 설정
ManagementObjectSearcher searcher
= new ManagementObjectSearcher (
′ select * from Win 32 _ PingStatus where address = ′ ′
+ arg + ′ ′ ′ ) ;
// 쿼리 결과 꺼내기
foreach ( ManagementObject mo in searcher . Get ( ) )
{
// 결과 속성 체크 및 상태 표시
if ( mo . Properties [ ′ StatusCode ′ ] . Value == null
|| Convert . ToInt 32 ( mo . Properties [ ′ StatusCode ′ ] . Value )
!= 0)
{
Console.WriteLine(arg+′) : 가동되지 않습니다.′);
}
else
{
Console . WriteLine ( arg + ′ : 稼働 中 ′ ) ;
Console . WriteLine ( ′ IPAddress : ′
+ mo . Properties [ ′ ProtocolAddress ′ ] . Value ) ;
Console . WriteLine ( ′ ResponseTime : ′
+ mo . Properties [ ′ ResponseTime ′ ] . Value ) ;
}
}
Console . WriteLine ( ′ ---------------- ′ ) ;
}
}
}
}.NET Framework에서는 System.Management 이름 공간에 존재하는 클래스에서 WMI에 액세스할 수 있습니다.상기 샘플에서는 Management Object Searcher 클래스의 컨스트럭터에 쿼리 문자열을 건네고 Get 메서드로 그 쿼리의 결과를 꺼냅니다.그리고 그 결과가 가지고 있는 속성의 내용을 확인하고 상태를 표시하고 있습니다.이 샘플에서 알 수 있듯이, WMI의 쿼리는 SQL문의 쿼리와 아주 비슷한 형태로 되어 있습니다.from 구에는 테이블 대신 WMI의 클래스를 지정합니다.그리고 where 구에는 클래스에 맞는 선택 조건을 기술하게 됩니다.그리고 실행 결과를 확인하려면 Management Object 클래스의 Properties 메서드에 WMI 클래스가 가진 속성 이름을 설정함으로써 상태를 꺼내 놓았습니다.WMI에 어떤 클래스가 있고 그 클래스가 어떤 속성을 가지고 있는지, 또 어떤 쿼리를 기술함으로써 이용할 수 있는지를 알아보려면 TechNet 스크립트 센터의 스크립트 목록에서 샘플을 찾는 것이 가장 이해가 쉬울 것입니다.실제로 위의 샘플은 스크립트 일람안의 ′컴퓨터에 ping을 실행′을 참고하여 작성하고 있습니다.이 밖에 WMI를 사용한 몇 가지 관리툴의 예를 필자의 사이트 ′닷넷 팬 blog′의 ′C#에서 WMI를 이용해보자′에서 볼 수 있으니 참고하시기 바랍니다.강한 형태인 WMI 클래스를 이용하는 위의 샘플에서는 쿼리와 속성은 모두 문자열이었습니다.따라서 문자열 중에 오타라도 나는 것을 확인할 수 없습니다.NET Framework SDK에 포함된 Mgmt Class Gen 툴(Mgmt Class Gen.exe)을 이용하면 강한 형식이 된 WMI 클래스를 만들 수 있습니다.이 사용법을 한 번 봅시다.Mgmt Class Gen 툴은 간단합니다.경로가 통하고 MgmtClassGen 툴을 실행할 수 있는 환경에서 명령 프롬프트에서 아래와 같이 입력해야 합니다.> MgmtClassGenWin32_PingStatus 이제 PingStatus.CS라고 하는 파일이 자동으로 생성되고 해당 파일 안에 PingStatus 클래스가 생성됩니다.이 Ping Status클래스를 이용하는 샘플은 아래와 같습니다. using System;
using ROOT . CIMV 2 . Win 32 ;

class PingExec 2
{
public static void Main ( string [ ] args ) {

if ( args . Length > 0 )
{
foreach ( string arg in args )
{
// 선택조건 설정 및 결과 꺼내기
foreach ( PingStatus ps in PingStatus
. GetInstances ( ′ address = ′ ′ + arg + ′ ′ ′ ) )
{
// 결과 체크 및 상태 표시
if ( ps . IsStatusCodeNull || ps . StatusCode ! = 0 )
{
Console.WriteLine(arg+′) : 가동되지 않습니다.′);
}
else
{
Console . WriteLine ( arg + ′ : 稼働 中 ′ ) ;
Console . WriteLine ( ′ IPAddress : ′ + ps . ProtocolAddress ) ;
Console . WriteLine ( ′ ResponseTime : ′ + ps . ResponseTime ) ;
}
}
Console . WriteLine ( ′ ---------------- ′ ) ;
}
}
}
} System.Management 이름 공간 대신 ′PingStatus.CS′ 파일에 정의된 ROOT.CIMV2.Win32 이름 공간을 지정하고 있음에 유의하십시오.이 샘플은 「PingStatus.CS」파일과 함께 컴파일 해 실행 파일을 작성할 수 있습니다.여기서는 문자열은 선택조건 부분에만 나오기 때문에 컴파일의 시점에서 오타 등의 대부분은 체크하게 됩니다.또, 「PingStatus.CS」파일을 Visual Studio .NET 2003에 읽힌 경우, 각 속성은 인텔리센스에 의해서 보완되게 됩니다.이 때문에, 효율적인 개발이 가능하게 됩니다.정리 System.Management 이름 공간에 포함된 클래스를 이용함으로써 WMI를 이용한 관리도구를 작성할 수 있습니다.
SDK에 포함된 Mgmt Class Gen 툴을 이용하면 강한 형식이 된 WMI 클래스를 생성할 수 있습니다.참고자료 TechNet 스크립트 센터
닷넷토한 ′C#에서 WMI를 이용해보자′
Microsoft 다운로드 센터 『Visual Studio .NET 2003 Server Explorer에서의 WMI 기반 관리 확장 기능』
반응형