-1

.dll ファイルのバージョンを確認することにより、スクリプトを使用して、サーバー上のソフトウェアのインストールをリモートで監視しようとしています。これが可能かどうかはわかりませんが、すべてのサーバーにインストールした後、bat ファイルを実行してすべてのサーバーを調べ、サーバー名とその .dll ファイルのバージョン番号を含むログ ファイルを作成したいと考えています。提案は素晴らしいでしょう。ありがとう。

4

1 に答える 1

1

最初にここから STRINGS.EXE をダウンロードします (Unicode を処理するため)。 http://technet.microsoft.com/en-us/sysinternals/bb897439.aspx

ここに私がかなり長い間使ってきた小さなものがあります。それはあなたが求めたよりも少し多くのことをしますが、他の誰かがこれをすべて持っていることを好むかもしれません. 不要な部分を簡単に削除できます。必要に応じてファイル タイプを追加/削除し、不要な出力セクションを削除します。それはあなたが求めたとおりにはなりませんが、難しい部分は完了し、あなたが適切だと思うように適応することができます. コードを FileVersions.bat (またはその他) として保存します。このbatファイルとダウンロードしたSTRINGS.EXEを同じフォルダに入れてください。このバット ファイルを実行して、FileVersions.txt (または任意の名前のバット ファイル) に出力を取得します。このようになります。現在のフォルダーの下にあるフォルダー内の指定されたすべてのファイルの種類のバージョンを取得します。必要に応じてこれを変更し、必要に応じて複数のマシンを処理します。

====== 出力 ============ *.dll *.ocx *.exe ファイルのバージョン - Thu 08/08/2013 21:13:28.17

File=C:\Drivers\storage\strings.exe
FileDesc=strings
FileVer=2.41
ProductName=Sysinternals Strings
ProductVer=2.41

File=C:\Drivers\storage\R159108\TEACico2.dll
FileDesc=TEACico2.DLL
FileVer=1, 1, 0, 0
ProductName= TEACico2 DLL
ProductVer=1, 1, 0, 0

====== 出力の終わり ============

@ECHO OFF
TITLE %~n0
PUSHD %~dp0
SET FileTypes=*.dll *.ocx *.exe
SET OutFile=%~n0.txt
IF EXIST %OutFile% DEL /q %OutFile%
ECHO.Retrieving file versions for %FileTypes% files
ECHO.
ECHO.Versions for %FileTypes% files - %Date% %Time% > %OutFile%
ECHO.
FOR /R "%CD%" %%A IN (%FileTypes%) DO ECHO.%%A & CALL :FileVersion "%%A" >> %OutFile%
ECHO.
ECHO.Results are in %OutFile%
pause
GOTO :eof

REM ========================= Subroutines =========================
:FileVersion
SETLOCAL
ECHO.
ECHO.File=%~1

SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^|  FIND /I "FileDescription"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :FileVer
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET FileDesc=%%B
IF NOT "%FileDesc%"=="FileVersion" SET FileDesc

:FileVer
SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND /I "FileVersion"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :ProductName
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET FileVer=%%B
SET FileVer

:ProductName
SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND /I "ProductName"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :ProductVer
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET ProductName=%%B
IF NOT "%ProductName%"=="ProductVersion" SET ProductName

:ProductVer
SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND /I "ProductVersion"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :Done
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET ProductVer=%%B
SET ProductVer

:Done
ENDLOCAL
GOTO:EOF
于 2013-08-08T20:56:10.837 に答える