
Tenemos Office instalado en los ordenadores de nuestra empresa, que por supuesto están en un dominio.
Estamos listos para renovar la licencia y queremos saber qué usuarios realmente usan Office, por lo que ahorramos algo de dinero comprando licencias solo para las personas que realmente lo usan.
No tenemos System Center, que según me han dicho tiene algún tipo de herramienta de auditoría para hacer eso, así que quiero saber si hay una manera de obtener esta información en todas las máquinas del dominio, ya sea con el directorio Windows/Active, integrado. en herramientas, o con una herramienta gratuita.
Específicamente, lo que espero que haga la herramienta es algo como esto:
Machine #1:
winword.exe: 5 times last month
excel.exe: not run last month
powerpoint.exe: 20 times last month
Machine #2:
...
...
...
Respuesta1
Normalmente, no haríamos recomendaciones de este tipo, pero se me ocurren dos posibilidades:
1)System Center: sé que no lo tienes, pero puedes probarlo, obtener los datos y luego desinstalarlo.
2) Programar tarea GPO. Una vez me pidieron que supervisara el uso del software con un presupuesto limitado. Hice esto creando una base de datos SQL (aunque los archivos de texto u otro formato de base de datos funcionarían. Luego construí un VBS que verificaba la existencia de una aplicación (winword.exe es Word, excel.exe es Excel, etc.). Si detectaba ese proceso de Windows, se conectaría a la base de datos SQL y registraría la hora/fecha, la máquina, el usuario y la aplicación. Implementé este script como una tarea programada a través de GPO para ejecutarse cada 15 minutos en un conjunto determinado de máquinas y durante algunos días. SQL selecciona más tarde. Tenía una idea aproximada del uso de SW.
Si bien la opción 2 no es infalible y depende de que el usuario tenga las aplicaciones abiertas cuando se ejecuta el script, la mayoría de los usuarios que trabajan en el correo electrónico de Outlook o en un documento/hoja de cálculo de Word lo tendrán abierto durante 15 minutos... especialmente si es parte de su trabajo.
Algo parecido a esto debería servirle para empezar: 'En caso de error, al reanudar a continuación, los usuarios dejarán de ver mensajes. Eliminar mientras se desarrolla
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