Тема: VBScript: собираем информацию о компьютерах домена
Скрипт собирает информацию о компьютерах домена: роль в домене, семейство процессора и его частоту, размер оперативной памяти и жестких диков. Скрипт запускает MS Excel и выводит в него информацию. Потребуются права администратора домена. Скрипт может являться примером не только получения информации с помощью WMI, но и примером быстрого и удобного вывода данных в скриптах с помощью MS Excel.
Запускать prosto v EXCEL.wsf, файл info.vbs должен лежать рядом.
Автор примера - Алексей Жучков, г. Ессентуки.
info.vbs
function GetMemSize (name) 'возвращает размер оперативной памяти комьютера name
on error resume next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&name&"\root\CIMV2")
If Err.Number = 0 Then
For Each objOS In objService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
GetMemSize=objOS.TotalPhysicalMemory/1024/1024
Next
end if
End function
function Avaible (name) 'пингом проверяет доступность компьютера name в сети
on error resume next
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& name & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
Avaible=false
else
Avaible=true
End If
Next
End function
function Role (name) ' возвращет роль компьютера name в домене
on error resume next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&name&"\root\CIMV2")
If Err.Number = 0 Then
For Each objOS In objService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
Select Case objOS.DomainRole
Case "0" Role="Standalone Workstation"
Case "1" Role="Рабочее место"
Case "2" Role="Standalone Server"
Case "3" Role="Member Server"
Case "4" Role="Сервер"
Case "5" Role="Сервер"
End Select
Next
end if
End function
function ProcessorFamily (name) 'возвращает название процессора компьютера name
On Error Resume Next
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & name & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
ProcessorFamily=objItem.Name
Next
end function
function ProcessorClock (name) 'возвращает частоту процессора name
On Error Resume Next
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & name & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objItem in colItems
ProcessorClock=objItem.CurrentClockSpeed
Next
end function
function GetDisksSize(name) 'возвращает размер НЖМД компьюетра name, если их несолько то все через пробел
size=""
on error resume next
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & name & "\root\cimv2")
Set colDiskDrives = objWMIService.ExecQuery _
("Select * from Win32_DiskDrive")
For each objDiskDrive in colDiskDrives
size=size&" "&round(objDiskDrive.Size/1024/1024/1024)
Next
GetDisksSize=size
end function
Function IsWinNT(name) 'NT ли на компьютере name
On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"&name&"\root\CIMV2")
For Each objOS In objService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
Exit For
Next
'16 - WIN95, 17 - WIN98, 18 - WINNT, 19 - WINCE
if objOS.OSType=18 then
IsWinNT=true
else
IsWinNT=false
end if
End function
prosto v EXCEL.wsf
'Получает инфо о компьютерах домена
'Роль в домене, семейство процессора и его частоту, размер оперативной памяти и жестких диков
<job id="FillIfo">
<script language="VBScript" src="info.vbs"/>
<script language="VBScript">
Set WshShell = WScript.CreateObject("WScript.Shell")
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.Workbooks.Add
xlApp.Cells(1, 1).Value = "Domain Computer"
xlApp.Cells(1, 2).Value = "Domain Role"
xlApp.Cells(1, 3).value="ProcessorFamily"
xlApp.Cells(1, 4).value="ProcessorClock"
xlApp.Cells(1, 5).Value ="RAM"
xlApp.Cells(1, 6).Value = "HDD(s)"
Dim Container
DomainName=InputBox("Ваш домен пожалуйста")
'DomainName="ixb"
Set Container = GetObject("WinNT://" & DomainName)
Container.Filter = Array("Computer")
i=2
For Each Obj In Container
xlApp.Cells(i, 1).Value = Obj.Name
if Avaible(Obj.Name) then
xlApp.Cells(i, 2).Value = Role(Obj.Name)
xlApp.Cells(i, 3).value=ProcessorFamily(Obj.Name)
xlApp.Cells(i, 4).value=ProcessorClock(Obj.Name)
xlApp.Cells(i, 5).Value = GetMemSize(Obj.Name)
xlApp.Cells(i, 6).Value = GetDisksSize(Obj.Name)
end if
i=i+1
Next
WScript.sleep 2000
Set xlApp = Nothing
</script>
</job>
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.