Войти

Показать полную графическую версию : [решено] Определение версий Microsoft Office и IE


Crush45
04-09-2013, 13:33
Доброго времени суток. Возникла такая необходимость на предприятии - проверить какая же версия office и ie установлена на компьютерах в домене. Вопросы типа "А нафига собственно... ?" - ответ: "Так надо".
Я представляю себе это примерно так:
1. Создаем GPO cо скриптом на вход (logon-скрипт), распространяем политику на весь домен;
2. Пользователю при входе в домен применяется новая политика и отрабатывает скрипт;
3. Во время работы скрипта создается файл в каком-либо месте (много или один), %computername%
%username%
%officeversion%
%ieversion%
4. Я достаю эт(от/и) файл(ы) и отдаю лицу, запросившему информацию.
5. Все счастливы, все довольны.

По реализации, у меня пока только лишь идея поиска инфы по реестру, допустим смотрим в реестр на соответствие каким-либо ключам и в соответствии им делаем вывод в файл.

Пишите свои идеи, будем реализовывать и смотреть как это все работает.

Iska
04-09-2013, 15:53
WSH:
Option Explicit

Dim objWord

With WScript.CreateObject("WScript.Network")
WScript.Echo "Computer name: " & .ComputerName
WScript.Echo "User name: " & .UserDomain & "\" & .UserName
End With

On Error Resume Next
Set objWord = WScript.CreateObject("Word.Application")

If Err.Number = 0 Then
On Error Goto 0
WScript.Echo "Microsoft Office version: " & objWord.Build
objWord.Quit

Set objWord = Nothing
Else
Err.Clear
On Error Goto 0
WScript.Echo "Microsoft Office version: Not found"
End If

With WScript.CreateObject("InternetExplorer.Application")
WScript.Echo "Internet Explorer version: " & WScript.CreateObject("Scripting.FileSystemObject").GetFileVersion(.FullName)
.Quit
End With

WScript.Quit 0

Это не единственный способ.

Crush45
05-09-2013, 09:32
Спасибо, но я ничего тут не понимаю) Мне bat-синтаксис роднее.

Iska
05-09-2013, 11:11
Crush45, укажите путь, куда делать вывод в файл — я приведу детали «как».

Crush45
05-09-2013, 12:07
Ну пусть будет D:\Microversion\*.log - путь я заменю. Ваяю пока на батнике свою версию с распарсиванием реестра. Геморно конечно, но по другому пока не умею.
Вопрос таков, а можно ли это все сгрузить в какую-либо SQL-базу?

Допустим пусть база будет с одной таблицей - в ней столбцы: номер записи, имя компа, пользователь, версия ie, office + по возможности Windows?

sunnykey
05-09-2013, 14:12
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
$log="d:\ie_office.log"
$str=$env:COMPUTERNAME+"`t"
Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name LIKE 'Microsoft Office%'" | `
Select-Object -First 1 | % {$str+=$_.Name+"`t"}
$str+="IE Ver"+[System.Diagnostics.FileVersionInfo]::GetVersionInfo(
"C:\Program Files\Internet Explorer\iexplore.exe").ProductVersion.ToString()
$str | Out-File -FilePath $log -Append
"`n"+"----------------------------------------------------------------------" | Out-File -FilePath $log -Append
Предлагаю свой вариант.Вопрос таков, а можно ли это все сгрузить в какую-либо SQL-базу? »
Можно, но нужно читать мануалы

Iska
05-09-2013, 15:00
Вопрос таков, а можно ли это все сгрузить в какую-либо SQL-базу? »
Это самое правильное решение.

Вот примерная болванка:
Option Explicit

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = 1

Dim objDictionary

Dim objWord
Dim objSWbemObjectEx


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With WScript.CreateObject("WScript.Network")
objDictionary.Add "Computer name", .ComputerName
objDictionary.Add "User name", .UserDomain & "\" & .UserName
End With

On Error Resume Next
Set objWord = WScript.CreateObject("Word.Application")

If Err.Number = 0 Then
On Error Goto 0
objDictionary.Add "Microsoft Office version", objWord.Build
objWord.Quit

Set objWord = Nothing
Else
Err.Clear
On Error Goto 0
objDictionary.Add "Microsoft Office version", vbNull
End If

With WScript.CreateObject("InternetExplorer.Application")
objDictionary.Add "Internet Explorer version", WScript.CreateObject("Scripting.FileSystemObject").GetFileVersion(.FullName)
.Quit
End With

For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT Version FROM Win32_OperatingSystem WHERE Primary='True'")
objDictionary.Add "OS version", objSWbemObjectEx.Version
Next

WScript.CreateObject("ADODB.Recordset").Open _
"INSERT INTO [Sample table] (" & _
"[DateTime], [Computer name], [User name], [OS version], [Microsoft Office version], [Internet Explorer version]" & _
") VALUES (" & _
"GETDATE(), " & _
"'" & objDictionary.Item("Computer name") & "', " & _
"'" & objDictionary.Item("User name") & "', " & _
"'" & objDictionary.Item("OS version") & "', " & _
"'" & objDictionary.Item("Microsoft Office version") & "', " & _
"'" & objDictionary.Item("Internet Explorer version") & "'" & _
")", "Provider=sqloledb;Data Source=SQL;Initial Catalog=SampleDatabase;Integrated Security=SSPI;", adOpenStatic, adLockOptimistic, adCmdText

objDictionary.RemoveAll
Set objDictionary = Nothing

WScript.Quit 0

где, «SQL» — имя SQL сервера, «SampleDatabase» — имя базы данных, «Sample table» — имя таблицы в указанной базе данных, «[DateTime], [Computer name], [User name], [OS version], [Microsoft Office version], [Internet Explorer version]» — поля указанной таблицы базы данных (я добавил кроме перечисленных Вами ещё и поле «DateTime» — дату и время внесения изменений).

Crush45
06-09-2013, 06:08
"INSERT INTO [Sample table] (" & _ »
Я так понимаю в данном случае нужно указать в какую таблицу базы писать?

Iska
06-09-2013, 06:57
Я так понимаю в данном случае нужно указать в какую таблицу базы писать? »
Да. Я так и думал, что что-то пропустил в описании. Добавил в предыдущий пост.

Vadikan
06-09-2013, 09:43
Crush45,
http://www.microsoft.com/sam/en/ca/msia.aspx
http://www.microsoft.com/sam/en/us/map.aspx

Crush45
06-09-2013, 09:51
Iska, спасибо огромное, все работает. Спасибо Вам большое еще раз!

Ваял бы до сих пор на своем bat.

Vadikan, у программы, если я не ошибаюсь ограничение на опрос до 250 компьютеров.
The MSIA will work with networks that have 250 or fewer computers.

У меня порядка 1200 )

На следующий год планируется большая штука под название SCCM 2012. Вот там все, что хотим и даже больше. Спасибо Всем.

Vadikan
08-09-2013, 08:42
у программы, если я не ошибаюсь ограничение на опрос до 250 компьютеров. »
У меня порядка 1200 ) »
Извините, мои телепатические способности все еще недостаточно развиты, поэтому я на всякий случай дал две ссылки.

Crush45
09-09-2013, 07:06
Извините, мои телепатические способности все еще недостаточно развиты, поэтому я на всякий случай дал две ссылки »
Про Ваши телепатические возможности я и не спрашивал. Я просил помочь со скриптом, мне помогли, и ставить программы, будь то MAP toolkit либо MSIA я не собираюсь, по причине внедрения другого продукта. Еще раз спасибо.




© OSzone.net 2001-2012