
- •Содержание
- •Лабораторная работа № 1 Основы технологии Windows Management Instrumentation. Работа с процессами и потоками в wmi
- •Ход работы
- •Варианты заданий
- •Варианты заданий для запуска процесса
- •Лабораторная работа № 3 Сбор информации о памяти и планирование заданий. Работа с файловой системой
- •Ход работы
- •Варианты заданий
- •Лабораторная работа № 4 Организация резервного копирования данных с использованием wmi и vbScript
- •Лабораторная работа 2
- •Лабораторная работа 3
- •Лабораторная работа 4
- •Приложение б. Экранные формы выполнения скриптов лабораторная работа 1
- •И вывод информации о свойствах и используемых потоках приложением
- •Лабораторная работа 2
- •Лабораторная работа 3
- •Лабораторная работа 4
Лабораторная работа 2
ЗАДАНИЕ 1. Составить сценарий выполняющий запуск определенного приложения, ожидание его завершения и вывод на экран информации о времени его работы.
startTime = Now
Set WMI = GetObject("winmgmts:")
Set colMonitorProcess = WMI.ExecNotificationQuery("SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='osk.exe'")
Set objClass = GetObject("winmgmts:Win32_Process")
res = objClass.Create("C:\Windows\System32\osk.exe", null, null, PID)
Do
Set objLatestEvent = colMonitorProcess.NextEvent
if objLatestEvent.Path_.Class = "__InstanceDeletionEvent" then
EndTime = Now
Wscript.Echo "Start Time: " & DateDoubleToTimeString(startTime)
Wscript.Echo "Closing Time: " & DateDoubleToTimeString(endTime)
Wscript.Echo "Time of life: " & DateDoubleToTimeString(endTime - startTime)
WScript.Quit
end if
loop
Function DateDoubleToTimeString(dt)
sec = (dt - int(dt)) * 86400
s = sec mod 60
if s < 10 then
s = "0" & s
end if
m = sec \ 60 mod 60
if m < 10 then
m = "0" & m
end if
h = sec \ 3600
if h < 10 then
h = "0" & h
end if
DateDoubleToTimeString = h & ":" & m & ":" & s
End Function
ЗАДАНИЕ 2. Составить сценарий запрещающий запуск определенного приложения. При попытке запуска данного приложения, его работа должна быть завершена, и на экран должно быть выведено сообщение о попытке запуска. Если количество разрешенных копий больше 0, то запрещать запуск необходимо только экземпляры приложения, превышающие указанное число.
Set WMI = GetObject("winmgmts:")
Set Processes = WMI.InstancesOf("Win32_Process")
max = 1
n = 0
for each proc in Processes
if proc.Name = "osk.exe" then
n = n + 1
end if
next
strProcName = "osk.exe"
Set colMonitorProcess = WMI.ExecNotificationQuery("SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='" & strProcName & "'")
WScript.Echo "Wainting for event . . ."
Do
Set objLatestEvent = colMonitorProcess.NextEvent
if objLatestEvent.Path_.Class = "__InstanceDeletionEvent" then
n = n - 1
end if
if objLatestEvent.Path_.Class = "__InstanceCreationEvent" then
n = n + 1
if n > max then
objLatestEvent.TargetInstance.Terminate()
res = MsgBox("Launch try" & vbCrLf & "denied", vbOKOnly or vbCritical)
end if
end if
Loop
Лабораторная работа 3
ЗАДАНИЕ 1. Составить сценарий определения объемов памяти (табл. 3.3). В сценарии необходимо реализовать запись данных в текстовый файл. Каждый запуск сценария дописывает данные в файл, а не создает новый.
strComputer = "."
Dim nTotalPhysicalMemory
nTotalPhysicalMemory = 0
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_PhysicalMemory",,48)
For Each objItem in colItems
nTotalPhysicalMemory = nTotalPhysicalMemory + objItem.Capacity
Next
res = res & "-----------------------------------" & vbCrLf _
& "Win32_PhysicalMemory instance" & vbCrLf _
&"-----------------------------------" & vbCrLf _
& "Capacity: " & nTotalPhysicalMemory/1024/1024 & " MB"
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_OperatingSystem",,48)
For Each objItem in colItems
res = res & "-----------------------------------" & vbCrLf _
& "Win32_OperatingSystem instance" & vbCrLf _
& "-----------------------------------" & vbCrLf _
& "FreePhysicalMemory: " & objItem.FreePhysicalMemory/1024 & " MB" & vbCrLf
Next
SaveToFile(res)
Sub SaveToFile(StrToFile)
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("H:\temp.txt", 8,true, 0)
a.WriteLine(StrToFile)
a.Close
End Sub
ЗАДАНИЕ 2. Составить сценарий создающий запланированное задание (ScheduledTask), осуществляющее запуск сценария п.1.
Set objWMIService = GetObject("winmgmts:")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create( _
"\MemoryInfo.vbs", "********131000.000000+120", True, , 32 or 8192 or 1048576 or 134217728 , True,JobId)
If errJobCreated <> 0 Then
Wscript.Echo "Error on task creation" & errJobCreated
Else
Wscript.Echo "New Job ID: " & JobID
End If
ЗАДАНИЕ 3. Составить сценарии просмотра и удаления запланированных заданий, в которых реализовать просмотр всех заданий с выводом идентификатора JobIdи удаление заданий по одному, с вводом идентификатора удаляемого задания.
strComputer = "."
dim Input
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_ScheduledJob",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------" & vbCrLf
Wscript.Echo "Win32_ScheduledJob instance" & vbCrLf
Wscript.Echo "-----------------------------------" & vbCrLf
Wscript.Echo "Command: " & objItem.Command & vbCrLf
Wscript.Echo "JobId: " & objItem.JobId & vbCrLf
Next
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_ScheduledJob",,48)
Wscript.Echo "What task should be deleted?"
Input = 0
Input = Input + WScript.StdIn.ReadLine
WScript.Echo Input
For Each objItem in colItems
if (objItem.JobId = Input) then
errJobDelete=objItem.Delete()
end if
Next
WScript.Echo errJobDelete
ЗАДАНИЕ 4. Составить сценарий получения информации о логических дисках. Вывести список логических дисков с указанием идентификатора диска и типа файловой системы. Для логических дисков, являющихся разделами жесткого диска отобразить доступное дисковое пространство.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_LogicalDisk",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------" & vbCrLf _
& "Win32_LogicalDisk instance" & vbCrLf _
& "-----------------------------------" & vbCrLf _
& "Caption: " & objItem.Caption & vbCrLf _
& "DeviceID: " & objItem.DeviceID & vbCrLf _
& "FileSystem: " & objItem.FileSystem & vbCrLf _
& "FreeSpace: " & objItem.FreeSpace & vbCrLf _
& "VolumeSerialNumber: " & objItem.VolumeSerialNumber & vbCrLf
Next
ЗАДАНИЕ 5. Составить сценарий формирования списка файлов по заданному условию.
Dim strComputer
Dim objService
Dim strResult
Dim colFiles
Dim objFile
Dim WshShell
Const ForWriting = 2
Const TristateUseDefault = 2
Sub TextOut (Text, File)
Dim objFSO, FOut
Set objFSO=WScript.CreateObject("Scripting.FileSystemObject")
Set FOut = objFSO.OpenTextFile (File, ForWriting, TristateUseDefault)
FOut.WriteLine Text
FOut.Close
End Sub
strComputer = "."
strResult = "All doc files on C: " & vbCrLf & vbCrLf
Set objService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colFiles = objService.ExecQuery(_
"SELECT * FROM CIM_DataFile WHERE Drive = 'C:' AND Extension = 'doc'")
For Each objFile in colFiles
strResult = strResult & objFile.Name & vbCrLf
Next
TextOut strResult, "H:\Files.txt"
Set WshShell = WScript.CreateObject("WScript.Shell")
ЗАДАНИЕ 6. Составить сценарий, копирующий свой файл в папку “C:\tmp”, а затем переименовать его.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * from CIM_DataFile where FileName = 'FileCopyAndRename' AND Extension = 'vbs'")
For Each objFile in colFiles
objFile.Copy("c:\tmp\"& objFile.FileName & "." & objFile.Extension)
Next
Set colFiles = objWMIService.ExecQuery("Select * from CIM_DataFile where FileName = 'FileCopyAndRename' AND Extension = 'vbs' AND Drive = 'C:'")
For Each objFile in colFiles
objFile.Rename("c:\tmp\.new"& objFile.FileName & "." & objFile.Extension)
Next
ЗАДАНИЕ 7. Составить сценарий удаления папки “C:\tmp”.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * from Win32_Directory where Name = 'c:\\tmp'")
For Each objFile in colFiles
objFile.Delete()
Next