1 (изменено: BANDI-OGA, 2011-02-04 14:32:30)

Тема: VBS: Собирает информацию о компьютере

On Error Resume Next
strComputer = InputBox ("Введите Имя удаленного компьютера")
Set oIE = WScript.CreateObject("InternetExplorer.Application")
oIE.Navigate "about:blank"
oIE.Visible = 1
oIE.ToolBar = 0
oIE.StatusBar = 0
oIE.Width = 600
oIE.Height = 500
oIE.StatusBar = 0
oIE.AddressBar = 0

oIE.Document.Write "<html><title>ХХХ</title><body bgcolor=#034e85><font color=White>"

'Опрашиваем системные переменные окружения
set oShell = CreateObject("WScript.Shell") 

sCurrUsrPath = oShell.ExpandEnvironmentStrings("%UserName%")
oIE.Document.Write "Имя пользователя: "
oIE.Document.Write sCurrUsrPath
oIE.Document.Write "<br>"

'Подлючение к WMI
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")

'Выборка информации о процессорах
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor", , 48)
For Each objItem in colItems
    strMsg = strMsg & objItem.Name & "<br>"
Next

'Выборка информации о памяти
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", , 48)
For Each objItem in colItems
    strMsg2 = strMsg2 & (objItem.TotalPhysicalMemory + 1023) / 1024 & "<br>"
Next

'Выборка тип памяти (<533 DDR1 >=533 DDR2)
Set colItems = objWMIService.ExecQuery("Select * from Win32_PhysicalMemory", , 48)
For Each objItem in colItems
    strMsg3 = strMsg3 & (objItem.Speed) & "<br>"
Next

'Выборка информации о диске
Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive", , 48)
For Each objItem in colItems
    strMsg4 = strMsg4 & ((objItem.Size + 536870912) / 1073741824) & " GB" & "<br>"
Next

'Выборка информации об установленном видео
Set colItems = objWMIService.ExecQuery("Select * from Win32_VideoController", , 48)
For Each objItem in colItems
    strMsg5 = strMsg5 & objItem.Name & "<br>"
Next

'Выборка информации BIOS
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS where PrimaryBIOS = true", , 48)
For Each objItem in colItems
    strMsg6 = strMsg6 & objItem.Manufacturer & "-" & objItem.Version & "<br>"
Next

'Вывод
oIE.Document.Write "<br>"
oIE.Document.Write "Процессоры<br>"
oIE.Document.Write strMsg
oIE.Document.Write "<br>"
oIE.Document.Write "Память<br>"
oIE.Document.Write strMsg2
oIE.Document.Write "<br>"
oIE.Document.Write "Тип Памяти<br>"
oIE.Document.Write strMsg3
oIE.Document.Write "<br>"
oIE.Document.Write "Диски<br>"
oIE.Document.Write strMsg4
oIE.Document.Write "<br>"
oIE.Document.Write "Видео<br>"
oIE.Document.Write strMsg5
oIE.Document.Write "<br>"
oIE.Document.Write "Биос<br>"
oIE.Document.Write strMsg6


oIE.Document.Write"</font></body></html>"

Я этим скриптом узнаю информацию удаленного компьютера, подскажите как сделать чтоб скрипт опрашивал и выдавал залогиненого пользователя на удаленном компьютере.

2

Re: VBS: Собирает информацию о компьютере

Идём сюда, исправляем название темы и оформление поста.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

3

Re: VBS: Собирает информацию о компьютере

BANDI-OGA пишет:

... как сделать чтоб скрипт опрашивал и выдавал залогиненого пользователя на удаленном компьютере.

Для Win XP и выше - несложно:

Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If Err.Number = 0 Then
    Set objCollection = objWMI.ExecQuery("SELECT UserName FROM Win32_ComputerSystem")
    If Err.Number = 0 Then
        For Each objItem In objCollection
            If Err.Number = 0 Then
                strName = objItem.UserName
                If IsNull(strName) Then
                    strName = "Сеанс не обнаружен."
                End If
            Else
                Err.Clear
                strName = "Не идентифицированный сеанс."
            End If
        Next
        Set objItem = Nothing
    Else
        Err.Clear
        strName = "Не удалось выполнить запрос."
    End If
    Set objCollection = Nothing
Else
    Err.Clear
    strName = "Подключение не разрешено."
End If
Set objWMI = Nothing
WScript.Echo strName

Для Win 2000 такой способ даст верный результат лишь в том случае, когда сеанс принадлежит пользователю, входящему в группу локальных администраторов.
Здесь алгоритм может быть таким:
- читаем значение параметров Shell и DefaultUserName (может пригодиться и параметр DefaultDomainName) ключа реестра
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon;
- читаем список процессов, запущенных на станции, и ищем там процесс, соответствующий значению, указанному в Shell;
- в случае успеха предыдущего пункта узнаём владельца этого процесса и сравниваем его имя со значением, указанным DefaultUserName;
- в случае успеха предыдущего пункта сеанс идентифицирован.