다음을 통해 공유


WMI 작업: 컴퓨터 소프트웨어

컴퓨터 소프트웨어에 대한 WMI 작업은 MSI(Microsoft Windows Installer) 및 소프트웨어 버전에서 설치하는 소프트웨어와 같은 정보를 가져옵니다. 다른 예제는 https://www.microsoft.com/technet에서 TechNet ScriptCenter를 참조하세요.

이 항목에 표시된 스크립트 예제는 로컬 컴퓨터에서만 데이터를 가져옵니다. 스크립트를 사용하여 원격 컴퓨터에서 데이터를 가져오는 방법에 대한 자세한 내용은 원격 컴퓨터에서 WMI에 연결을 참조하세요.

다음 절차에서 스크립트를 실행하는 방법을 설명합니다.

스크립트를 실행하려면

  1. 코드를 복사하고 확장자가 .vbs인 파일(예: filename.vbs)에 저장합니다. 텍스트 편집기가 파일에 .txt 확장자를 추가하지 않는지 확인합니다.
  2. 명령 프롬프트 창을 열고 파일을 저장한 디렉터리로 이동합니다.
  3. 명령 프롬프트에 cscript filename.vbs를 입력합니다.
  4. 이벤트 로그에 액세스할 수 없는 경우 관리자 권한 명령 프롬프트에서 실행 중인지 확인합니다. 보안 이벤트 로그와 같은 일부 이벤트 로그는 UAC(사용자 액세스 제어)로 보호될 수 있습니다.

참고

기본적으로 cscript는 명령 프롬프트 창에 스크립트의 출력을 표시합니다. WMI 스크립트는 많은 양의 출력을 생성할 수 있으므로 출력을 파일로 리디렉션할 수 있습니다. 명령 프롬프트에 cscript filename.vbs > outfile.txt를 입력하여 filename.vbs 스크립트의 출력을 outfile.txt로 리디렉션합니다.

참고

"select * from Win32_Product" 쿼리를 실행하면 예기치 않은 동작이 발생할 수 있습니다. Win32_Product를 지원하는 공급자가 쿼리에 최적화되지 않았기 때문입니다. 자세한 내용은 기술 자료 문서 974524를 참조하세요.

다음 표에는 로컬 컴퓨터에서 다양한 형식의 데이터를 가져오는 데 사용할 수 있는 스크립트 예제가 나와 있습니다.

어떻게 할까요? WMI 클래스 또는 메서드
스크립트를 사용하여 소프트웨어를 제거할 수 있나요? 소프트웨어가 MSI(Microsoft Windows Installer)를 사용하여 설치된 경우 WMI 클래스 Win32_ProductUninstall 메서드를 사용합니다.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
    ("Select * from Win32_Product " _
        & "Where Name = 'Personnel database'")
For Each objSoftware in colSoftware
    objSoftware.Uninstall()
Next

PowerShell
$colSoftware = Get-WmiObject -Class Win32_Product | Where-Object {$_.name -eq "Personnel database"} 

foreach ($colItem in $colSoftware) { $colItem.Uninstall() }

스크립트를 사용하여 컴퓨터에 설치된 모든 소프트웨어를 인벤토리에 추가할 수 있나요?

소프트웨어가 MSI(Microsoft Windows Installer)를 사용하여 설치된 경우 WMI 클래스 Win32_Product를 사용합니다.

VB
strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") Set colSoftware = objWMIService.ExecQuery _ ("Select * from Win32_Product") 

For Each objSoftware in colSoftware Wscript.Echo "Name: " & objSoftware.Name Wscript.Echo "Version: " & objSoftware.Version Next

PowerShell
$colSoftware = Get-WmiObject -Class Win32_Product 

foreach ($colItem in $colSoftware) { "Name: " + $colItem.Name "Version: "+ $colItem.Version }

어떤 버전의 Microsoft Office가 설치되어 있는지 확인할 수 있나요?

Win32_Product 클래스를 사용하고 Version 속성의 값을 확인합니다.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery(_
    "Select * from Win32_Product " & _
    "Where IdentifyingNumber =" _
        & " '{90280409-6000-11D3-8CFE-0050048383C9}'")
For Each objItem in colSoftware
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "Version: " & objItem.Version
Next

PowerShell
$colSoftware = Get-WmiObject -Class Win32_Product | Where-Object {$_. IdentifyingNumber -eq "{90280409-6000-11D3-8CFE-0050048383C9}"} 

foreach ($colItem in $colSoftware) { "Name: " + $colItem.Name "Version: " + $colItem.Version }

스크립트 및 애플리케이션에 대한 WMI 작업

WMI C++ 애플리케이션 예제

TechNet ScriptCenter