\r\n\r\n
VBスクリプトは、Windowsスクリプトとして使用されるVisual Basicプログラムを縮小したもので、コンピュータのハードウェアに関する重要な情報を引き出したり、サービスの停止や起動、ネットワークカードのリセットなど、あらゆるアクションを実行することが可能です。
これらの個々の事柄を通常の方法で行う方法を学ぶこともできますし、バッチファイルを使って行うことも可能です。しかし、VBスクリプトはバッチスクリプトよりも柔軟性が高いので、その方が良い。以下のスクリプトを共通の場所に保管し、必要なときにすぐに手が届くようにすれば、短時間で完成させることができます。スクリプトをダブルクリックし、プロンプトに答えるだけでタスクは完了します。
下記のvbwindowsスクリプトを見て、使いたいものがあれば、メモ帳などのコーディングメモツールにコピー&ペーストして、WSFファイルとして保存するだけです。
拡張子.WSFのファイル名さえつければ、以下に詳述する各スクリプトはダブルクリックで実行され、また、コードも.WSFから始まるものを囲んでください。
<job>
<script language="VBScript">.
というコードを書き、最後に以下のコードを書いてください。
WScript.Quit
</script>。
</job>。
これにより、Windowsはスクリプトで使用されている言語を認識し、正しく処理することができます。
WindowsにはWMI(Windows Management Instrumentation)というものがあり、スクリプトがオペレーティングシステムのコンポーネントにアクセスするためのインターフェースを提供しています。実際、WMIに対してクエリーを実行し、システムに関する現在のリアルタイム情報を得ることができます。マイクロソフトは、システムに対して実行できるすべてのクエリーカテゴリーの完全なリストを提供しています。
VBAを使ってコンピュータの情報をExcelに取り込む方法はすでに紹介しましたが、Excelの外でも簡単なVBスクリプトを使って同じことができます。
この例では、プロセッサー情報(シリーズ、**商、コア数)、バッテリー情報(説明、ステータス)、論理ディスク情報(名前、残りの空き容量、全体のサイズ)をシステムに問い合わせます。そして、これらの情報を見やすくするためにCSVファイルに書き出します。
まず、CSVファイルへのエクスポートに使用するFileSystemObjectを設定し、ファイルを作成します。
Set oFSO = CreateObject("Scripting.FileSystemObject")
sFile1 = "MyComputerInfo.csv"。
Set oFile1 = oFSO.CreateTextFile(sFile1, 1)
次に、WMIクエリの設定と実行を行います。
strQuery = "SELECT Family,Manufacturer,NumberOfCores FROM Win32_Processor"
Set colResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
最後に、結果をソートして、CSVファイルに情報をエクスポートします。もし、出力ファイルの見栄えを良くしたいのであれば、この記事の前に次のような行を追加してください。
oFile1.WriteLine "Processor Information"
oFile1.WriteLine "------".
For Each objResult In colResults
strResults = "家族:," +CStr(objResult.Family)
oFile1.WriteLine strResults
strResults = "製造者:," +CStr(objResult.Manufacturer)
oFile1.WriteLine strResults
strResults = "コア数:," +CStr(objResult.NumberOfCores)
oFile1.WriteLine strResults
次のページ
今、このコードを実行すると、次のような出力が得られます。
次の2つのコードでは、単純にクエリを繰り返して、追加情報を見つけるために変更します。以下は、バッテリー情報のクエリです。
oFile1.WriteLine ""
strQuery = "SELECT 説明,ステータス FROM Win32_Battery"
Set colResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
oFile1.WriteLine "バッテリー情報"
oFile1.WriteLine "------".
For Each objResult In colResults
strResults = "ステータス:," +CStr(objResult.Description)
oFile1.WriteLine strResults
strResults = "説明:," +CStr(objResult.Status)
oFile1.WriteLine strResults
次のページ
次に、論理ディスクの問い合わせについて説明する。
oFile1.WriteLine ""
strQuery = "Select Name, FreeSpace, Size from Win32_LogicalDisk"
Set colResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
oFile1.WriteLine "ディスク情報"
oFile1.WriteLine "------".
「論理的なディスク容量の確認
For Each objResult In colResults
strResults = "名前:," +CStr(objResult.Name)
oFile1.WriteLine strResults
strResults = "空き領域:," +CStr(objResult.FreeSpace)
oFile1.WriteLine strResults
strResults = "ディスクサイズ:," +CStr(objResult.Size)
oFile1.WriteLine strResults
次のページ
最後に、ファイルを閉じ、オブジェクトを "Nothing "に設定して、コードを閉じることを忘れないでください。
oFile1.Close
セット oFile1 = Nothing
set colResults = Nothing
strResults = ""
すべてのコードを新しい.WSFファイルに入れ、それを実行すると、出力は次のようになります。
上記のクエリーを他のコンピュータ機器やソフトウェアと交換するだけで、マウスをクリックするだけでフルシステムのレポートを手にすることができます。
特定のサービスに問題が発生し、正常に動作させるために迅速な再起動が必要な場合があります。特に、時に少々欠陥のあるサーバーソフトの運用を余儀なくされている場合は、なおさらです。
サービス再起動時の処理を1分ほど短縮したい場合は、以下のスクリプトをどこか便利な場所に保存しておくだけでよいでしょう。再起動したいサービスの名前を入力するよう促され、そのとおりに実行されます。
サービスの停止と起動には管理者権限が必要なため、スクリプトの先頭に以下のコードを配置し、スクリプトに昇格権限を与える必要があります。
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _.
, """ & WScript.ScriptFullName & """/elevate", "", "runas", 1
WScript.Quit
End If
これができたら、残りのコードを追加して、ユーザーが入力した入力ボックスを実行し、コマンドウィンドウを起動し、「net stop」と「net startコマンド」を送るようにします。
Set cmdShell = CreateObject("WScript.Shell")
strServiceName=Inputbox("停止するインターサービス", "入力必須")
cmdShell.Runの "cmd.exe"
WScript.Sleep 1000
cmdShell.SendKeys "ネットストップ "+strServiceName
cmdShell.SendKeys "{Enter}"
WScript.Sleep 1000
cmdShell.SendKeys "ネットスタート "+strServiceName
cmdShell.SendKeys "{Enter}"
WScript.Sleep 1000
cmdShell.SendKeys "Exit"(終了)。
cmdShell.SendKeys "{Enter}"
サービスツールを探し回る必要はなく、このスクリプトを実行するだけで、あらゆるサービスを数秒で停止・開始することができます。
以下のスクリプトに従えば、一石二鳥です。このスクリプトでは、VBスクリプトでレジストリを編集する方法を紹介します。また、これらのレジストリ設定を編集することで、Windowsのデフォルトのユーザー名とパスワードを設定できるようにするスクリプトも提供されます。
まず、レジストリの編集には管理者権限が必要なため、スクリプトに昇格した権限を設定する必要があります。
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _.
, """ & WScript.ScriptFullName & """/elevate", "", "runas", 1
WScript.Quit
End If
まず、使用するユーザー名とパスワードをユーザーに尋ねる2つの入力ボックスを実行します。
strUserName=Inputbox("Enter the default User Name","Input Required")
strPassword=Inputbox("デフォルトのパスワードを入力してください", "入力必須")
次に、シェルオブジェクトを設定し、これらの値を適切なレジストリエントリに書き込みます。
Set wshShell = CreateObject( "WScript.Shell" )
wshShell.RegWrite "HKLM↪SOFTWARE↩Microsoft↪SOFTWARE↩Windows NTCurrentVersion↪SOFTWARE↩Winlogon↪SOFTWARE↩DefaultUserName", strUserName, "REG_SZ"
wshShell.RegWrite "HKLM↪SOFTWARE↩Microsoft↪SOFTWARE↩Windows NT↪SOFTWARE↩CurrentVersion↪SOFTWARE↩Winlogon↪SOFTWARE↩DefaultPassword", strPassword, "REG_SZ"
セット wshShell = Nothing
以上です。RegWrite」メソッドを使用すると、vbwindowsスクリプトを使用して、任意のレジストリエントリに任意の値を書き込むことができます。必要なのは、正しい道だ。
スクリプトを実行し、プロンプトに回答してください。
入力された値は、スクリプトで設定されたレジストリ設定に直接**されます。
スクリプトを弄って、お好みに合わせて調整してください。好きなレジストリ項目を編集できるので、クリエイティブになりましょう
VBスクリプトを使ったネットワーク接続のリセットは、MakeUseOfの前に説明したとおりです。下のバージョンは、実際には縮小され、よりシンプルに実装されています。個々のNICのプロンプトの代わりに、すべてのアクティブな接続をリセットし、あなたが持つかもしれないネットワークの問題を解決することを期待しています。
管理者権限を必要とする他のスクリプトと同様に、昇格権限の先頭にセクションを追加する必要があります。上記のスクリプトからコードをコピーしてください。
次に、WMIオブジェクトを作成し、システム上で有効になっているネットワーク・アダプタのリストを問い合わせます。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "oot ⇄CIMV2")
Set colItems = objWMIService.ExecQuery( _ )
"SELECT * FROM Win32_NetworkAdapter Where NetEnabled = 'True'")
最後に、有効になっているすべてのアダプターを繰り返し、リセットします。
For Each objItem in colItems
objItem.Disable
WScript.Sleep 1000
objItem.Enable
次のページ
これは、アクティブなネットワークアダプターをすべてリセットするもので、通常、厄介なネットワークの問題を解決する最も早い方法です。このスクリプトを手元に置いて、ネットワークの速度が遅いなど、ネットワークに異変が起きたときに、まず試してみてください。
私のお気に入りのvbwindowsスクリプトを最後に保存しておきました。これは実際に自宅のパソコンでスケジュールタスクとして設定し、私のサイトがアクティブかどうかをチェックするために1日に何度も実行させています。サイトがダウンしているときはスクリプトをメールで送ってもらうようにしています。このスクリプトを使用して、ネットワーク上の重要なサーバーやコンピュータを監視し、スクリプトがデバイスにpingを打つことができない場合、自分自身に電子メールを送信することができます。
まず、Pingを打つ対象のスクリプトを設定し、シェルオブジェクトを作成し、Pingコマンドを実行します。
strTarget = "topsecretwriters.com"
Set WshShell = WScript.CreateObject("WScript.")
Ping = WshShell.Run("ping -n 1 " & strTarget, 0, True)
Select Caseステートメントを使用して、Pingの結果を繰り返し表示し、それに応じて対応します。もし結果が0を返したら、そのサイト(またはサーバー)はオンラインであり、あなたは何もする必要がないことがわかります。を返した場合は、Pingが失敗しているので、それについて何かする必要があります。私の例では、WindowsのCDOオブジェクトを使ってメールを送信しています。
Select Case Ping
ケース0
ケース1
Set objMessage = CreateObject("CDO.Message")です。
Set objConfig = CreateObject("CDO.Configuration")です。
objConfig.Load -1
Set Flds = objConfig.
Flds付き
.Item ("http://schemas.microsoft.com/cdo/configuration/**tpusessl") = True
.Item ("http://schemas.microsoft.com/cdo/configuration/**tpauthenticate")=1
.アイテム("http://schemas.microsoft.com/cdo/configuration/sendusername")="[email protected]"
.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword")="xxxxxxxxxxxxxxxxxx"
.項目("http://schemas.microsoft.com/cdo/configuration/**tpserver")="**tp.gmail.com"
.アイテム("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
.項目("http://schemas.microsoft.com/cdo/configuration/**tpserverport")=465
.更新
エンドウィズ
objMessageと
Set .Configuration = objConfig
.Subject = "あなたのサイトはオフラインです"
.From = "[email protected]"
.To = "[email protected]"
.TextBody = "ちょっと、あなたのウェブサイトはオフラインです。"
.送信
エンドウィズ
エンドセレクト
スクリプトが実行され、デバイスやウェブサイトにpingを打つことができなくなると、すぐにインスタントメッセージが受信されます。
手軽で簡単、そして効果も抜群です。
これらは、VBスクリプトを使用してコンピュータの使用を簡素化するクールな例のほんの一部です。他にも、VBやSynctoyを使ったバックアップの自動化、telnetコマンドの自動化、さらにはアプリケーションのウィンドウを開いて制御することなど、できることはたくさんあります。
Windowsのスクリプトを使って、パソコンで自動的に行っていることにはどんなものがありますか?VBで書いているのか、それともPowerShellなど他のツールで書いているのか?