- 締切済み
アプリケーション管理。
アプリケーション管理。 法人ですが、現在社内はVPNネットワーク化されています。 そこで、全国各地の営業所(私がいるのは本社)のパソコンにインストールされているプログラム(アプリケーション)の管理をしたいと考えております。 いわゆる『プログラムの追加と削除』みたいな感じで他のパソコンの情報が私の使用しているパソコンで調べられたら一番ベストです。 「こういうことをして下さい」と言うと「やばいやばい。一回アレをアンインストールしないと」と思う輩が出てくるため、抜き打ちというか内緒で行いたいのです。 インストールしなくても遊べるゲームとかはありますが、さすがにそれは範疇外ということで。 有償無償にかかわらず、何か方法があれば教えて頂けないでしょうか。 理想は、1台のPCに調査ソフトをインストールし、調査対象PCにはインストールしない。インストールしたPCから調査ソフトを実行させると、調査対象PCから情報を取得できる。それならばいわゆる抜き打ち調査ということになる。といったような具合です。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
#5の発言の続きです。 「全角スペース」を「半角2個のスペースに置換」して使ってください。 Option Explicit '//////////////////////////// ' 環境定数 '//////////////////////////// '出力先フォルダ 'CONST DEF_OUTPUT= "\\netwokrpc\出力先\"'出力先フォルダ Const DEF_OUTPUT = "C:\" '端末名(IPアドレス化) Const DEF_PC_NAME = "192.168.0.130" 'Const DEF_PC_NAME = "." '←ローカルホストの時 'Const DEF_PC_NAME = "名前解決されたPC名" '//////////////// ' 定数(変更不可) '//////////////// Const HKEY_LOCAL_MACHINE = &H80000002 Const KEY_TOP = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" '//////////////// ' 実行 '//////////////// 'メインを実行 Call Main 'このメッセージボックスは消してよし Call MsgBox("終了!") '//////// ' メイン '//////// Sub Main() Dim l_oReg Dim l_arrSubKeys Dim l_strSubKey Dim l_fsoTs Set l_oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & DEF_PC_NAME & "\root\default:StdRegProv") Set l_fsoTs = GetTextSream(l_oReg.Path_.Server) l_oReg.EnumKey HKEY_LOCAL_MACHINE, KEY_TOP, l_arrSubKeys For Each l_strSubKey In l_arrSubKeys Dim l_blnSts Dim l_strVal l_blnSts = Not CBool(l_oReg.GetExpandedStringValue(HKEY_LOCAL_MACHINE, KEY_TOP & "\" & l_strSubKey, "DisplayName", l_strVal)) If (l_blnSts) Then l_fsoTs.WriteLine (l_strVal) End If Next Call l_fsoTs.Close Set l_fsoTs = Nothing End Sub Function GetTextSream(ByVal p_strServer) Dim l_fsoObj Dim l_strFile Set l_fsoObj = CreateObject("Scripting.FileSystemObject") l_strFile = DEF_OUTPUT & p_strServer & ".txt" '既にファイルが存在していたら、ファイルを削除する If l_fsoObj.FileExists(l_strFile) Then Call l_fsoObj.DeleteFile(l_strFile) End If '書き込み専用で開く Set GetTextSream = l_fsoObj.OpenTextFile(l_strFile, 2, True) End Function
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
試されたようですね (質問者さんの言語的なスキルがわからないので、ちょっとだけ不安でした^^;) 補足内容からすると、ネットワーク越しの実行をしてみようとしているのですね 例えば ・実行端末A(192.168.0.1) ・調査端末B(192.168.0.99) という環境の場合 CONST DEF_PC_NAME= "B" または CONST DEF_PC_NAME= "192.168.0.99" です IPアドレスでもOKです んでもって A端末からそのVBScriptを実行する場合 「A端末の実行するログインユーザ」が「B端末に対してのAdmin権限を持っている」というのが前提となります。 ですので、B端末だけではなくC~Zまで調査端末がある場合、「全てにA端末のユーザと同一のパスワード」の設定が必要となります。 これがドメイン環境下であれば、domainadminを各端末にadmin設定してあげるだけなのですが、そうでなければ全端末に同じユーザとパスワードを設定していく必要があります。 [C#]リモートアクセスのProcess取得で「アクセス拒否」 http://okwave.jp/qa/q1601164.html これでも答えたのですが、これと同じ状態です。 それとサンプルはネットワーク越しに実行したとき、全てA.TXTとして作成されてしまいます。 ちょっとだけ説明を省いて、次の発言で改造したサンプルをアップいたします。 「社内にVBA(エクセルのマクロなど)などのVB系言語を知っている人がいたら、その人にコードを見せて検証した方が早いかもです。」
- temtecomai2
- ベストアンサー率61% (656/1071)
無償でやるなら #3 さんのように WMI をスクリプトで流す方法でしょう。 この場合、手段は大きく分けて 2つあると思います。 1) リモート上にある各 PC にスクリプト ファイルを実行させる方法 2) 管理ユーザーの PC でスクリプトを実行し、リモート上にある各 PC の情報を引っ張ってくる方法 1) の場合は Active Directory であればスクリプト実行を指示できるので楽です。 ただしログオン スクリプトでなく起動スクリプトで実行したほうが良いでしょう。ログオン スクリプトはログオンしようとするユーザーの権限で実行させるためレジストリ等へのアクセスに制限がありますが、起動スクリプトはシステム権限なので制限がありません。 2) に関しては WMI をリモート実行するための敷居が高いです。 各 PC はWMI をリモートから受け入れるためにファイアーウォールに穴を開けたりしておかなければなりません。 ただ、これさえしてしまえばドメイン管理者の権限で相手の情報を引っ張ってこれます。 http://support.microsoft.com/kb/875605/ja 有償製品であれば、有名どころは QAW や LanScope CAT6 とかでしょうかね。 いわゆる "IT 資産管理ツール" と呼ばれるもので、単に各 PC のインストール状況を把握するだけでなく、管理コンソールから各 PC へのアプリケーション インストール指示や、操作制限などを加えることも可能です。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
(文字制限で分割しました。) ↓のプログラムを、コピペして[123.vbs]などのファイル名で保存し、実行してみてください。 Option Explicit '//////////////////////////// ' 環境に合わせて変更する定数 '//////////////////////////// '''出力先フォルダ '''CONST DEF_OUTPUT = "\\netwokrpc\出力先\" '出力先フォルダ CONST DEF_OUTPUT = "C:\" 'テスト用に↑を使用しないでローカルのCドライブ直下に出力 '''端末名 '''これはログイン起動時に各端末毎に実行するのであれば、ピリオドのまま実行 '''ネットワーク越しの端末に実行するのであれば、その端末名 CONST DEF_PC_NAME = "." 'PC名 端末にAdmin権限が他端末からも実行可能 '//////////////// ' 定数(変更不可) '//////////////// CONST HKEY_LOCAL_MACHINE = &H80000002 CONST KEY_TOP = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" '//////////////// ' 変数 '//////////////// Dim l_strFileName Dim l_fsoObj Dim l_fsoTs '//////////////// ' 実行 '//////////////// Set l_fsoObj = CreateObject("Scripting.FileSystemObject") l_strFileName = DEF_OUTPUT & CreateObject("WScript.Network").ComputerName & ".txt" 'このメッセージボックスは消してよし Call msgbox (l_strFileName & "にファイルを作成します") '既にファイルが存在していたら、ファイルを削除する If l_fsoObj.FileExists(l_strFileName) Then Call l_fsoObj.DeleteFile(l_strFileName) End If '書き込み専用で開く Set l_fsoTs = l_fsoObj.OpenTextFile(l_strFileName, 2, True) 'メインを実行 Call Main(l_fsoTs) l_fsoTs.Close Set l_fsoTs = Nothing 'このメッセージボックスは消してよし Call msgbox ("終了!") '//////// ' メイン '//////// Sub Main(p_fsoTs) Dim oReg Dim arrSubKeys Dim sSubKey Dim i Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & DEF_PC_NAME & "\root\default:StdRegProv") i = 1 oReg.EnumKey HKEY_LOCAL_MACHINE, KEY_TOP, arrSubKeys For Each sSubKey In arrSubKeys Dim l_blnSts Dim l_strVal Dim l_strkk l_strVal = "" l_blnSts = Not CBool(oReg.GetExpandedStringValue(HKEY_LOCAL_MACHINE, KEY_TOP & "\" & sSubKey, "DisplayName", l_strVal)) If (l_blnSts) Then p_fsoTs.WriteLine (l_strVal) End If Next End Sub
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
アクティブディレクトリなどでドメイン管理されているのであれば、端末起動時のスクリプトを走らせることができるはずです。 もし端末起動時にスクリプトを走らすことができない場合は、「各端末に特定のAdmin権限を持ったユーザを登録する」という状態にし、そのユーザから各端末のレジストリ値を取得することは可能です。 http://okwave.jp/qa/q1253134.html VBのプログラムで書かれていますが、アプリケーションとしてキックしてもよいですが、スクリプト化してレジストリ値を読み取ることもできます。 ↓ ※MicrosoftTechNet レジストリ http://www.microsoft.com/japan/technet/scriptcenter/scripts/os/registry/default.mspx WMIやVBScriptがわかると、手っ取り早く管理できます。
- koi1234
- ベストアンサー率53% (1866/3459)
クライアントに何も入れずにというとかなり難しくなってくると思います 探したところ実際どの程度使えるか分かりませんがこんなのがありました http://www.so-ten.co.jp/products/logvillage/ 数年前同様なこと出来ないかなあと思って どこかで見つけたような気がするのですが今探しても探しきれてません 記憶では上記URLと似た様な情報だったような気がするんですが クライアントのソフトを入れる必要はあるが入れておきさえすれば 以後の情報取得はサーバ側で出来るといった形だと記憶しています 会社の規模が分からないんですが有料は結構値段がそれなりにかかり フリーではそれなりに機能が限定されるといったことになるかと思います
補足
早速やってみました。 自分のPCだと成功ですね。 ただ、他のPCだとうまくいきません。 おそらくは他のPCがAdmin権限でログインしていることが条件だと思いますが。 それと、 CONST DEF_PC_NAME= "." の所は他のPCだとどういうふうに記述するのでしょうか。 例えば、他のPCのフルコンピュータ名が「ZZZ」の時は、 CONST DEF_PC_NAME= "ZZZ" なんでしょうか。あと、IPアドレス指定ではできないのでしょうか。その方が何かと楽なもので。 教えて君で申し訳ないですが、何卒宜しくお願い致します。