Udostępnij za pośrednictwem


Zadania usługi WMI: pliki i foldery

Zadania usługi WMI dla plików i folderów zmieniają właściwości plików lub folderów za pośrednictwem usługi WMI, w tym tworzenia udziału lub zmieniania nazwy pliku. Jeśli chcesz skopiować plik lub odczytać i zapisać plik, najprostszym sposobem jest użycie hosta skryptu systemu Windows FileSystemObject, a nie WMI. Aby zapoznać się z innymi przykładami, zobacz sekcję Files and Folders w witrynie TechNet ScriptCenter.

CIM_DataFile jest jedną z niewielu klas cim w zaimplementowanej usłudze WMI. Unikaj wyliczania lub wykonywania zapytań dotyczących wszystkich wystąpień CIM_DataFile na komputerze, ponieważ ilość danych może mieć wpływ na wydajność lub spowodować, że komputer przestanie odpowiadać.

Przykłady skryptów pokazane w tym temacie uzyskują dane tylko z komputera lokalnego. Aby uzyskać więcej informacji o sposobie uzyskiwania danych z komputerów zdalnych za pomocą skryptu, zobacz Connecting to WMI on a Remote Computer.

Poniższa procedura opisuje sposób uruchamiania skryptu.

Aby uruchomić skryptu

  1. Skopiuj kod i zapisz go w pliku z rozszerzeniem vbs, takim jak nazwa pliku.vbs. Upewnij się, że edytor tekstów nie dodaje rozszerzenia .txt do pliku.
  2. Otwórz okno wiersza polecenia i przejdź do katalogu, w którym zapisano plik.
  3. Wpisz cscript nazwa pliku.vbs w wierszu polecenia.
  4. Jeśli nie możesz uzyskać dostępu do dziennika zdarzeń, sprawdź, czy korzystasz z wiersza polecenia z podwyższonym poziomem uprawnień. Niektóre dzienniki zdarzeń, takie jak dziennik zdarzeń zabezpieczeń, mogą być chronione przez kontrolę dostępu użytkowników (UAC).

Nuta

Domyślnie skrypt cscript wyświetla dane wyjściowe skryptu w oknie wiersza polecenia. Ponieważ skrypty usługi WMI mogą generować duże ilości danych wyjściowych, może być konieczne przekierowanie danych wyjściowych do pliku. Wpisz cscript filename.vbs > outfile.txt w wierszu polecenia, aby przekierować dane wyjściowe pliku pliku.vbs skryptu, aby outfile.txt.

W poniższej tabeli wymieniono przykłady skryptów, których można użyć do uzyskania różnych typów danych z komputera lokalnego.

Jak mogę... Klasy lub metody WMI
... czy zmienić nazwę pliku bez otrzymania komunikatu o błędzie? Użyj klasy CIM_DataFile. Upewnij się, że podczas wywoływania metody Rename należy przekazać całą nazwę ścieżki, na przykład "C:\Scripts\Test.txt" zamiast "Text.txt". W przypadku programu PowerShell użycie CIM_DataFile może być nieefektywne. W związku z tym możesz po prostu użyć polecenia cmdlet Rename-Item.
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
... czy użytkownicy mają pliki .MP3 przechowywane na komputerze?

Użyj klasy CIM_DataFile i wybierz pliki przy użyciu następującej WQLWHERE klauzuli: 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
... czy utworzyć foldery udostępnione na komputerze?

Użyj klasy Win32_Share i metody 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.")

... skopiować folder?

Użyj klasy Win32_Directory i metody Copy. W przypadku programu PowerShell możesz po prostu użyć polecenia cmdlet Copy-Item.

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
... przenieść folder?

Użyj klasy Win32_Directory i metody Rename. W przypadku programu PowerShell możesz po prostu użyć polecenia cmdlet Move-Item.

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

zadania usługi WMI dla skryptów i aplikacji

przykłady aplikacji WMI C++

TechNet ScriptCenter

`