タグ「コマンド」が付けられているもの

固定IPを使用するLANの中で、今どのIPアドレスが空いているか適当にpingを打ってみることがありますが、連続して応答が返ってくるとちょっと疲れます。1~254まで全部手動で行うのは面倒なので、コマンドの例を探したらありましたのでメモ。

コマンドプロンプトの例

例えば、192.168.0.2~192.168.0.10を調べる場合

指定した範囲でpingarpを連続で打つコマンドです。

for /l %i in (2,1,10) do ping -w 1 -n 1 192.168.0.%i && arp -a 192.168.0.%i

最初の(2,1,10)は変数「%i」を2から10まで1ずつ加算していくことを表しています。

結果のログをテキストファイルで残す場合

コマンドの後ろに>> result.txtなど任意のファイル名を記載します。

for /l %i in (2,1,254) do ping -w 1 -n 1 192.168.0.%i && arp -a 192.168.0.%i >> result.txt

上記のようにファイル名のみ指定すると、ファイルの保存先はコマンドを実行したディレクトリに保存されます。(ほとんどの場合、ユーザーフォルダ)

分かりやすい場所に保存する場合はd:\result.txtなど、任意のディレクトリに変更します。

バッチファイルを作る場合

このコマンドをバッチファイルにする場合は、3カ所ある「%i」「%%i」にして「.bat」の拡張子を付けた名前で保存します。

for /l %%i in (2,1,254) do ping -w 1 -n 1 192.168.0.%%i && arp -a 192.168.0.%%i >> result.txt

結果について

応答があったもののみがテキストファイルに出力されていますので、ここにないIPアドレスが空いているということになりますが、たまたま電源が入っていない機器も含まれるので注意が必要です。

PowerShellのスクリプトの例

こちらはPowerShell192.168.0.1~192.168.0.255まで連続でpingを送信するスクリプトです。以下のスクリプトをPowerShellに貼り付けるか、メモ帳で「.ps1」という拡張子を付けて保存します。

$date = Get-Date -Format _yyyy_MMdd_HHmmss
for ($i = 1; $i -lt 255; $i++) {
        ping 192.168.0.$i >> pinglog$date.txt
}

実行すると、実行結果の入ったテキストファイルが「pinglog_2016_1127_092028.txt」のようなファイル名で実行ディレクトリに保存されます。

WordPressやMovableTypeで使っているブログ更新時のPING送信先が活きているか、PowerShellで簡単に調べるスクリプトを見つけたのでメモ。

ping送信先のテキストファイルを用意

例えば、以下のテキストをpinglist.txtという名前を付けて保存

google.co.jp
facebook.com
yahoo.co.jp

スクリプト作成

以下のスクリプトをメモ帳に貼り付け、先ほどのpinglist.txtと同じ階層にping.ps1といった感じで適当に.ps1の拡張子を付けて保存します。

echo pingを実行しています。しばらくお待ちください。

$date = Get-Date -Format _yyyy_MMdd_HHmmss
$target = Get-Content pinglist.txt

foreach ($item in $target) {
  ping $item >> pinglog$date.txt
  }

echo 結果を「pinglog$date.txt」に保存しました。

pause

スクリプト実行

スクリプトファイル(ping.ps1)を右クリックして「PowerShellで実行」をクリックするとスクリプトが実行されます。

 ↓

実行結果

実行結果は以下のような内容でスクリプトファイル(ping.ps1)と同じ階層に「pinglog_2016_1126_225217.txt」といったテキストファイルが作成されているので開いて確認できます。

これで、今後の確認作業が楽になりそうです。

Javaをインストールしていると頻繁に更新のポップアップのお知らせが出てザイのですが、更新しておかないと気が済まないので更新はするのですが、更新ついでにアマゾンとかサードパーティーのツールバーをうっかり入れてしまったり、最近では必ずインストールのチェックを入れないと、インストールの画面が進まないことがありイライラします。

特に最近のコレ↓

チェックしないとエラーが表示されて先に進めません...。

でも回避する方法がありました。

Javaの詳細設定で回避

  1. コントロールパネルのJavaを開く
  2. 詳細タブの「Javaのインストールまたは更新時にスポンサーのオファーを表示しない」にチェックを入れる

これで、次回からはツールバーを選択する画面は出なくなります。

ただ、既にJavaがインストールされていて更新の場合はこれでいいのですが、初回インストールするときはどうすればいいかというとコレ↓

コマンドラインを使用してインストール

仮にCドライブJavaSetup8u111.exeをダウンロードしたとしたら、コマンドプロンプトに以下のコードを貼り付けて実行します。このコマンドでインストールすると、先ほどの「Javaのインストールまたは更新時にスポンサーのオファーを表示しない」にインストール時点でチェックが入った状態になります。

C:\JavaSetup8u111.exe SPONSORS=0

これでツールバーの選択画面は出なくなります。

ちなみに0の部分はDisableと指定することもできます。

C:\JavaSetup8u111.exe SPONSORS=Disable

既に古いバージョンのJavaが入っていて手動更新するときはREMOVEOUTOFDATEJRES=1を加えることで、古いバージョンのアンインストール同時に行います。

C:\JavaSetup8u111.exe SPONSORS=0 REMOVEOUTOFDATEJRES=1

他にも、Javaのインストール方法はコマンドラインでサイレントインストールや構成ファイルを使用する方法もありますので、以下を参考にしてください。

これでスキッリ。

Citrix Reciever(Windows版)をインストール後、最初にログオンしたときに表示される「アカウント追加」を表示させない方法です。

この表示がログオンユーザーごとに表示されるのを防ぎ、いちいち「次から自動的に表示しない」のチェックを入れなくて済みます。

方法1 オプションを付けてインストーラーを起動

ダウンロードしたインストーラーを実行する際、ファイルパスにALLOWADDSTORE=Nを付けてコマンドプロンプトから実行する。

C:\CitrixReceiver.exe /ALLOWADDSTORE=N

方法2 レジストリの値を変更

すでにインストールが終わっているときはレジストリを変更します。

以下はコマンドプロンプトからレジストリを変更するコマンド。

reg add HKCU\Software\Policies\Citrix /f /v EnableFTU /t REG_DWORD /d 0
reg add HKCU\Software\Policies\Citrix /f /v HideAddAccountOnRestart /t REG_DWORD /d 1

いろいろ調べているとHKEY_LOCAL_MACHINE側にあるEnableFTU0にする方法がたくさんヒットしましたが、自分の環境では解決しませんでした。HKEY_CURRENT_USER側のHideAddAccountOnRestart1にすることで解決できました。

Java Runtime Environment(JRE)をインストールする際、バージョンによっていろんなツールバーや、アプリケーションをインストールされそうになります。

そのオプションを必ず選択しないとインストールができないようになっていたりすることもありますが、コマンドラインからサイレントインストールするか、以下の方法で回避できることを知りました。

構成ファイルを作り、インストールファイルのパスにINSTALLCFG=**を付けて構成ファイルを指定してインストールする方法です。

例えば、ダウンロードしたjre-8u101-windows-i586.exeと以下のようなインストールのセッティングファイル(仮にinstall.cfgとして)をテキストエディタで作成し、Cドライブにjreというフォルダを作って置いたとします。

以下のコマンドをコマンドプロンプトで実行するだけ

C:\jre\jre-8u101-windows-i586.exe INSTALLCFG=C:\jre\install.cfg

インストール構成ファイルの内容 install.cfg(仮)

SPONSORS=Disable
REMOVEOUTOFDATEJRES=1 
  • SPONSORS=Disableの部分が余計なツールバーとかを無視する部分です。
  • REMOVEOUTOFDATEJRES=1は古いバージョンを削除します。

内容については以下を参考にしてください。

スクリーンショット

そして実行した画面はこちら↓

オプションを選択する画面が出てこないままインストールが完了しました!

全部指定するとき用にメモ

INSTALL_SILENT=Disable
INSTALLDIR=
STATIC=Disable
AUTO_UPDATE=Enable
WEB_JAVA=Enable
WEB_JAVA_SECURITY_LEVEL=VH
WEB_ANALYTICS=Disable
EULA=Enable
REBOOT=Disable
NOSTARTMENU=Disable
SPONSORS=Disable
REMOVEOUTOFDATEJRES=1

INSTALL_SILENT=Enableにしてサイレントインストールしたり、AUTO_UPDATE=Disableにして自動更新を無効にしたりもできるようです。

バッチファイル

繰り返しインストール作業をする場合のバッチファイルのメモ。

このバッチファイルとインストーラーと構成ファイルをセットにしておけば、どの階層に置いていても簡単に実行できます。

@echo off

echo.
echo ===============================================
echo Java Runtime Environmentをインストールをします。
echo ===============================================
echo.

rem ----- 環境変数 -----
set PARAMETER=jre-8u101-windows-i586.exe
set CONFIGFILE=install.cfg

rem ----- インストール -----
%~dp0%PARAMETER% INSTALLCFG=%~dp0%CONFIGFILE%

pause

exit

コマンドラインでインストールする方法はこちら↓

ハードディスクやSSDにオール0を書き込んでデータをきれいさっぱり消すコマンドを簡単にメモ。

セキュアイレース同じか違うのかよくわかりませんが、物理フォーマット(Low Level Format)をかけてパーテーションもろともすべて消してくれます。

SDカードやUSBメモリもできるかも。

特に何かインストールしなくてもWindowsのコマンドプロンプトから実行できます。

コマンドプロンプトを起動して「diskpart」と打ってEnterを押して使います。

> list disk

でドライブの番号を確認。

> select disk=0

ローレベルフォーマットをかけたいディスクを指定。

> clean all

これで何の反応もなしに00の書き込みが始まります。

 

DISKPARTはダイナミックディスクをベーシックディスクに変換することもできます。

もうちょっと詳しく書いてあるのはこちら↓

Javaをインストールするときに余計なオプションもインストールさせられるのが嫌なときはサイレントインストールするのがおすすめです。

例えば、Version 8 Update 101(JavaSetup8u101.exe)をCドライブにダウンロードしたとしたら、

C:\JavaSetup8u101.exe /s

と、ファイルパスの後ろに" /s"と付けてコマンドプロンプトで打つだけでOK。

これだけだと古いバージョンを残しつつ、新しいバージョンがインストールされてしまうので、インストールと同時に古いバージョンを削除する場合はREMOVEOUTOFDATEJRES=1を付けます。

C:\JavaSetup8u101.exe /s REMOVEOUTOFDATEJRES=1

他にも使えるオプションは以下を参照

ちなみに、何台もセットアップするときに楽になるバッチファイルはこれ。(Javaのインストーラーと同じ階層で使います。)

@echo off

echo.
echo =========================================================
echo Java Runtime Environmentのサイレントインストールをします。
echo =========================================================
echo.

pause

rem ----- 環境変数 -----
set PARAMETER=JavaSetup8u101.exe

rem ----- インストール -----
"%~dp0%PARAMETER%" /s REMOVEOUTOFDATEJRES=1

rem ----- バージョンの確認ページを開く -----
start https://java.com/ja/download/installed8.jsp

pause

exit

テキストエディタに上記のコードを貼り付け、『Javaインストール.bat』とか名前を付けて保存し、右クリック「管理者として実行」します。

オフライン版のインストーラーを使用する場合も同じく、ファイルパスの後ろに" /s"を付けるだけです。

構成ファイルを使用してインストールする方法はこちら↓

Windows7以降だと標準でインターネット上のファイルをダウンロードすることができるコマンドがあるそうです。Linuxcurlwgetのようなもので、Windowsではbitsadmin.exeを指定することでできるとのこと。

BITSAdminはダウンロードまたはアップロードのジョブと進行状況の監視に使用できるコマンドラインツールだそうです。

書式

> bitsadmin.exe /transfer <ジョブ名> <リモートURL> <ダウンロード先>
  • <ジョブ名>は任意の文字列
  • <ダウンロード先>は保存するファイル名まで指定

> bitsadmin.exe /TRANSFER htmlget http://example.com/main.jpg c:\download/main.jpg

参考

応用

2016年6月現在で最新のWindows Update ClientKB3138612(Windows7 32bit用)をダウンロードしてインストールするまでのバッチコマンド

md c:\InstallKB

bitsadmin.exe /transfer htmlget https://download.microsoft.com/download/E/4/7/E47FB37E-7443-4047-91F7-16DDDCF2955C/Windows6.1-KB3138612-x86.msu c:\InstallKB\Windows6.1-KB3138612-x86.msu

wusa.exe c:\InstallKB\Windows6.1-KB3138612-x86.msu /extract:c:\InstallKB

pkgmgr.exe /n:c:\InstallKB\Windows6.1-KB3138612-x86.xml /quiet

rd /s /q c:\InstallKB

Windows7・Windows8/8.1からWindows10に自動でアップデートさせないためのメモ

削除する更新ファイル

「コントロール パネル」-「すべてのコントロール パネル項目」-「プログラムと機能」の画面の左にある『インストールされた更新プログラムを表示】からアンインストールできます。

特にKB3035583GWX.exe(画面右下のタスクバーの四角いWindowsマーク)は必ず削除

あとは正直、何の更新ファイルかよくわかりませんが、Windows10関連らしいのでついでに削除。

Windows7

Windows8/8.1

※削除しただけではWindows Updateでまた復活してきて自動でインストールされてしまうので、Windows Updateの更新ファイルの一覧に出てきた時点で右クリックして「非表示」を選択してください。非表示にすれば手動でインストールしない限り、自動でインストールされることはありません。

特定の更新ファイルを事前にインストールしないように指定する方法はありません。

ついでに削除&非表示にした方がいいかもしれない更新ファイル

レジストリでGWX.exeを無効にする

コマンドプロンプトで以下のコマンドを実行するとレジストリを登録できます。

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx /v DisableGwx /t REG_DWORD /d 1 /f

グループポリシーでアップデートを無効にする

Tech TIPS:Windows UpdateによるWindows 10へのアップグレードを「ブロック」する方法 (1/2) - @ITによると、グループポリシーでアップデートをブロック(禁止)するためには以下の更新ファイルのいずれかが適用されていることが必要だそうです。

必要な更新ファイルのインストール

グループポリシーの設定

「コントロールパネル」の検索窓から「グループポリシーの編集」を検索するか、Windows+Rgpedit.mscを実行するとグループポリシーの画面が開きます。

  • [コンピューターの構成]
    • [管理用テンプレート]
    • [Windows コンポーネント]
    • [Windows Update]
    • [Turn off the upgrade to the latest version of Windows through Windows Update]
    • 値:[有効]

レジストリでアップグレードをブロックするコマンド

以下のコマンドをコマンドプロンプトで実行する。

reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableOSUpgrade /t REG_DWORD /d 1 /f

全部をバッチファイルで行う

Windows7(32bit)の場合、以下のコマンドを○○.batで実行すると、

  • 不要な更新ファイルの削除
  • 必要な更新ファイルのダウンロードとインストール
  • レジストリの登録
  • ダウンロードファイルとフォルダの削除

を全自動で一度に行えます。(グループポリシーの設定以外)

taskkill /im GWX.exe /f

wusa.exe /uninstall /kb:2952664 /quiet /norestart
wusa.exe /uninstall /kb:3021917 /quiet /norestart
wusa.exe /uninstall /kb:3035583 /quiet /norestart
wusa.exe /uninstall /kb:3138612 /quiet /norestart
wusa.exe /uninstall /kb:3095675 /quiet /norestart

rd /s /q "%windir%System32\GWX"

md c:\InstallKB

bitsadmin.exe /transfer htmlget https://download.microsoft.com/download/0/B/5/0B53EDAE-AB68-4FA6-95EC-6966AD0A16F6/Windows6.1-KB3083710-x86.msu c:\InstallKB\Windows6.1-KB3083710-x86.msu

wusa.exe c:\InstallKB\Windows6.1-KB3083710-x86.msu /extract:c:\InstallKB

pkgmgr.exe /n:c:\InstallKB\Windows6.1-KB3083710-v2-x86.xml /quiet

rd /s /q c:\InstallKB

reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Gwx /v DisableGwx /t REG_DWORD /d 00000001 /f

reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableOSUpgrade /t REG_DWORD /d 1 /f

WindowsでIPアドレス固定して使う際、突如インターネットに接続できない状態になることがたまにあります。

  • ネットワークアダプタのプロパティを見ると、デフォルトゲートウェイの欄だけなぜか空白になっている。
  • 値を変更しても空白に戻ってしまう。
  • 正しいIPアドレスが表示されているのにインターネットに繋がらない。

こんな時は以下の方法を試してみてください。

レジストリの値を確認してみる

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{[email protected]#$..}

レジストリエディタで上記のInterfacesまで開くと{[email protected]#$..}といくつか出てきます。その中で使用しているネットワークアダプタに関係する値が含まれたものが一つだけあります。その中のDefaultGatewayとダブルクリックして開いてみてください。

※レジストリエディタはWindows+Rを押し、「ファイル名を指定して実行」の画面でregeditと入力してOKを押すと起動します。

値(IPアドレス)の前に改行が入っている場合

先頭行の改行を削除してIPアドレスのみにしてみる

空白の場合

デフォルトゲートウェイのIPアドレスを入れてみる

 

レジストリを変更したらレジストリエディタを閉じてPCを再起動してみてください。

それでもダメならコマンドでネットワークをリセット

レジストリエディタで値を変更しても反映されない場合、コマンドプロンプトで以下のコマンドを実行してみてください。

netsh interface ip reset c:\reset.log
netsh winsock reset
netsh interface tcp reset

どれか一つのリセットでいいのかもしれませんが、実行する順番や最低限必要なコマンドがどれかわからないので、いつも全部実行しています。

リセットが完了したらネットワークアダプタのプロパティを開いてIPアドレスを再設定してみてください。

多分、これで直るはずです。

WindowsPCで特定のアクセスポイントにしか接続ができないようにする方法をメモ。

使用しているノートパソコン(Windows7)の無線LANが隣近所の家庭や公共無線LANや野良APを拾ってきたりします。これが善意のアクセスポイントであればいいのですが、悪意のある無線LANアクセスポイントであれば、繋がってラッキーと思っていても実は捕まってPCを覗かれたり、ウィルスに感染するかもしれません。

そこで、特に外で使うことがなく、決まったアクセスポイントしか使わない場合は接続するアクセスポイントだけ接続を許可することができるようです。ドメイン環境であればグループポリシーで設定することもできるようですが、ここでは無線LAN用のnetshコマンドでパソコンに設定します。

方法

  1. 管理者権限でコマンドプロンプトを起動
  2. 以下のコマンドでフィルターを追加
    netsh wlan add filter permission=denyall networktype=infrastructure
    netsh wlan add filter permission=allow ssid=許可するSSID networktype=infrastructure 
        

これで、許可したSSIDのアクセスポイントだけ接続するようになります。

複数のアクセスポイントを登録する場合は、上記2行目のコマンドを必要な分だけ実行すれば追加できます。

フィルターの確認方法

フィルターを登録したのに、許可したアクセスポイントに接続できない場合はSSIDの名前が間違っているかもしれません。以下のコマンドで登録したフィルターを確認できます。

netsh wlan show filters

フィルターを削除する方法

すべてのフィルターを消す場合は、登録するときにaddとした部分deleteに変えてコマンドを実行します。間違えたフィルターだけ消す場合は2行目のみを使います。

netsh wlan delete filter permission=denyall networktype=infrastructure
netsh wlan delete filter permission=allow ssid=許可したSSID networktype=infrastructure 
    

参考

会社のパソコンも自宅のパソコンもネットワークが定期的に切断されます。ひどいときは起動した時点で既にアイコンにビックリマークが付いていてインターネットができないことも...。

ネットワークアイコン

OSWindows7Windows8.1

ネットワークカードのドライバを更新したり、IPv6OFFにしてみたり、ネットワークカードの詳細設定を変更してみたりといろいろしてみましたが全く解決に至りませんでした。

以下のことを試して定期的に切断される問題は解決できませんでしたが、結果的にネットが高速化されブラウザの表示スピードが速くなったので、とりあえずやってみたことをメモ。

初期化関連

とりあえず、コマンドプロンプトでいろいろ初期化してみる

ネットワーク・インターフェイスの初期化(リセット)

netsh interface ip reset c:\reset.log

Windows Socketの初期化

netsh winsock reset

TCPパラメータの初期化

netsh interface tcp reset

SNPを無効化する設定

まずSNPの各機能の設定を確認

netsh int tcp show global
netsh int tcp show global

Receive-Side Scaling(RSS)の無効化

netsh int tcp set global rss=disabled

通信に極端な障害が発生していない場合や、効果を感じられない場合は、enabledでも良いかもしれません。

TCP Chimney オフロード の無効化

netsh int tcp set global chimney=disabled

NetDMA(Network Direct Memory Access)の無効化

netsh int tcp set global netdma=disabled

※Windows8/8.1は未サポートで設定不要。

受信ウィンドウ自動チューニングレベルも無効化

netsh interface tcp set global autotuninglevel=disabled
または
netsh interface tcp set global autotuninglevel=highlyrestricted

highlyrestrictedのほうが速い気がする。

disabled
自動最適化を無効
highlyrestricted
既定値より受信ウィンドウを保守的に少し拡大
restricted
既定値より受信ウィンドウを制限的に拡大
normal
既定値に戻す
experimental
restrictedの制限対応

アドオン混雑制御プロバイダに設定

netsh interface tcp set global congestionprovider=ctcp
ctcp
有効
none
無効

ネットワークアダプタの電源の設定

電力の節約のために、コンピューターでこのデバイスの電源をオフにできるようにする」のチェックは外します。「デバイスマネージャ」-「ネットワークアダプタ」にあるネットワークカードのプロパティの「電源の管理」というタブで設定できます。

電力の節約のために、コンピューターでこのデバイスの電源をオフにできるようにする

 

参考

使用しているパソコン(Windows8.1)がなぜか毎回起動するとネットワークが接続されていない状態になるので、その度にデバイスマネージャーを開いてネットワークカードを無効・有効にしています。

毎回この作業をするのが面倒くさくなってきたので、簡単にできないかな?と調べたら特定のハードウェアをコマンドで操作するバッチファイルの作り方がありました。Windows Driver Kit (WDK) に含まれるdevcon.exeというものをコマンドで操作すればいいようです。

これを使えば、いろんなデバイスを必要な時だけ簡単にON・OFFができて便利そうです。

Windows Driver Kit (WDK)をインストール

まずはマイクロソフトの以下のページからWindows Driver Kit (WDK)をダウンロードしてインストールすることが必要です。今回の場合はWindows 8.1 Update用をダウンロードしました。インストールするとdevcon.exeC:\Program Files (x86)\Windows Kits\8.1\Tools\の中に32ビット・64ビット用がそれぞれ保存されています。

ハードウェアIDを調べる

ハードウェアを操作するためのバッチファイルでハードウェアIDが必要になりますので調べます。

  1. デバイスマネージャーで対象のハードウェアのプロパティを開く
  2. 「詳細」タブの「プロパティ」の欄をハードウェアIDにする
  3. 表示された値をコピーする

バッチファイルを作る

テキストエディタを開き、以下のようにコマンドを作成し、先ほどコピーしたハードウェアIDを貼り付けて、○○.batというように拡張子をbatにして保存します。

:: devcon.exeのパス(OSが64bitの場合)
@set DEVCON="C:\Program Files (x86)\Windows Kits\8.1\Tools\x64\devcon.exe"
 
:: ネットワークカードの無効と有効
:: Intel(R) 82578DC Gigabit Network Connection

%DEVCON% disable "PCI\VEN_8086&DEV_10F0&SUBSYS_00751B0A&REV_05"
%DEVCON% enable "PCI\VEN_8086&DEV_10F0&SUBSYS_00751B0A&REV_05"

管理者として実行

バッチファイルの実行は管理者として実行しないと有効に動作しません。

なので起動時や定期的に実行したい場合はスタートアップに登録するのではなくタスクスケジューラに登録し管理者権限で実行するように設定することが必要です。

その他参考

フリーソフトを入れた途端ににWindowsの調子が悪くなったり、使っているうちにエクスプローラーが停止したりなど、おかしいなと思ったらコマンドプロンプトで修復スキャンをしてみると意外にあっさり直るかもしれません。

sfc /scannow

管理者権限でコマンドプロンプトを起動してして以下のコマンドを入力して試してみてください。

sfc /scannow

これでもダメならF8を押しながらコンピューターを起動時し、セーフモードで同じように行うか、インストールディスク起動しシステムの修復を試してみてください。

それでだめなら諦めてクリーンインストールするしかありません...。

先日、サーバーのバックアップにWindowsでは最速と言われているFastCopyを使用して、毎日のバックアップをサーバーからNASへ同期バックアップさせるようにしました。(その時の記事)

毎日のことなので自動でバックアップできるようにバッチファイルを作成しました。

ログオンしている状態でちゃんと動くことが確認できたので、ログオンしなくても深夜に動作するようにタスクスケジューラに登録しました。

バックアップできていない...。

次の日にちゃんとバックアップが行われているかどうか確認したところ。ファイルが更新された形跡がなく、タスクスケジューラが実行中のままで、タスクマネージャーにプロセス残っている状態でした。バッチファイルは開始されているけど、NASにバックアップが行われていない...。

いろいろ検索してみると、ログオンしていないときはネットワーク上の共有フォルダに接続できていない状態なので、NASに到達できずバックアップに失敗しているとのこと。

net useコマンドを使う

net useコマンドであらかじめネットワーク上の共有フォルダに接続できるようです。

net use \\コンピューター名 /user:ワークグループ\ユーザー名 パスワード
net use \\192.168.1.10 /user:WORKGROUP\hoshiya abcd1234
net use \\NAS\Share /user:WORKGROUP\hoshiya abcd1234

上記のようなコマンドを追加すれば接続を開始できます。接続を切断する場合は以下のようになります。

net use \\192.168.1.10 /delete /Yes
net use * /delete /Yes

/Yesはネットワーク切断の時に切断していいですか?と聞かれて止まらないようにするものです。*はすべてを切断するときに使えるのですが、マイコンピュータに設定しているネットワークドライブまで切断されてしまうので、ネットワークドライブを使っている場合は*を使わずIPアドレスやコンピュータ名で直接指定して切断した方がよさそうです。

試しにタスクを実行

一旦、ログアウト(サインアウト)して、タスクマネージャで以下のバッチファイルを実行させてみました。

Set Path=C:\"Program Files"\FastCopy
net use \\NAS /user:WORKGROUP\hoshiya abcd1234
FastCopy.exe /cmd=sync /auto_close /log "D:\" /to="\\NAS\backup\d"
FastCopy.exe /cmd=sync /auto_close  /log "E:\" /to="\\NAS\backup\e"
net use \\NAS /delete /Yes

無事にネットワーク上の共有フォルダにバックアップがでできましたが...。

タスクが終了しない

/auto_closeを指定しているのにバックアップ終了後にタスクが残ったままになっていました。ログオンしていない状態での実行では/auto_closeを指定しても、終了しないようです。

taskkillコマンドを使ってみる

taskkillというコマンドを使えば実行中のタスクを終了させることができるそうです。

taskkill /F /IM FastCopy.exe /T

上記のコマンドをバッチファイルに追記したところ、うまくいきました。自分の場合はうまくいきましたが、タスクによってはタスクの優先順位が上でtaskkillが効かない場合があるそうです。taskkillのコマンドの使い方やパラメーターについては以下を参照してください。

できた!

以下のバッチファイル(backup.bat)でログオン(サインイン)せずにサーバーとNASでフォルダーの同期をすることができました。

Set Path=%PATH%;C:\;C:\"Program Files"\FastCopy
net use \\NAS /user:WORKGROUP\hoshiya abcd1234
FastCopy.exe /cmd=sync /auto_close /log "D:\" /to="\\NAS\backup\d"
FastCopy.exe /cmd=sync /auto_close  /log "E:\" /to="\\NAS\backup\e"
net use \\NAS /delete /Yes
taskkill /F /IM FastCopy.exe /T

会社に新しいサーバー(Windows 2012 Server)を導入したついでに、毎日のバックアップ方法を見なおそうと、いろいろなフリーソフトを試しましたが、「FastCopy」が圧倒的に速いです。

できればマイクロソフト系を使用したかったのですが、使い勝手が悪かったり、遅かったりしました。FastCopyがどのくらい速いのかは以下 が参考になります。

バックアップは遠隔地にあるNASに保存するため、ローカルとは違い転送速度が遅く、転送量が多いとバックアップに時間がかかりすぎて業務時間に食い込むので、早く終わるように速いソフトを探していました。実際に使ってみると速さを実感できます。とにかく速いです。

FastCopy

FastCopyIP Messengerの作者が同じで、32bit版と64bit版があり、GUIで使えるのはもちろんですが、コマンドプロンプトでも使えます。テキストエディタでコマンドをbackup.batなどバッチファイルを作成してタスクスケジューラに登録すれば自動バックアップもできます。

;書式例
"c:\FastCopy\FastCopy.exe" /オプション "コピー元" /to="コピー先"

ちなみに以下のバッチファイルで複数のフォルダをバックアップ先に連続で同期させています。サーバーのDドライブとEドライブを遠隔地のNASのバックアップフォルダに保存するというものです。

rem FastCopyでバックアップ
"C:\Program Files\FastCopy\fastcopy.exe" /cmd=sync /auto_close /estimate /no_confirm_del /bufsize=512 /log /exclude="$RECYCLE.BIN\;System Volume Information" "D:\" /to="\\NASS\backup\d"
"C:\Program Files\FastCopy\fastcopy.exe" /cmd=sync /auto_close /estimate /no_confirm_del /bufsize=512 /log /exclude="$RECYCLE.BIN\;System Volume Information" "E:\" /to="\\NASS\backup\e"

コマンドのオプションについては作者のホームページで確認してください。

GUIであらかじめ登録したジョブ名で実行することもできます。

rem FastCopyでバックアップ
"C:\Program Files\FastCopy\fastcopy.exe" /cmd=sync /auto_close /estimate /no_confirm_del /bufsize=512 /log /job="SERVER-D" /exclude="$RECYCLE.BIN\;System Volume Information"
"C:\Program Files\FastCopy\fastcopy.exe" /cmd=sync /auto_close /estimate /no_confirm_del /bufsize=512 /log /job="SERVER-E" /exclude="$RECYCLE.BIN\;System Volume Information"

ジョブ名は"C:\Users\ユーザー名\AppData\Roaming\FastCopy\FastCopy.ini"の中にtitle=の部分に記載されています。

[job_0]
 title="SERVER-D"
  :
  :  
[job_1]
title="SERVER-E"
  :

バッチファイルでFastCopyを実行している間はデスクトップ右下のタスクアイコンがクルクル回っています。そのアイコンをクリックすれば実行状況をGUIで確認できます。

タスクバーのFastCopyアイコン

ただし、GUIを開きっぱなしにしていると、/auto_closeを指定していても次のバックアップが始まりません。

ログは以下に保存されています。

C:\Users\ユーザー名\AppData\Roaming\FastCopy\FastCopy.log

 

バッチファイルのコマンドはこういう書き方もできるようです。

@echo off
rem --------------------------------------------------
rem FastCopyを利用したバックアップを実施する。
rem --------------------------------------------------

rem Fastcopyのパス
set fastcopy="C:\Program Files\FastCopy\FastCopy.exe"

rem ログファイル関連設定
set sourceLogFile="C:\Program Files\FastCopy\FastCopy.log"
rem yyyymmdd_backup.logとして移動する
set destLogFile=D:\backup_log\%date:~0,4%%date:~5,2%%date:~8,2%_backup.log

rem コピー元・先の設定
set sourceDir="C:\test_dir\" "C:\test_file.txt"
set destDir="D:\backup\"

rem Fastcopyで同期コピーを実施
%fastcopy% /cmd=sync /skip_empty_dir /force_close %sourceDir% /to=%destDir%

rem ログファイルを移動
move %sourceLogFile% %destLogFile%

タスクに登録してうまくいかなかったときは以下を参考にしてください。

Vistaのときもそうでしたが、Windows8でもなぜかインターネットに接続ができない状態で起動するということが頻繁に起こります。

 

そんなときは...

  • LANケーブルを抜き差ししてみる。
  • デバイスマネージャーでネットワークアダプターを無効にして有効に戻してみる。

といったことをすれば、インターネットがつながるようになります。

ただ、毎回はとても面倒です。

よって、バッチファイルの出番です。バッチファイルを管理者権限で実行すれば、コマンドプロンプト経由でネットワークアダプターの無効・有効を簡単に行ってくれます。

バッチファイルの作り方

バッチファイル

  1. メモ帳がワードパッドなど、テキストエディターを開く。
  2. 以下の2行を記述する。
        netsh interface set interface name="イーサネット" disable
        netsh interface set interface name="イーサネット" enabled
        
  3. 適当な名前に「.bat」を付けて保存します。(例:nic_reset.bat)
    「.txt」で保存して、あとから拡張子を「.bat」に変更してもOK。「.bat」はメモ帳で開けば編集できます。

今回はWindows8で試していますが、恐らくWindows7でもいけるはず。

バッチファイルの実行の仕方

右クリックして「管理者として実行」を選ぶ

  1. 上記のファイルを右クリックして「管理者として実行」を選ぶ

これだけで、一瞬コマンドプロンプトが表示され、すぐに消えます。そうするとデスクトップ右下のネットワークアイコンが、×から正常に変わります。

このバッチファイルの「set interface」というコマンドは管理者権限でないと実行できないようです。

バッチファイルに以下の1行を最初の行に挿入すれば、コマンドプロンプト上で管理者権限に昇格できるのですが、コマンドプロンプト上でパスワードを途中で求められ、パスワードなしではバッチ作業が中断されていまいます。(ここでのパスワードとはウィンドウズにログオンするときのパスワードのことを示します。)

  ruNAS /user:ユーザー名\administrator cmd

これでだめなら以下の方法もあります。

その他参考

Windows VistaやXPの場合は管理者権限でなくてもバッチファイルをダブルクリックするだけで行えます。その方法は以下を参考にしてください。

ノーマルのWindows7のコマンドプロンプトに『telnet』と入力すると、以下のようなメッセージが出て、telnetが使用できません。

'telnet' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

コマンドプロンプト

telnetクライアントでルーターの設定を行うので、ヤマハルーターを使用している自分にはかなり痛手です。

しかし、使用できるようにするこはできるようです。

 

解決方法

  1. コントロールパネルの『プログラムと機能』を開く。
    コントロールパネルのプログラムと機能
  2. Windoowsの機能の有効化または無効化』を開く。
    Windoowsの機能の有効化または無効化
  3. telnetクライアントにチェックを入れOKを押す。
    telnetクライアントにチェックを入れOKを押す

 

これでコマンドプロンプトでTelnetコマンドを使えるようになります。

telnetクライアントを使用する人が少ないので、余計な機能ということでオフにしているんでしょうね。

ちなみにヤマハルーターの設定にTFTPを使う場合は『TFTPクライアント』のチェックも入れてください。