WMIを使ってDell製PC・サーバの保守ステータスを確認するVBS

DELLで購入したPCについて問い合わせを行う場合、サービスタグっていうタグナンバーを使ってここで問い合わせを行います。
端末毎に微妙にサポート連絡先が違ってたりするんだけど、それっていちいち調べるのめんどくさいじゃないですか。なんでスクリプトにして自動問い合わせ出来るようにしてみました。

しょぼいスクリプトなんですが、非プログラマが作成するプログラム・・・もとい僕が作るプログラムなんてこんなもんです。ソースもGoogleで検索したサンプルコードを切り貼りしております。

動作的には

1.BIOSからサービスタグを取得
2.サービスタグ番号をDellサポートページにGET
3.帰ってきたHTMLから必要な値を取得して表示

こんな感じです。問い合わせにはインターネットに接続された環境が必要です。コードをメモ帳か何かで保存してファイル名を”hogehoge.vbs”とか適当な名前を付けてダブルクリックするだけです。当然ながらDELL製PCでしか動作しない・・・というか意味無いです。

別に新しくもなんともない訳ですが、あると何気に便利なんで貼っておきます。端末が複数ある場合にはサービスタグだけ一覧にしておいてそれを管理サーバなりから一括で問い合わせてCSVファイルか何かにするほうが再利用出来て良いと思います。

'---------------------------------------------------
'BIOS SerialNumberの取得
'WMIを使ってBIOSからサービスタグナンバーを取得します。
'---------------------------------------------------
Option Explicit

Dim QfeSet 'クエリ格納先
Dim Qfe 'バラしたリスト
Dim Locator
Dim Service
Dim Ret

Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_BIOS")

For Each Qfe In QfeSet
Ret = Qfe.SerialNumber & vbCrLf
Next

Set QfeSet = Nothing
Set Qfe = Nothing
Set Service = Nothing
Set Locator = Nothing

'---------------------------------------------------
'DELLから情報取得
'(例)
'http://support2.jp.dell.com/jp/jp/tech/phone/index.asp?st=hogehoge
'---------------------------------------------------
Dim IEObj
Dim StrHTML

Set IEObj = CreateObject("InternetExplorer.Application") 'オブジェクトの作成

With IEObj 'With XXXXでEnd WithまでXXXXを省略できるようになります。
.Visible = False
' .Visible = True
.Navigate "http://support2.jp.dell.com/jp/jp/tech/phone/index.asp?st=" & Ret 'URL

While .Busy Or .ReadyState <> 4 '画面が表示しきるまで待ちます。
Wend
StrHTML = .document.body.innerHTML 'この値だけ持ち越し
End With

Set IEObj = Nothing

'---------------------------------------------------
'HTMLコードから情報の抜き出し
'---------------------------------------------------
Dim StrBuff

StrBuff = TrimHTMLTag(StrHTML)

Dim StrCompText
Dim StrLineText
Dim Model '機種名
Dim ExpressServiceCode 'エクスプレスサービスコード
Dim ServiceTagNumber 'サービスタグナンバー
Dim Shippingdate 'システム出荷日
Dim SupportName 'サポート名
Dim PhoneNumber 'テクニカルサポート電話番号
Dim cflag

'Split(strVal, strDiv, lngCnt, lngCmp)
StrCompText = Split(StrBuff,VBCrLf)
'msgbox StrCompText(0)

'———————————–
'1 =機種名
'2 =エクスプレスサービスコード
'3 =サービスタグナンバー
'4 =システム出荷日
'5=サポート名
'6=テクニカルサポート電話番号
'———————————–
cflag = 0

for each StrLineText in StrCompText
	Select Case cflag
	Case 1
	Model = StrLineText
	cflag = 0
	Case 2
	ExpressServiceCode = StrLineText
	cflag = 0
	Case 3
	ServiceTagNumber = StrLineText
	cflag = 0
	Case 4
	Shippingdate = StrLineText
	cflag = 0
	Case 5
	SupportName = StrLineText
	cflag = 0
	Case 6
	PhoneNumber = StrLineText
	cflag = 0
	End Select

	if StrLineText = "機種名" Then
	cflag = 1
	end if

	if StrLineText = "エクスプレスサービスコード" Then
	cflag = 2
	end if

	if StrLineText = "サービスタグナンバー" Then
	cflag = 3
	end if

	if StrLineText = "システム出荷日" Then
	cflag = 4
	end if

	if StrLineText = "サポート名" Then
	cflag = 5
	end if

	if StrLineText = "テクニカルサポート電話番号" Then
	cflag = 6
	end if
next

msgbox "機種名:" & Model & VBCrLf &_
"サービスタグナンバー:" & ServiceTagNumber & VBCrLf &_
"エクスプレスサービスコード:" & ExpressServiceCode & VBCrLf &_
"システム出荷日:" & Shippingdate & VBCrLf &_
"テクニカルサポート電話番号:" & PhoneNumber & VBCrLf &_
"サポート名:" & SupportName

Function TrimHTMLTag(source)
	Dim Re
	Dim objREG
	Dim StrBuff
	Set objREG = New RegExp

	objREG.IgnoreCase = True '大文字小文字区別無
	objREG.Global = True '一致するものすべて

	Set Re = CreateObject("VBScript.RegExp") '最短一致版
	objREG.Pattern = "<.*?>"
	TrimHTMLTag = (objREG.Replace(source, ""))
End Function

改めてWMIってWindowsOSを操作する分には便利だなー。なんて思いました。とりあえず本職プログラマー若干2名に聞きながら作ったんですが、メインに作ったのが僕なのでダサいですが何かのお役に立てれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です