LoginSignup
18
27

More than 5 years have passed since last update.

Windows/Mac端末のインストールアプリ情報の抽出方法

Last updated at Posted at 2017-09-24

まえがき

有償IT資産管理ツールを使用せずに端末のインストールアプリケーション情報を
管理するための元データ作成を行います。作成後はEXCELのピボットやBIツール等に
取り込んで活用可能です。

ただしあくまで目安ですが、100台超の拠点及び職場ならば、
LanScopeCatやSKYSEA Client View、SCCMなどの有償ツールを利用されたほうが、
対費用効果が高いので導入することをお勧めします。

対象環境

  • Windows端末32bit/64bit(XP~10までのOSは動作確認済み)
  • Mac OS端末(対応OSわからないです。すみません)
  • 管理者権限ユーザ(実行時に利用)

Windows端末での情報取得

WindowsOSは下記レジストリパスにインストールアプリの情報を
格納しています。OSが32bitか64bitかで格納先が変わるので注意です。

32bitOSのレジストリパス
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
64bitOSのレジストリパス
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

ということで、上記パスから情報を抜き出すツールを作成します。
VBSでも構いませんが今回はなぜかbatファイルで作成してみました。
管理者権限で実行します。以下は構文例です。

WindowsApp.bat
@echo off

set DT=%DATE:~-8,2%%DATE:~-5,2%

rem ソフトウェアの一覧情報のパスを指定(64bit版用にWow6432Node)を追加
echo "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" > registry_path.txt
echo "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" >> registry_path.txt

rem ソフトウェア名をファイルに出力(DisplayNameで開始している行のみ、セキュリティの更新ソフトは無視)
for /F  "delims=" %%A IN (registry_path.txt) DO (
    for /F "tokens=2,*" %%I in ('reg query %%A /s ^| findstr "\<DisplayName" ^| findstr /V "更新 修正 (KB"') do (
        echo %COMPUTERNAME%,%%J >> %COMPUTERNAME%_%DT%.txt
    )
)

rem ソフトウェア名の昇順で並び替え
sort %COMPUTERNAME%_%DT%.txt > install_sort_list.txt

rem 重複しているソフトウェア名があるので、重複データを削除
type nul > %COMPUTERNAME%_%DT%.txt
for /f "delims=" %%I in (install_sort_list.txt) do findstr /X /C:"%%I" %COMPUTERNAME%_%DT%.txt >NUL || (echo;%%I) >> %COMPUTERNAME%_%DT%.txt

rem 不要なファイルの削除
del registry_path.txt
del install_sort_list.txt

すると、batファイルと同一のフォルダに「PC名_yymm.txt」というファイルが
出力されます。ファイル内は以下の通り「PC名,アプリケーション名」のように
並んでいるように出力しています。これは後々PCごとにピボット管理するために整形しました。
111.PNG

このあと出力されたファイルを共有スペースに自動で移動されるように
するとなおよいと思います。

MacOS端末での情報取得

MacOSは、./Applicationsに各種アプリケーションが格納されているので、
ここの情報をシェルで抜き出します。一例として、以下のcommandファイルを
作成しました。

MacApp.command
#!/bin/sh

#ファイル名を変数に格納
HoT=$HOSTNAME
Str1=_
Str2=,
DAT=$(date +%y%m)
FlN=$HoT$Str1$DAT

#ソフトウェア一覧情報をリダイレクト
ls -1 /Applications > $FlN.txt

#sedで各行にホスト名を追加
sed -e s/^/${HoT}${Str2}/ ${FlN}.txt > INPUTFILE.TXT
cp INPUTFILE.TXT ${FlN}.txt
rm INPUTFILE.TXT

ただしMacOSで上記ファイルを実行する前に、
実行権限を付与するためパーミッションを変更するコマンドを実行します。
以下、手順を記載します。

1.検索ボックスで「terminal.app」と入力してEnter

2.terminal画面上で以下のコマンドを入力

chmod +x <commandファイル格納先のフルパス><アプリケーション名>.command

これ以降はcommandファイルをGUI上でダブルクリックすれば実行できます。

出力されたテキストファイルの中身はWindows端末時と同じ体裁に整形しています。
どこか一箇所へ集めましょう。

テキストファイルの内容をCSVファイルに集約

一箇所のフォルダに集約後、コマンドプロンプトで以下を実行します。
この時集約ファイルのPC名か年月部分をワイルドカードで指定しておきます。

AllApp.bat
type '<PC名の一部>*'.txt > AllApp_yymm.csv

CSVファイルに指定したファイル分のデータが結合されて元データ完成です。

以上です。

まとめ

このデータを元データとして利用すれば、
EXCELのピボット等で活用できるかと思います。

この方法を応用すればOS情報やウィルス対策ソフトのバージョン情報等々も
抽出し、同じ管理台帳にまとめることが可能です。

ツールさえ作成すれば上記の情報収集はほぼ無料で実施できます。

しかし有償のIT資産管理ツールと比較した場合、
以下の機能を補うことは工数の都合上難しいのではと考えております。

  • 操作ログの取得(大半の市販ツールはオプションの一つとして利用可能)
  • 特定アプリケーションの起動禁止
  • 特定端末のネットワーク利用の禁止(MACアドレス/IPアドレスでの任意禁止)
  • ソフトウェアの一括配布・実行

管理に膨大な時間を要するほど組織が大規模化した場合は、
冒頭で記載したIT資産管理ツールを導入することを検討したほうがよいと思います。

加筆・修正する点などがあればご指摘頂けるとありがたいです。

18
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
27