VBSを使用してHostsファイルのワンクリック設定コードを実装する
まず、hostsファイルへのアクセス方法ですが、Windows環境(私は32bitのWin7を使用しています)では、コンピューターの場所のhostsファイルでは、%windir%⇄System32⇄drivers⇄ディレクトリで、ファイル名はhosts、拡張子はなしです。しかし、毎回たくさんのディレクトリをクリックしてhostsファイルを探すのではなく、以下のbatスクリプトを実行することで、メモ帳でhostsファイルを直接開くことができます。
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
notepad %SystemRoot%/System32/drivers/etc/hosts
exit
バットスクリプトに host.bat という名前を付けて C:\WindowsSystem32 の下に置くことで、コマンドラインや Win7 のスタートメニューから host コマンドを入力して直接 hosts ファイルを開くことができるようになりました。
話を元に戻して、hostsファイルの後ろに自動的にレコードを挿入する方法について説明します。
最も単純なhostsの設定、つまりhostsファイルの末尾にレコードを追加する場合は、以下のbatスクリプトで十分です。
@attrib -r "%windir%\System32\drivers\etc\hosts"
@echo ###### Host configuration START >>"%windir%\System32\drivers\etc\hosts"
@echo 127.0.0.1 www.tsybius2014.com >>"%windir%\System32\drivers\etc\hosts"
@echo 127.0.0.1 www.tsybius2014.net >>"%windir%\System32\drivers\etc\hosts"
@echo ###### Host configuration END >>"%windir%\System32\drivers\etc\hosts"
::@attrib +r "%windir%\System32\drivers\etc\hosts"
設定は以下のように動作します。
この方法は非常にシンプルですが、繰り返し設定できるマッピングレコードがあるという点でデメリットがあります。
そこで、指定したURLのホストを自動的に設定するVBSスクリプトHostHelper.vbsを以下のように記述して再チャレンジしてみました。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' HostHelper Hosts file configuration tool
' Author: Tsybius2014
' Date: October 20, 2015
' Description: HostHelper is a Host file configuration tool, input as Host file address, IP address, domain name
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Force explicit declaration of all variables in the module
Option Explicit
' Read parameters
Dim strHostAddr 'Host file address
Dim strIpAddr 'IP address
Dim strName 'Host name
Dim strOper 'Operation type cover: write append: append
If WScript.Arguments.Count <> 4 Then
WScript.Echo "Arguments error"
WScript.Quit
Else
'Read in the parameters
strHostAddr = WScript.Arguments(0) 'Parameter 1: Host file address
strIpAddr = WScript.Arguments(1) 'Parameter 2: IP address
strName = WScript.Arguments(2) 'Parameter 3: Host name
strOper = WScript.Arguments(3) 'Argument 4: write policy cover: override append: append
'overwrite: exclusive append
'append: add IP address and hostname correspondence at the end of the file
'Determine the write policy
Dim strOperName
If strOper = "cover" Then
strOperName = "cover"
ElseIf strOper = "append" Then
strOperName = "append"
Else
WScript.Echo "Illegal write policy! "
WScript.Quit
End If
'Show input information
WScript.Echo "Host file address:" & strHostAddr
WScript.Echo "IP address: " & strIpAddr
WScript.Echo "Host name: " & strName
WScript.Echo "Write Policy: " & strOperName
WScript.Echo ""
End If
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'Iterate through the Host file to determine if the specified Host value already exists
Dim file
Set file = FSO.OpenTextFile(strHostAddr)
Dim strLine
Dim bHostAlreadyExist
bHostAlreadyExist = False
Do While file.AtEndOfStream <> True
strLine = LTrim(file.ReadLine)
If Not Left(strLine, 1) = "#" Then
Dim Array
Array = Split(strLine, " ", -1, 1)
If UBound(Array) >= 1 Then
'The IP is the same and the domain name is the same, then the Host to be configured already exists
If Array(0) = strIpAddr And Array(1) = strName Then
bHostAlreadyExist = True
Exit Do
End If
Else
End If
Echo strLine
Else
End If
Loop
Close
If bHostAlreadyExist Then
WScript.Echo "The Host you want to configure already exists! "
WScript.Quit
End If
'Write the correspondence between IP address and domain name to Host
If strOper = "cover" Then
'Write strategy: overwrite
Dim fileRead
Set fileRead = FSO.OpenTextFile(strHostAddr)
Dim strContent
strContent = fileRead.ReadAll()
fileRead.Close
Dim ArrayLine
ArrayLine = Split(strContent, vbCrlf, -1, 1)
Dim i
Dim strArrayEachLine
For i = 0 To UBound(ArrayLine)
ArrayLine(i) = Trim(ArrayLine(i))
If Not Left(ArrayLine(i), 1) = "#" Then
strArrayEachLine = Split(ArrayLine(i), " ", -1, 1)
If UBound(strArrayEachLine) >= 1 Then
If strArrayEachLine(1) = strName Then
ArrayLine(i) = "#" & ArrayLine(i)
End If
End If
End If
Next
strContent = Join(ArrayLine, vbCrlf)
strContent = strContent & vbCrlf & strIpAddr & " " & strName
Dim fileCover
Set fileCover = FSO.OpenTextFile(strHostAddr, ForWriting, False)
Write strContent
fileCover.Close
WScript.Echo "Overwrite finished"
ElseIf strOper = "append" Then
'Write strategy: append
Dim fileAppend
Set fileAppend = FSO.OpenTextFile(strHostAddr, ForAppending, False)
fileAppend.WriteLine
WriteLine strIpAddr & " " & strName
WScript.Echo "Appending complete"
fileAppend.Close
End If
このVBSスクリプトの機能は、hostsファイルのアドレス、IPアドレス、ホスト名を渡し、書き込みポリシー(上書き、追記を含む)を指定し、スクリプト実行時に自動的にhostsファイルを構成することである。
このVBSスクリプトをより良く実行するために、batバッチコマンドラインを書き、以下のコードを実行しました。
@echo Tsybius 2015/10/20
set hostIPAddr=127.0.0.1
set hostName=www.tsybius2014.com
set vbsAddr=HostHelper.vbs
set hostAddr=%windir%\System32\drivers\etc\hosts
if not exist %hostAddr% echo "Host Not Found"
if not exist %hostAddr% exit
if exist %cd%\hosts.bak del %cd%\hosts.bak
copy %hostAddr% %cd%\hosts.bak
@attrib -r %hostAddr%
cscript %vbsaddr% %hostAddr% hostIPAddr hostName append
::@attrib +r %hostAddr%
@pause
このスクリプトは、ドメイン名がwww.tsybius2014.com、IPが127.0.0.1、書き込みポリシーがappend、書き込み前にhostsファイルのバックアップをとって、hostsファイルの末尾にレコードを追加しようとするものである。
このスクリプトは、以下のように実行されます。
hosts ファイルを見ると、hosts.txt の末尾にマッピングが書かれていることがわかります。
注:この記事のコードは簡単にテストしただけなので、コードの中には十分な堅牢性を備えていないものもあり、実際の使用には注意が必要です。
関連
-
自動入力の祝福と面白い実装コードを実現するためにvbsスクリプトを使用する
-
vbsアプレットアイコン変更方法の実装
-
VBSの基本 - vbscript TextStreamオブジェクト
-
指定されたプロセス名の小さなVBSを終了させる
-
ComboBoxコントロールの使用方法に関するチュートリアル
-
DNSを変更し、IEの一時ファイルを空にするvbsスクリプト
-
Iisext.vbsを使ったWebサービス拡張ファイルのリストアップ方法
-
Iisext.vbsでWebサービス拡張を有効にする方法
-
Iisftpdr.vbs による FTP 仮想ディレクトリの削除 (ローカルおよびリモートサポート)
-
iisftpdr.vbsでFTP仮想ディレクトリを作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン