WMI 작업: 파일 및 폴더

파일 및 폴더에 대한 WMI 작업은 공유 만들기 또는 파일 이름 바꾸기를 포함하여 WMI를 통해 파일 또는 폴더 속성을 변경합니다. 파일을 복사하거나 파일을 읽고 쓰려는 경우 가장 쉬운 방법은 WMI 대신 Windows 스크립트 호스트 FileSystemObject를 사용하는 것입니다. 다른 예제는 TechNet ScriptCenter파일 및 폴더섹션을 참조하세요.

CIM_DataFile은 구현되는 WMI의 몇 안 되는 CIM 클래스 중 하나입니다. 데이터 볼륨이 성능에 영향을 주거나 컴퓨터의 응답이 중지될 가능성이 있으므로 컴퓨터의 모든 CIM_DataFile 인스턴스를 열거하거나 쿼리하지 마세요.

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

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

스크립트를 실행하려면

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

참고

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

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

어떻게 할까요? WMI 클래스 또는 메서드
오류 메시지를 받지 않고 파일 이름을 바꿀 수 있나요? CIM_DataFile 클래스를 사용합니다. Rename 메서드를 호출할 때 전체 경로 이름(예: "Text.txt" 대신 "C:\Scripts\Test.txt")을 전달해야 합니다. PowerShell의 경우 CIM_DataFile을 사용하는 것이 비효율적일 수 있습니다. 따라서 단순히 Rename-Item cmdlet을 사용할 수 있습니다.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery ("Select * from CIM_DataFile where Name = " & "'c:\\scripts\\toggle_service.vbs'")
For Each objFile in colFiles
    errResult = objFile.Rename("c:\scripts\toggle_service.old")
Next
PowerShell
rename-item c:\scripts\toggle_service.vbs toggle_service.old
사용자가 컴퓨터에 .MP3 파일을 저장했는지 확인할 수 있나요?

CIM_DataFile 클래스를 사용하고 다음 WQLWHERE 절을 사용하여 파일을 선택합니다. Where Extension = "MP3"

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * from CIM_DataFile where Extension = 'mp3'")
For Each objFile in colFiles
    Wscript.Echo "File Name: " & objFile.Name & "." & objFile.Extension
    Wscript.Echo "Path: " & objFile.Path
Next
PowerShell
Get-WmiObject -Class CIM_DataFile -namespace "root\cimv2" -Filter "Extension = 'mp3'" | `
   format-list Name, Extension, Path
컴퓨터에 공유 폴더를 만들 수 있나요?

Win32_Share 클래스 및 Create 메서드를 사용합니다.

VB
Const FILE_SHARE = 0
Const MAXIMUM_CONNECTIONS = 25
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objNewShare = objWMIService.Get("Win32_Share")
errReturn = objNewShare.Create("C:\Finance", "FinanceShare", FILE_SHARE, MAXIMUM_CONNECTIONS, "Public share for the Finance group.")

PowerShell
$FILE_SHARE = 0 $MAXIMUM_CONNECTIONS = 25 

$NewDir = new-item C:\Finance -type directory $Shares= [WMICLASS]"Win32_Share" [void]$Shares.Create("C:\Finance","FinanceShare", $FILE_SHARE, $MAXIMUM_CONNECTIONS, "Public share for the Finance group.")

폴더를 복사할 수 있나요?

Win32_Directory 클래스 및 Copy 메서드를 사용합니다. PowerShell의 경우 단순히 Copy-Item cmdlet을 사용할 수 있습니다.

VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
 
Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory where Name = 'c:\\Scripts'") 
 
For Each objFolder in colFolders 
    errResults  = objFolder.Copy("D:\Archive") 
Next 
PowerShell
Copy-Item C:\Scripts -Destination D:\Archive -Recurse
폴더를 이동할 수 있나요?

Win32_Directory 클래스 및 Rename 메서드를 사용합니다. PowerShell의 경우 단순히 Move-Item cmdlet을 사용할 수 있습니다.

VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
 
Set colFolders = objWMIService.ExecQuery _ 
    ("Select * from Win32_Directory where name = 'c:\\Scripts'") 
 
For Each objFolder in colFolders 
    errResults = objFolder.Rename("C:\Admins\Documents\Archive\VBScript") 
Next
PowerShell
move-item -path C:\Scripts -destination C:\Admins\Documents\Archive\PowerShell

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

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

TechNet ScriptCenter

`