web-dev-qa-db-ja.com

ウイルス対策製品がインストールされているかどうかを確認するにはどうすればよいですか?

15,000台を超えるマシンを使用する大規模なインストールがあります。トレンドマイクロのバージョンがインストールされているはずです。しかし、それは確かにわかりません。

これらはすべてXPさまざまなSPレベル、Vistaの両方RTMおよびSP1、および2000と2003サーバー。

どのように判断できますか:

  1. AV製品がインストールされているかどうか。
  2. インストールされている製品のバージョンは?
  3. 同梱されているパターンファイルのバージョンは何ですか?

アイデア?

おかげで、

4
NotMe

15,000のホストについて話しているので、ネットワークからそれぞれのホストをクエリすることは非常に非効率的です。

次に、適切なソフトウェアがインストールされて実行されていることを確認するために、各ホストでウォッチドッグを実行することが適切です。このウォッチドッグは、サービスとして実行されるソフトウェアの一部、スケジュールされたスクリプト、またはIntel vProのようなものを使用する場合はハードウェアベースの場合もあります。

AVソフトウェアがインストールされているかどうかを確認するには、次のPowerShellコマンドを使用できます-

$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
              -computername "." -filter "Name like '%antivirus%'"

最後にfilter引数があることに注意してください。この引数をカスタマイズして、適切な製品を探していることを確認できます。

like演算子で少し遊んだ後、アンチウイルスの説明と小さなバリエーションをあちこちに釘付けにすることができるはずです。 上記の私の例(「アンチウイルス」という単語を含むもの)はかなり単純化していることに注意してください。代わりに、承認済みのアンチウイルスソフトウェアと一致する特定のパターンを探す必要があります(「Trend Micro Antivirus%」など)

とにかく、上記のコマンドは、filterステートメントに一致するインストール済み製品のコレクションを返します。ここから、$avSoftware.Countがゼロより大きいかどうかをテストできます。この場合、ウイルス対策ソフトウェアがインストールされています。以下の例は、インストールされているすべてのウイルス対策ソフトウェアをリストしています-

if ($avSoftware.Count -gt 0) {
    foreach ($av in $avSoftware) {
        write-Host $p.Name
    }
} else {
    write-Host "No AV software found"
}

AVが見つからなかったことを伝えるメッセージを出力するだけでなく、もっと便利なことを実行する必要があります。

  • 管理者に通知
  • ネットワークからAVをインストールする

また、インストールされているAVのバージョンを取得することも希望しています。そのためには、Win32_ProcessVersionプロパティを使用できます。インストールしたソフトウェアのバージョン番号も出力するように、上記のコードを次のように変更してみましょう-

$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
              -computername "." -filter "Name like '%antivirus%'"

foreach ($av in $avSoftware) {
    write-Host $av.Name, $av.Version
}

インストールされているウイルス定義ファイルのバージョンについては、特定のAV WMIインターフェイスごとに依存する必要があります。これについては、ベンダーのドキュメントを参照する必要があります。

覚えておくべきもう一つのこと。 AVが実行されていない場合、ホストにAVがインストールされていることを知るだけではおそらく不十分です。インストールされているAVを確認した後、そのプロセスが実行されていることを確認する必要があります。そのためには、各AVソフトウェアの適切なプロセスを把握し、次のように探す必要があります。

$processes = get-wmiobject -class "Win32_Process" -namespace "root\cimv2" `
             -computername "." -filter "Name = 'TeaTimer.exe'"

if ($processes.Count -gt 0) {
    foreach ($p in $processes) {
        write-Host $p.Name
} else {
    # AV not running. Launch it here or notify someone 
}

上記の例は、「TeaTimer.exe」と呼ばれるSpybotプロセス(厳密にはAVではありませんが、画像を取得します)を探します。代わりにプロセスを探すように変更してください。

さて、これらすべてが言ったように、そのような数千のホストを処理している場合は、おそらくいくつかの管理ツール(LANdesk、Microsoft System Center、Level Platformsなど)に投資する必要があります。これらのツールを使用すると、作業がずっと簡単になります。

7
Roberto Selbach

現在のバージョンのWindows(xp sp3 +、Vista、win 7)では、Windowsセキュリティセンターがアンチウイルス製品がインストールされていて最新かどうかを確認するために使用するのと同じWMIプロバイダーを照会できます。

次に例を示します。

Set objSWbemServices = GetObject("winmgmts:\\.\root\SecurityCenter")
Set colFirewall = objSWbemServices.ExecQuery("Select * From antivirusProduct",,48)
For Each objAntiVirusProduct In colFirewall
  WScript.Echo "companyName: " & objAntiVirusProduct.companyName
  WScript.Echo "displayName: " & objAntiVirusProduct.displayName
  WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid
  WScript.Echo "onAccessScanningEnabled: " & objAntiVirusProduct.onAccessScanningEnabled
  WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate
  WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber
Next

とはいえ、すべてのウイルス対策製品がWMIプロバイダーを登録するわけではありませんが、一般的な製品のほとんどは登録するものと思います。また、これがMicrosoftによって正式にサポートされているかどうかは不明であるため、将来のバージョンではなくなる可能性があります。

ここで他のWMI提案と組み合わせて試してみて、これが機能しない場合は、インストールされている製品のスキャンにフォールバックすることができます。

3
Chris Sears

トレンドマイクロについてお話を伺いましたが、私たちはトレンドを使用しています。スケジュールされたタスクは、システムのフルスキャンを実行し、結果をテキストファイルに書き込みます。実際には、日付がファイル名として含まれているログファイルです。C:\ TRENDMICROフォルダーの20090517.logのようになります。これはスキャン結果を含んでいるだけなので、小さなファイルです。

およそ100台のコンピューターがある場合、サーバー上のpowershellスクリプトがすべてのコンピューターをウォークスルーし、それらのファイルを連結して、「Virus found count(0)」という文字列がないものだけを探すのは簡単です。 」明らかに、そのファイルとフレーズが存在しない場合、何かがおかしい:AVが最近実行されなかった、ウイルスが検出された、AVがインストールされていない、など。

しかし、私の貧しい人のバージョンの代わりにあなたのためにそれをすべてやってくれるAVのエンタープライズバージョンはありませんか?

2
Knox

エンタープライズバージョンに関するKnoxの+1。同意する。 Trendのエンタープライズデスクトップソリューションには、クライアントと、現在使用しているスキャンエンジンとパターンを追跡するサーバーがあります。また、展開することもできます。これを使ってあなたの目標に向かって働きます。これを使用してウイルスバスターCorp.の再インストールを配備します。ゲームのこの時点であなたがどこにいるのかを理解するためにスクリプトを展開する努力にさえも気になりません。最初からやり直すのが最善です。エンタープライズツールをまだお持ちでない場合は、ライセンスについてトレンドと連携してください(これは本当に私を驚かせます)。そうしないと、誰かが購入の意思決定の誤りを説明する必要があります。

2
squillman

さまざまなレジストリエントリまたはファイルをチェックして、製品がインストールされているかどうかを確認するログオンスクリプトを作成します。次に、スクリプトは、実行するまたはしないマシンのログを作成できます。

Dim WSHShell,strRegKey 
Set WSHShell = WScript.CreateObject("WScript.Shell") 
strRegKey="HKLM\Software\Symantec\Version" 
WSHShell.RegRead(strRegKey) 
Wscript.quit(0) 
1
Jack B Nimble

これがどれほど実用的かはわかりませんが、15,000台のホストを想定していますが、テキストファイルにチェックインするマシンの一覧がある場合は、レジストリのアンインストールキーをクエリして結果を解析できます。

1行にマシン名を付けたComputers.txtという名前のテキストファイル:

COMPUTER1
COMPUTER2

Batch.batという名前の例:

@echo off

for /F %%i in (computers.txt) do call :SUB %%i

GOTO :EOF

:SUB
echo %1
reg query "\\%1\HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s

これはテキストの情報過多の可能性があることに気づきましたが、各製品のアンインストール情報が含まれているレジストリエントリを知らなくても、探しているA/Vソフトウェアの結果を解析できます。

これを特定の製品のレジストリエントリに合わせて調整し、特定の製品のレジストリキーのレジストリクエリに置き換えることもできます。

1
romandas

質問に順番に答える

  1. および2。

各システムで実行するスクリプトを作成します。アンインストールレジストリキーを照会します。各サブキーを確認する必要があります。この場合、WMIを使用するのが最善の方法です。そのキーには、製品の名前とバージョンが表示されます。スクリプトについては この例 を参照してください。

3。

私は試行錯誤しますが、トレンドの場合、HKEY_LOCAL_MACHINE\Software\TrendMicroのレジストリまたはローカルディレクトリのconfigファイルまたはiniファイルに定義バージョンを配置すると思います。

それはAVソフトウェアのそのバージョンを説明するだけです。複数のバージョンでこれを行う必要があります。

1
Rob Haupt