
На компьютерах нашей компании, которые, конечно же, находятся в домене, установлен Office.
Мы планируем продлить лицензию и хотим знать, какие пользователи действительно используют Office, поэтому мы экономим деньги, покупая лицензии только для тех людей, которые действительно его используют.
У нас нет System Center, в котором, как мне сказали, есть какой-то инструмент аудита для этого, поэтому я хочу узнать, есть ли способ получить эту информацию на всех машинах домена, либо с помощью Windows / Active Directory, либо встроенных инструментов, либо с помощью бесплатного инструмента.
В частности, я ожидаю, что инструмент будет делать что-то вроде этого:
Machine #1:
winword.exe: 5 times last month
excel.exe: not run last month
powerpoint.exe: 20 times last month
Machine #2:
...
...
...
решение1
Обычно мы не даем рекомендаций такого рода, но я могу предложить вам два варианта:
1) System Center — я знаю, что у вас его нет, но вы можете попробовать его, получить данные, а затем удалить.
2) Планирование задач GPO. Однажды меня попросили отслеживать использование программного обеспечения с ограниченным бюджетом. Я сделал это, создав базу данных SQL (хотя текстовые файлы или другой формат базы данных тоже подойдут). Затем я создал VBS, который проверял наличие приложения (winword.exe — это Word, excel.exe — это Excel и т. д.). Если он обнаруживал этот процесс Windows, он подключался к базе данных SQL и регистрировал время/дату, машину, пользователя, приложение. Я развернул этот скрипт как запланированную задачу через GPO для выполнения каждые 15 минут на заданном наборе машин, и через несколько дней и несколько выборок SQL у меня была приблизительная оценка использования SW.
Хотя вариант 2 не является абсолютно надежным и требует, чтобы у пользователя были открыты приложения во время выполнения скрипта, большинство пользователей, работающих с электронной почтой Outlook или документом/электронной таблицей Word, будут держать его открытым в течение 15 минут, особенно если это часть их работы.
Что-то вроде этого должно подойти вам для начала: «При ошибке возобновления следующего сообщения пользователи не будут видеть. Удалите во время разработки
On Error Resume Next
'Get Computer Name
Set wshNetwork = WScript.CreateObject( "WScript.Network" )
strComputerName = wshNetwork.ComputerName
WScript.Echo strComputerName
'Get User Name
strUserName = wshNetwork.UserName
WScript.Echo strUserName
sComputerName = "."
'Connect to local machine and get all process names
Set objWMIService = GetObject("winmgmts:\\" & sComputerName & "\root\cimv2")
sQuery = "SELECT * FROM Win32_Process"
Set objItems = objWMIService.ExecQuery(sQuery)
'For Each Process Name
For Each objItem In objItems
'If name is winword or excel.exe (upper case to avoid possible case issues)
if UCase(objItem.Name) = "WINWORD.EXE" or UCase(objItem.Name) = "EXCEL.EXE" Then
'connect to SQL
set con = createobject("ADODB.Connection")
con.open "Provider=sqloledb;Server=SERVERNAME;Database=DBNAME;User Id=sa;Password=PASSWORDHERE;"
'Construct insert statement
sSQL = "INSERT INTO tblSoftwareAudit VALUES ('" & strComputerName & "', '" & strUserName & "', '" & objItem.Name & "', '" & FormatDateTime(Now) & "')"
'insert SQL statement
set rst = con.execute(sSQL)
End If
Next