2007/9/29 土曜日

WMIでDell製PCの保守ステータスを確認する@VBS

Filed under: スクリプト — pnpk @ 1:24:14

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
‘———————————–

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名に聞きながら作ったんですが、メインに作ったのが僕なのでダサいですが何かのお役に立てれば幸いです。

Popularity: 4%

コメント (0) »

この記事にはまだコメントがついていません。

コメント RSS トラックバック URI

コメントをどうぞ

HTML convert time: 0.496 sec. Powered by WordPress ME