実際に Office を使用しているユーザーを特定する

実際に Office を使用しているユーザーを特定する

弊社のコンピューターには Office がインストールされており、もちろんドメイン内にあります。

ライセンスの更新が近づいており、実際に Office を使用しているユーザーを把握したいため、実際に使用しているユーザーに対してのみライセンスを購入することでコストを節約しています。

私たちは System Center を持っていませんが、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

通常、このような推奨は行いませんが、次の 2 つの可能性が考えられます。

1) システム センター - お持ちでないことは承知していますが、試用してデータを取得してからアンインストールすることができます。

2) タスク GPO をスケジュールします。かつて、限られた予算でソフトウェアの使用状況を監視するよう依頼されたことがあります。SQL データベースを構築してこれを行いました (テキスト ファイルまたは別の DB 形式でもかまいません)。次に、アプリケーションの存在を確認する VBS を構築しました (winword.exe は Word、excel.exe は Excel など)。Windows プロセスが検出されると、SQL DB に接続し、日時、マシン、ユーザー、アプリケーションを記録します。このスクリプトを GPO 経由でスケジュールされたタスクとして展開し、特定のマシン セットで 15 分ごとに実行しました。数日後、SQL をいくつか選択して、ソフトウェアの使用状況の大まかな概要を把握できました。

オプション 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

関連情報