初心者必見!新規サーバ18台のセキュリティーパッチを一括でインストールする方法

このQ&Aのポイント
  • 初心者の方でも簡単に実行できる方法として、新規に構築したサーバ18台にセキュリティーパッチを一括でインストールする方法をご紹介します。
  • ネットワークの共有フォルダにセキュリティーパッチファイルを配置し、バッチファイルを使用してサイレントインストールを行います。
  • インストールの結果はログファイルに保存され、インストールできなかったファイルも記録されます。簡単な手順で効率的にセキュリティーパッチを適用しましょう!
回答を見る
  • ベストアンサー

初心者です。。。

初心者です。。。 外部(インターネット)に接続していない新規に構築したサーバ18台にセキュリティーパッチをあてる事になりました。 台数が多いため、サイレントインストール(バッチファイル)で行ないたいと考えています。 そこで、質問です。 下記のバッチファイルが全然ダメです。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (*.exe) do ( set Inst_Fail=%%i echo %Inst_Fail%のインストール >>Instarll_log.log echo %Inst_Fail%のインストール echo %SrcDir%%Inst_Fail% /quiet /norestar >>Instarll_log.log %SrcDir%%Inst_Fail% /quiet /norestar ) goto END ---------------------------------------------- やりたい事 (1)ネットワークの共有フォルダに置いたセキュリティーパッチファイルを全てインストールする。 (2)インストールの結果をログファイルに保存する。 (3)インストール出来なかったファイルをログファイル保存して、次のファイルをインストールする。 もう少し自分で考えたいのですが、時間がなくて質問しました。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • luka3
  • ベストアンサー率74% (299/401)
回答No.1

最初のforでSrcDirが指定されてないのでexeが見つからずすぐ終了してしまいます。 とりあえずはこんなかんじでしょうか。 @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.exe) do ( echo %%iのインストール >>Instarll_log.log echo %%iのインストール echo %%i /quiet /norestar >>Instarll_log.log rem %%i /quiet /norestar ) goto END

関連するQ&A

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

  • フォルダごとのファイル数を数えるためのバッチ

    フォルダごとのファイル数を数えるためのバッチをネットで調べて作成しました。 このバッチファイルを親フォルダ直下に配置し、ダブルクリックで実行しています。 ------------------------------------------------------------------------- @echo off setlocal enabledelayedexpansion set /a counter=0 dir %1 /ad /s /b >trash.csv for /f "tokens=1 delims=," %%i in (trash.csv) do ( set /a counter = 0 for %%A in (%%i\*) do ( if exist %%A ( set /a counter=counter+1 ) ) echo %%i : !counter! ) ------------------------------------------------------------------------- しかし、結果は、フォルダ名は取得していますが、ファイル数が取得できていません。 こんな感じです。 setlocal コマンドに無効なパラメータが指定されました d:\画像\フォルダ1 = 0 d:\画像\フォルダ2 = 0 d:\画像\フォルダ1\フォルダ3 = 0 どたなかどこが間違っているのかご指摘ください。

  • バッチファイルの変数引継ぎについて

    行き詰ってしまったので、どなたか知恵を授けていただければと思います。 現在、あるソフトウェアの「バッチモード」という機能を使用したバッチを作成していて、構文が > sdcmd batch ***.txt 上記のようにコマンドを羅列したテキストファイルを指定した実行コマンドになります。 sdcmd以降はソフト指定のコマンド以外は使用できず、変数設定ができない為に変数設定とログ保存を兼ねて上記コマンドを記載したバッチを > setlocal EnableDelayedExpansion > set ○=△△△ > set ■=◇◇◇ > call aaa.bat %* >> aaa.log 2>&1 という内容の呼び出しバッチを作成たのですが、テキストファイル内の変数が代入されずに 実行されてしまいます。 cmd上から直接 > setlocal EnableDelayedExpansion > set ○=△△△ > set ■=◇◇◇ > sdcmd batch ***.txt >> aaa.log 2>&1 を実行しても変数の代入は行われませんでした。 cmd上で変数とテキストファイル内のコマンドを手動実行すれば変数は解決できます。 設定した変数を、テキストファイル内の変数値に代入する方法はあるでしょうか。

  • MSDOSバッチコマンド for-do

    過去31日間、today.dat を保存するバッチコマンドを、WinXPで組みましたが、doループ内で、環境変数:nextday (rename old%%i.dat old%nextday%.dat) が、正しく帰ってきません。 アドバイスお願いします。 :------------------------------------------- @echo off setlocal set maxday=30 set delday=31 cls echo 開始します。 Enter キーを 押してください。 pause > nul echo delete old%delday%.dat for /l %%i in (%maxday%,-1,1) do ( set /a nextday=%%i+1 echo. set nextday echo rename old%%i.dat old%nextday%.dat ) echo. echo copy today.dat old1.dat echo. echo 終了しました。 Enter キーを 押してください。 pause > nul endlocal :-------------------------------------------

  • 日付付きのログファイル名

    バッチのログファイルを日付をつけて保存するようにしようと思っています。 ----------------------------------------------- set DATE=%date:~0,4%%date:~5,2%%date:~8,2% set logfile=c:\opt\BackupTools\log\BACKUP_%DATE%.log echo メッセージ >>%logfile% ----------------------------------------------- 1回目に実行時には期待通りBACKUP_20060909.logのようなファイルが出来たりしますが、2回目の実行になると出来たファイルに上書きされないし、新しく生成されるログファイルはBACKUP_2006099.logだったり、BACKUP_2006.logになったりしますが、何が原因なのでしょうか。

  • コマンドライン引数の展開について

    バッチファイル内で%~dp0とすれば ファイルが保存されているディレクトリを取得できます。 これを利用して環境変数に set TEST=pushd %~dp0 とセットし、 %TEST% と展開することによって バッチファイルのディレクトリに移動しようとしたのですが、うまく行きませんでした。 ファイルが保存されている場所への移動手段をわかりやすくまとめたいです。 それ以外にも各バッチファイルの先頭で行う処理を共通化する目的があります。 以下のように第一引数として渡すやり方もあるのですが、 test.bat---- call common.bat %~dp0 common.bat---- pushd %~dp1 setlocal 共通化部分ではsetlocalを使うため、 別ファイルに分割してしまうと有効範囲が変更され都合が悪いのです。 何かうまい回避方法はありますでしょうか? (そもそも環境変数内で%~dp0が展開されてくれれば済む話なのですが…)

  • .bat(バッチ)から.batを実行したいのですがエラーになってしまいます。

    <やりたい事> (1)メニュー的なバッチからOracleインストール後 (2)OracleのDB作成sqlを実行する.bat(バッチ)を実行する。 <現状> メニュー的バッチから(2)をCALLで呼びだすと「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とコンソールに表示されてしまいます。 コマンドの拡張子を実行できる設定になっている事は確認できています。 また、コマンドプロンプトから(2)のバッチを実行すると実行できました。 色々と調べて見たのですが原因、解決策が見つかりません。 どうか皆様のお力をお借りできればと思います。 宜しくお願いします。 ↓以下バッチの詳細 <(1)メニュー的なバッチ> ECHO OFF :Start ECHO. ECHO 1. ・・・ 運用APLデータベース設定 %P5% ECHO 99. ・・・ 終了 SET Process= SET Choice= SET /p Choice=Type 選択して下さい。 IF '%Choice%'=='1' GOTO MakeDB :MakeDB REM 5. 運用APLデータベース設定選択時 SET Process=運用APLデータベース設定 ECHO *** "%Process%"開始 *** REM 文字変換バッチ実行 CALL C:\TEMP\aaaa.bat IF ERRORLEVEL 1 GOTO ExceptionError :InputError REM 入力エラー時 ECHO 不正なパラメータが入力されました。 GOTO Start :ExceptionError REM 例外エラー時 ECHO ******** 失敗しました。 ******** GOTO Start :End REM バッチを終了する。 EXIT <(2)OracleのDB作成sqlを実行する.bat(バッチ)> SET ORACLE_INSTALL_DIR=C:\oraclexe SET ORACLE_BIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\BIN SET ADMIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\admin\XE SET ORADATA_DIR=%ORACLE_INSTALL_DIR%\oradata\XE SET DBS_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\dbs SET USERNAME=aaa SET PASSWORD=bbb REM // LOGファイル名用に日付の取得 // FOR /F "tokens=1,2,3 delims=/, " %%i IN ('date /t') DO SET SYSDATE=%%i%%j%%k REM // 「Win31J」に文字変換 // ECHO 文字変換開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\Drop.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError ECHO DBユーザー作成開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\CreateDB.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチファイルでPINGログ取得

    バッチファイルでPINGのログを取得したいと考えています。 下記のバッチを作成して実行してみましたが @echo off set LOG=log.log echo "------------ START -------------" >> %LOG% ping -w 1 -n 1 localhost >> %LOG% 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」とエラーメッセージが延々と表示されます。 ログにはECHOで出力したSTARTしかありません。 コマンドラインから上記のPINGを打つと正常に終了します。 使用しているOSはWinXP SP2です。 何が原因なのか解決法をご存知の方がいらっしゃいましたら宜しくお願いします。

  • コマンドの実行結果を変数に格納いしたい。

    有るプログラムへ特定ディレクトリのファイル数を渡す必要があり、バッチファイルを書いてますが、うまく行きません。 アドバイスを頂けましたら幸いです。 コマンドの実行欠課を変数に格納する方法を調べており、FOR文を使う事は分かったのですが、パイプを使った処理がうまく行きません。 ◎実行したいコマンド DIR /B | FIND /C /V "log” ◎バッチファイル @ECHO OFF for /f "usebackq tokens=*" %%i in (`DIR /B | FIND /C /V "log"`) do @set RESULT=%%i echo %RESULT% @ECHO ON パイプを使わず、単純なコマンドだと正常に変数に格納されますので、パイプでFINDに渡している事がだめだと思っております。 こういった場合、どう書けばよいかお教えください。