Normalerweise würden wir solche Empfehlungen nicht machen, aber ich kann mir zwei Möglichkeiten für Sie vorstellen:
1) System Center - Ich weiß, Sie haben es nicht - aber Sie können es testen, die Daten abrufen und dann deinstallieren.
2) Planen Sie das Gruppenrichtlinienobjekt für Aufgaben. Ich wurde einmal gebeten, die Softwarenutzung mit einem begrenzten Budget zu überwachen. Ich habe dazu eine SQL-Datenbank erstellt (obwohl Textdateien oder ein anderes DB-Format funktionieren würden. Ich habe dann ein VBS erstellt, das auf das Vorhandensein einer Anwendung überprüft hat (winword.exe ist Word, excel.exe ist Excel usw.). Wenn es erkannt wurde Bei diesem Windows-Prozess wird eine Verbindung zur SQL-Datenbank hergestellt und Uhrzeit / Datum, Computer, Benutzer und Anwendung protokolliert. Ich habe dieses Skript als geplante Aufgabe über ein Gruppenrichtlinienobjekt bereitgestellt, um es alle 15 Minuten auf einem bestimmten Satz von Computern und für einige Tage und einige Tage auszuführen SQL wählt später aus Ich hatte einen Baseballstadion der SW-Nutzung.
Option 2 ist nicht kugelsicher und setzt voraus, dass der Benutzer die Apps geöffnet hat, wenn das Skript ausgeführt wird. Bei den meisten Benutzern, die in Outlook-E-Mail oder in einem Word-Dokument / einer Word-Tabelle arbeiten, ist diese Option 15 Minuten lang geöffnet ihre Arbeit.
Für den Anfang sollten Sie Folgendes beachten: 'Wenn der Fehler behoben ist, werden Benutzer keine Nachrichten mehr sehen. Während der Entwicklung entfernen
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