

現場で使える VBScript 25選
始めに:
アプリケーションの仮想化の仕事に携わっていると様々な事があります。その中で、PCの情報を取得したり
ログを出力したりと、ちょっとした事は
自動化したいですよね。
そんなときに私は、VBScriptで処理を書いています。
メモ帳さえあれば、どんな環境でもOKな手軽さがイイですね。
はやりのPowerShellで書けばいいんですが、Windows 2000 / XP / Vista / 7で
動くとなると、やはりVBScriptに頼るのが簡単です。
もちろんJScriptもOKですけどね。
これまでに、いろいろと書き貯めてきたVBScriptを備忘録を兼ねて、公開してみたいと思います。
同じ事をするにも、様々なアプローチがあるので、一例として眺めてもらえると嬉しいです。
Windows XP 7で動作確認していますが、
環境によって、うまく動かない場合があるかもしれません。
くれぐれも自己責任でお願いします。
目次:
1.プログラムの実行ファイル名を指定して実行に似ています。
2.ネットワーク接続画面を開く[ncpa.cpl]
コントロールパネルの情報を開く事ができます。
inetcpl.cplにするとインターネット接続画面を表示できたりもします。
3.コンピュータ名の取得
コンピュータ名を取得します。
4.ユーザー名の取得
このVBScriptを実行した、ユーザー名を取得します。
5.NETBIOSドメイン名の取得
NETBIOS形式のドメイン名を取得します。DOMAIN等
6.DNSドメイン名の取得
DNSドメイン名を取得します。Domain.local等
7.PC所属ドメイン名の取得
PC自体が所属しているドメイン名を取得します。
8.OS種類の取得
Windows 2000 XP Vista 7 8 2003 2008 2008R2 2012等の情報
9.Windowsフォルダーのパス取得
Windowsがインストールされているパスを取得します。
10.Windowsインストール日時情報取得
Windowsをインストールした日時を取得します。
どのくらい前からそのPCが利用されているかを判断したい時に使います。
インストールされた時期が分かれば、どのくらい使われているのかわかります。
11.Windows登録者情報取得
Windowsをインストールした時に、設定した登録者を取得します。
12.Windows登録組織情報取得
Windowsをインストールした時に、設定した登録組織名を取得します。
Windows7では空白になります。
13.CPU情報の取得
WMIで取得されるCPU情報なので、PCのカタログなんかに書かれている
名前とは、一致しないかもしれません。
14.物理メモリサイズの取得
PCに割り当てられているメモリのサイズを取得します。
15.PC製造元情報とモデル名の取得
WMIで取得される情報なので、PCのカタログなんかに書かれている
情報とは、一致しないかもしれません。
16.IPアドレス、NIC名の取得
NICの名前とIPアドレスを取得します。
17.接続状態のNIC名の取得
NICがアクティブな状態(接続されている)の物を取得します。
18.ドライブ情報の取得
ドライブの情報を取得します。
FDD HDD CD-ROM DVD-ROMの種類とフォーマットの種類
総容量と空き容量
19.ネットワークドライブ情報の取得
ネットワークドライブ割り当てされた、
ドライブ文字と接続先のファイル共有のUNCパスを取得します。
20.特殊フォルダーの取得
デスクトップ等の特別なフォルダのパスを取得します。
21.プリンター情報の取得
インストールされているプリンタの情報を取得します。
通常使うプリンタの情報も合わせて取得します。
22.イベントビューアーへの登録
イベントビューアーに情報を登録します。
23.ログファイルへの登録
自前のログファイルに、内容を追加します。
24.Officeバージョンの取得
インストールされているOfficeのバージョンを取得します。
Excelを例にしています。
25.IEバージョンの取得
インストールされているIEのバージョンを取得します。
※ソースコードのコピー方法
ソース上でダブルクリックすると全体が選択されるのでCtrl+C等でコピーしてください。
1.プログラムの実行
Option Explicit Dim strCommand Dim strErr strCommand = """C:\Program Files\Internet Explorer\iexplore.exe"" http://www.yahoo.co.jp" 'エラー確認 strErr = ExecCommand(strCommand,1,True) IF strErr <> "" Then MsgBox strErr End IF '----------------------------------------------------------- '処理内容:コマンドラインの実行 '引数: ' strCommand:実行するコマンド ライン ' IntWindowStyle:ウインドウの状態を設定 ' bWaitOnReturn ' True:プログラムの実行が終了するまでスクリプトの実行は中断 ' False:プログラムが開始すると Run メソッドは即座に復帰 '戻り値:エラーコード 'http://msdn.microsoft.com/ja-jp/library/cc364421.aspx '----------------------------------------------------------- Function ExecCommand(strCommand,IntWindowStyle,bWaitOnReturn) On Error Resume Next Err.Clear Dim strErr strErr="" Dim objShell Set objShell = CreateObject("WScript.Shell") Call objShell.Run(strCommand,IntWindowStyle,bWaitOnReturn) Set objShell = Nothing IF Err.Number <> 0 Then strErr = "ErrNumber:0x" & CStr(Hex(Err.Number)) End IF ExecCommand=strErr Err.Clear End Function
2.ネットワーク接続画面を開く[ncpa.cpl]
Option Explicit MsgBox "ネットワーク接続を開きます。" Call ExecCmd("RUNDLL32.EXE SHELL32.DLL,Control_RunDLL ncpa.cpl") '----------------------------------------------------------- '処理内容:コマンドの実行 '引数:strCMD 実行するコマンド '----------------------------------------------------------- Sub ExecCmd(strCMD) On error resume next Err.Clear Dim objShell Set objShell = CreateObject("WScript.Shell") Call objShell.Run(strCMD,1,False) Set objShell = Nothing Err.Clear End Sub
3.コンピュータ名の取得
Option Explicit MsgBox GetComputerName '----------------------------------------------------------- '処理内容:コンピュータ名の取得 '戻り値:コンピュータ名 '----------------------------------------------------------- Function GetComputerName() On Error Resume Next Err.Clear Dim strRet Dim objNetWork strRet="" Set objNetWork = CreateObject("WScript.Network") strRet = objNetWork.ComputerName Set objNetWork = Nothing GetComputerName=strRet Err.Clear End Function
4.ユーザー名の取得
Option Explicit MsgBox GetCurrentUserName() '----------------------------------------------------------- '処理内容:ユーザー名の取得 '戻り値:ユーザー名 '----------------------------------------------------------- Function GetCurrentUserName() On Error Resume Next Err.Clear Dim objNetwork Dim strRet strRet = "" Set objNetwork = CreateObject("WScript.Network") strRet = objNetwork.UserName Set objNetwork = Nothing GetCurrentUserName = strRet Err.Clear End Function
5.NETBIOSドメイン名の取得
Option Explicit MsgBox GetNETBIOSDomainName() '-------------------------------------------- '処理内容:現在のユーザーがログインしているドメイン名NETBIOSを返す '戻り値:ドメイン名(NETBIOS) '-------------------------------------------- Function GetNETBIOSDomainName() On Error Resume Next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim szTmp Dim strRet Dim ArrayName strRet = "" szTmp="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers szTmp = objComputer.UserName Next '\で区切る(Domain\User) ArrayName = Split(szTmp,"\") IF UBound(ArrayName) > 0 Then '0番目はDomain strRet = ArrayName(0) End IF GetNETBIOSDomainName = strRet Err.Clear End Function
6.DNSドメイン名の取得
Option Explicit Dim DomainNameFQDN Dim NETBIOSDomainName 'NETBIOSドメイン名を取得 NETBIOSDomainName = GetNETBIOSDomainName() 'FQDN名を取得する DomainNameFQDN = GetFQDNDomainName(NETBIOSDomainName) MsgBox DomainNameFQDN '----------------------------------------------------------- '処理内容:ドメイン名(DNSの設定値)情報の取得 '引数:NETBIOSDomainName '戻り値:ドメイン名(DNSの設定値) '----------------------------------------------------------- Function GetFQDNDomainName(NETBIOSDomainName) On Error Resume Next Dim HKEY_LOCAL_MACHINE HKEY_LOCAL_MACHINE = &H80000002 Err.Clear Dim objRegProv Dim HklmV Dim strRet strRet = "" HklmV = "Software\Microsoft\Windows NT\CurrentVersion\Winlogon\DomainCache\" Set objRegProv = GetObject("winmgmts:{impersonationLevel=Impersonate}" & "!\\.\root\default:StdRegProv") objRegProv.GetStringValue HKEY_LOCAL_MACHINE, HklmV,NETBIOSDomainName, strRet Set objRegProv = Nothing IF Err.Number <> 0 Then strRet = "N/A" End IF Err.Clear IF strRet = "" Or IsNull(strRet) Then strRet = "N/A" End IF GetFQDNDomainName = strRet Err.Clear End Function '-------------------------------------------- '処理内容:現在のユーザーがログインしているドメイン名NETBIOSを返す '戻り値:ドメイン名(NETBIOS) '-------------------------------------------- Function GetNETBIOSDomainName() On Error Resume Next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim szTmp Dim strRet Dim ArrayName strRet = "" szTmp="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers szTmp = objComputer.UserName Next '\で区切る(Domain\User) ArrayName = Split(szTmp,"\") IF UBound(ArrayName) > 0 Then '0番目はDomain strRet = ArrayName(0) End IF GetNETBIOSDomainName = strRet Err.Clear End Function
7.PC所属ドメイン名の取得
Option Explicit MsgBox GetJoinDomainName() '-------------------------------------------- '処理内容:PCが所属しているドメイン名を返す '戻り値:ドメイン名 '-------------------------------------------- Function GetJoinDomainName() On Error Resume Next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim strRet strRet = "" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers strRet = objComputer.Domain Next GetJoinDomainName = strRet Err.Clear End Function
8.OS種類の取得
Option Explicit MsgBox GetOSType() '----------------------------------------------------------- '処理内容:OS情報の取得 '戻り値:OS情報(SP含む) '----------------------------------------------------------- Function GetOSType() On error resume next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim OsVal Dim szTmp Dim strRet Dim strOSAr szTmp="" strRet="" strOSAr="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objComputer in colComputers szTmp = objComputer.Version OsVal = Mid(szTmp,1,3) IF OsVal = "5.0" Then strRet = "Windows 2000 " ElseIf OsVal = "5.1" Then strRet = "Windows XP " ElseIf OsVal = "5.2" Then strRet = "Windows Server 2003 " ElseIf OsVal = "6.0" Then IF InStr(UCase(objComputer.Caption),"SERVER") > 1 Then strRet = "Windows Server 2008 " Else strRet = "Windows Vista " End IF ElseIf OsVal = "6.1" Then IF InStr(UCase(objComputer.Caption),"SERVER") > 1 Then strRet = "Windows Server 2008 R2 " Else strRet = "Windows 7 " End IF ElseIf OsVal = "6.2" Then IF InStr(UCase(objComputer.Caption),"SERVER") > 1 Then strRet = "Windows Server 2012 " Else strRet = "Windows 8 " End IF Else strRet = "Windows " & "(" & szTmp & ") " End If strRet = strRet & "SP" & objComputer.ServicePackMajorVersion & "." & objComputer.ServicePackMinorVersion strOSAr = "" strOSAr = objComputer.OSArchitecture IF strOSAr = "" Or IsNull(strOSAr) Then strOSAr = "32ビット" End If strRet = strRet & " " &strOSAr Next GetOSType = strRet Err.Clear End Function
9.Windowsフォルダーのパス取得
Option Explicit MsgBox GetWindowsDirectory() '----------------------------------------------------------- '処理内容:Windowsフォルダ情報の取得 '戻り値:Windowsフォルダ情報 '----------------------------------------------------------- Function GetWindowsDirectory() On error resume next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim strRet szTmp="" strRet="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objComputer in colComputers strRet = objComputer.WindowsDirectory Next GetWindowsDirectory = strRet Err.Clear End Function
10.Windowsインストール日時情報取得
Option Explicit MsgBox GetWindowsInstallDate() '----------------------------------------------------------- '処理内容:Windowsのインストール日時を取得 '戻り値:Windowsのインストール日時 '----------------------------------------------------------- Function GetWindowsInstallDate() On error resume next Err.Clear Dim strRet strRet = "" Dim WindowsInstallDate Dim time_t WindowsInstallDate = "" Dim Shell Dim RegKey Set Shell = CreateObject("WScript.Shell") 'WindowsInstallの日付が登録されているレジストリのパス RegKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallDate" time_t = Shell.RegRead(RegKey) IF time_t <> "" Then Dim dGMTTime '日付を補正するために1970-01-01 00:00:00を加えます。GMTでセットします。 dGMTTime = DateAdd("s", time_t, "1970-01-01 00:00:00") Dim dLocalTime 'タイムゾーンを取得します。 RegKey = "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias" Dim iTZOffset iTZOffset = Shell.RegRead(RegKey) IF iTZOffset <> "" Then Dim HexVal HexVal = Hex(iTZOffset) iTZOffset = - CLng("&H" & HexVal) 'GMTにタイムゾーンを加えてローカル日付に変換します。 dLocalTime = DateAdd("n", iTZOffset, dGMTTime) '日付を文字列に変換 dLocalTime = FormatDateTime(dLocalTime, vbGeneralDate) IF Err.Number = 0 Then strRet = dLocalTime End IF End IF End IF Set Shell = Nothing Err.Clear GetWindowsInstallDate = strRet End Function
11.Windows登録者情報取得
Option Explicit MsgBox GetWindowsRegisteredOwner() '----------------------------------------------------------- '処理内容:Windows登録者名を取得 '戻り値:Windows登録者名 '----------------------------------------------------------- Function GetWindowsRegisteredOwner() On error resume next Err.Clear Dim strRet strRet = "" Dim strRegisteredOwner strRegisteredOwner = "" Dim Shell Dim RegKey Set Shell = CreateObject("WScript.Shell") RegKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner" strRegisteredOwner = Shell.RegRead(RegKey) IF Err.Number = 0 Then strRet = strRegisteredOwner Else strRet = "N/A" End IF GetWindowsRegisteredOwner = strRet Set Shell = Nothing Err.Clear End Function
12.Windows登録組織情報取得
Option Explicit MsgBox GetWindowsRegisteredOrganization() '----------------------------------------------------------- '処理内容:Windows登録組織名を取得 '戻り値:Windows登録組織名 '----------------------------------------------------------- Function GetWindowsRegisteredOrganization() On error resume next Err.Clear Dim strRet strRet = "" Dim strRegisteredOrganization strRegisteredOrganization = "" Dim Shell Dim RegKey Set Shell = CreateObject("WScript.Shell") RegKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization" strRegisteredOrganization = Shell.RegRead(RegKey) IF Err.Number = 0 Then strRet = strRegisteredOrganization Else strRet = "N/A" End IF GetWindowsRegisteredOrganization = strRet Set Shell = Nothing Err.Clear End Function
13.CPU情報の取得
Option Explicit MsgBox GetCPU_Description() '----------------------------------------------------------- '処理内容:CPU表示情報の取得 '戻り値:CPU表示情報 '----------------------------------------------------------- Function GetCPU_Description() On error resume next Err.Clear Dim objWMIService Dim objProcessor Dim colProcessors Dim strRet strRet="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor") For Each objProcessor in colProcessors strRet = strRet & objProcessor.Name & vbCrLf & objProcessor.Description 'CPUが複数ある場合でも始めの1つ目でループを抜けてしまいます。 '全てのCPUを取得する場合は、ループを外してください。 Exit For Next GetCPU_Description = strRet Err.Clear End Function
14.物理メモリサイズの取得
Option Explicit MsgBox GetPhysicalMemory() '----------------------------------------------------------- '処理内容:物理メモリ情報の取得 '戻り値:物理メモリ情報(MB) '----------------------------------------------------------- Function GetPhysicalMemory() On error resume next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim strRet Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers strRet = objComputer.TotalPhysicalMemory Next IF strRet ="" Or strRet = 0 Then strRet = "N/A" Else '小数点以下を四捨五入しMBに変換 strRet = ROUND(strRet/(1024*1024),0) & "MB" End IF GetPhysicalMemory = strRet Err.Clear End Function
15.PC製造元情報とモデル名の取得
Option Explicit MsgBox GetSystemManufacturer() '----------------------------------------------------------- '処理内容:製造元情報の取得 '戻り値:製造元情報 '----------------------------------------------------------- Function GetSystemManufacturer() On error resume next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim strRet strRet="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") For Each objComputer in colComputers strRet = objComputer.Manufacturer & vbCrLf & objComputer.Model Next GetSystemManufacturer = strRet Err.Clear End Function
16.IPアドレス、NIC名の取得
Option Explicit MsgBox GetIPAddress() '----------------------------------------------------------- '処理内容:IPアドレス、ネットワークインターフェース名の取得 '戻り値:IPアドレス、ネットワークインターフェース名 '----------------------------------------------------------- Function GetIPAddress() On error resume next Err.Clear Dim objWMIService Dim colNetCards Dim objNetCard Dim strRet Dim arrIPAddresses Dim strAddress Dim strTemp strTemp = "" strRet = "" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") Dim iCnt iCnt=0 For Each objNetCard in colNetCards strTemp = "" strRet = strRet & objNetCard.Caption arrIPAddresses = objNetCard.IPAddress 'IPアドレスを複数持っている可能性があるのでループ処理/区切りで処理 For Each strAddress in arrIPAddresses strTemp = strTemp & strAddress & "/" Next IF strTemp <> "" Then '最後の/を削除 strTemp = Mid(strTemp,1,Len(strTemp)-1) strRet = strRet & vbCrLf &"IPAddress:" & strTemp End IF strRet = strRet & vbCrLf iCnt=iCnt+1 Next IF strRet <> "" Then '最後のvbCrLfを削除 strRet = Mid(strRet,1,Len(strRet)-2) End IF GetIPAddress = strRet Err.Clear End Function
17.接続状態のNIC名の取得
Option Explicit MsgBox GetConnectedNetworkAdapter() '----------------------------------------------------------- '処理内容:接続状態(切断でない、無効でない)状態のネットワーク接続を取得 '戻り値:ネットワーク接続名 '----------------------------------------------------------- Function GetConnectedNetworkAdapter() On error resume next Err.Clear Dim objWMIService Dim colNetCards Dim objNetCard Dim strRet strRet = "" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapter Where NetConnectionStatus=2") For Each objNetCard in colNetCards strRet = strRet & "[" & objNetCard.NetConnectionID & "]" & objNetCard.Name strRet = strRet & vbCrLf Next GetConnectedNetworkAdapter = strRet Err.Clear End Function
18.ドライブ情報の取得
Option Explicit MsgBox GetDriveInfo() '----------------------------------------------------------- '処理内容:ドライブの情報取得 '戻り値:ドライブの容量(GB)・空き容量(MB/GB) '----------------------------------------------------------- Function GetDriveInfo() On error resume next Err.Clear Dim objWMIService Dim objLogicalDisk Dim colLogicalDisks Dim strRet Dim DiskSize Dim DiskFreeSpace strRet="" DiskSize = 0 DiskFreeSpace = 0 Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colLogicalDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk where DriveType=3") For Each objLogicalDisk in colLogicalDisks DiskSize = objLogicalDisk.Size IF DiskSize > 0 Then DiskSize = ROUND(DiskSize/(1024*1024*1024),1) & "GB" Else DiskSize = "N/A" End IF DiskFreeSpace = objLogicalDisk.FreeSpace IF DiskFreeSpace > 0 Then DiskFreeSpace = ROUND(DiskFreeSpace/(1024*1024),0) IF DiskFreeSpace < 1024 Then DiskFreeSpace = DiskFreeSpace & "MB" Else DiskFreeSpace = ROUND(objLogicalDisk.FreeSpace/(1024*1024*1024),1) & "GB" End IF Else DiskFreeSpace = "N/A" End IF strRet = strRet & objLogicalDisk.DeviceID & "(合計:" & DiskSize & " - 空き:" & DiskFreeSpace & ")" & objLogicalDisk.FileSystem & vbCrLf Next IF strRet <> "" Then strRet = Mid(strRet,1,Len(strRet)-2) End IF GetDriveInfo = strRet Err.Clear End Function
19.ネットワークドライブ情報の取得
Option Explicit MsgBox GetNetworkDriveInfo() '----------------------------------------------------------- '処理内容:ネットワークドライブの情報取得 '戻り値:ネットワークドライブのドライブ文字)・リンク先UNCパス '----------------------------------------------------------- Function GetNetworkDriveInfo() On error resume next Err.Clear Dim objWMIService Dim objLogicalDisk Dim colLogicalDisks Dim strRet strRet="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colLogicalDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk where DriveType=4") For Each objLogicalDisk in colLogicalDisks strRet = strRet & objLogicalDisk.DeviceID & "(" & objLogicalDisk.ProviderName & ")"&vbCrLf Next IF strRet <> "" Then strRet = Mid(strRet,1,Len(strRet)-2) End IF GetNetworkDriveInfo = strRet Err.Clear End Function
20.特殊フォルダーの取得
'http://msdn.microsoft.com/ja-jp/library/cc364490.aspx
Option Explicit DIm ArrayData ArrayData=Array("AllUsersDesktop","AllUsersStartMenu", _ "AllUsersPrograms", "AllUsersStartup","Desktop","Favorites", _ "Fonts","MyDocuments","NetHood","PrintHood", _ "Programs","Recent","SendTo","StartMenu", _ "Startup","Templates") Dim strMsg Dim i For i=0 to UBound(ArrayData) strMsg = strMsg & "["&ArrayData(i)&"]" & GetSpecialFolderInfo(ArrayData(i))&vbCrLf Next IF Not strMsg="" Then strMsg = Mid(strMsg,1,Len(strMsg)-2) End IF MsgBox strMsg '----------------------------------------------------------- '処理内容:特殊フォルダ情報取得 '引数:取得フォルダ名 '戻り値:フルパス '----------------------------------------------------------- Function GetSpecialFolderInfo(strTarget) On error resume next Err.Clear Dim strRet strRet = "" Dim Shell Set Shell = CreateObject("WScript.Shell") Dim strFolderPath strRet = Shell.SpecialFolders(strTarget) Set Shell = Nothing Err.Clear GetSpecialFolderInfo = strRet End Function
21.プリンター情報の取得
Option Explicit MsgBox GetPrinterInfo() '----------------------------------------------------------- '処理内容:プリンタ情報取得 '戻り値:プリンタ情報 '----------------------------------------------------------- Function GetPrinterInfo() On error resume next Err.Clear Dim objWMIService Dim objComputer Dim colComputers Dim strRet Dim strDefaultP strDefaultP = "" strRet="" Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set colComputers = objWMIService.ExecQuery("Select * from Win32_Printer") For Each objComputer in colComputers strRet = strRet & "プリンタ名:" & objComputer.Name strDefaultP = objComputer.Default IF UCase(strDefaultP) = "TRUE" Then strRet = strRet & "(通常使うプリンタ)" End IF strRet = strRet & vbCrLf &"Port名:" & objComputer.PortName & vbCrLf & vbCrLf Next IF Not strRet="" Then strRet = Mid(strRet,1,Len(strRet)-4) End IF GetPrinterInfo = strRet Err.Clear End Function
22.イベントビューアーへの登録
Option Explicit Call WriteLogEvent(0,"成功しました。") Call WriteLogEvent(1,"失敗しました。") Call WriteLogEvent(2,"警告です。") Call WriteLogEvent(4,"情報です。") MsgBox "イベントビューアーに書き込みました。" '-------------------------------------------- '処理内容:イベントログへ登録(アプリケーション) '引数: ' intType:EventID 0=成功(情報) 1=失敗(失敗) 2=警告(警告) 4=情報(情報) ' strMessage:登録するメッセージ '-------------------------------------------- Sub WriteLogEvent(intType,strMessage) On Error Resume Next Err.Clear Dim WshShell '0:成功,1:エラー,2:警告,4:情報 Set WshShell = CreateObject("WScript.Shell") Call WshShell.LogEvent(intType,strMessage) Set WshShell = Nothing Err.Clear End Sub
23.ログファイルへの登録
Option Explicit Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 '出力するLogファイルのフルパスを設定(事前にフォルダを作成する必要あり) Const gszLogFilePath = "c:\log\test.log" Call WriteLog("成功しました。") Call WriteLog_NonTime("失敗しました。") MsgBox "Logファイルへの登録が完了しました。"&gszLogFilePath '-------------------------------------------- '処理内容:Logの登録(処理時間付き) '引数:ログに追加するメッセージ '-------------------------------------------- Sub WriteLog(Message) On Error Resume Next Dim oTS Dim sLogFile sLogFile = gszLogFilePath Dim oFS Set oFS = CreateObject("Scripting.FileSystemObject") Set oTS = oFS.OpenTextFile(sLogFile, ForAppending, True, TristateUseDefault) oTS.WriteLine "[" & CStr(Now) & "] " & Message oTS.Close Set oTS = Nothing Set oFS = Nothing End Sub '-------------------------------------------- '処理内容:Logの登録(処理時間なし) '引数:ログに追加するメッセージ '-------------------------------------------- Sub WriteLog_NonTime(Message) On Error Resume Next Dim oTS Dim sLogFile sLogFile = gszLogFilePath Dim oFS Set oFS = CreateObject("Scripting.FileSystemObject") Set oTS = oFS.OpenTextFile(sLogFile, ForAppending, True, TristateUseDefault) oTS.WriteLine Message oTS.Close Set oTS = Nothing Set oFS = Nothing End Sub
24.Officeバージョンの取得
'Excelの例
Option Explicit MsgBox "Excelのバージョン:"&GetOfficeVer("Excel") '----------------------------------------------------------- '処理内容:Office製品のバージョンを取得 '引数:アプリケーション名(Excel Word Powerpoint Access) '戻り値:Office製品のバージョン '----------------------------------------------------------- Function GetOfficeVer(appName) 'http://support.microsoft.com/kb/240794/ja On error resume next Err.Clear Dim strRet strRet = "" Dim officeVer officeVer = "" Dim Obj Dim Shell Dim RegKey Set Shell = CreateObject("WScript.Shell") Dim KeyG KeyG = appName & ".Application" RegKey = "HKLM\SOFTWARE\Classes\" & KeyG & "\CurVer\" officeVer = UCase(Shell.RegRead(RegKey)) KeyG = UCase(KeyG) officeVer=Replace(officeVer,KeyG, "", 1, -1, 1) Set Shell = Nothing IF Err.Number = 0 Then Select Case officeVer Case ".8" strRet = appName & "97" Case ".9" strRet = appName & "2000" Case ".10" strRet = appName & "XP" Case ".11" strRet = appName & "2003" Case ".12" strRet = appName & "2007" Case ".14" strRet = appName & "2010" Case ".15" strRet = appName & "2013" Case Else strRet = appName & "(" & officeVer & ")" End Select Else strRet = appName & ":未インストール" End IF GetOfficeVer = strRet Err.Clear End Function
25.IEバージョンの取得
Option Explicit MsgBox "IEのバージョン:" & GetIEVer() '----------------------------------------------------------- '処理内容:Internet Explorerのバージョンを取得 '戻り値:Internet Explorerのバージョン '----------------------------------------------------------- Function GetIEVer() On error resume next Err.Clear Dim strRet strRet = "" Dim IEVer IEVer = "" Dim Shell Dim RegKey Set Shell = CreateObject("WScript.Shell") RegKey = "HKLM\SOFTWARE\Microsoft\Internet Explorer\Version" IEVer = Shell.RegRead(RegKey) IF Err.Number = 0 Then strRet = "version" & IEVer Else strRet = "未インストール" End IF GetIEVer = strRet Set Shell = Nothing Err.Clear End Function
参考:
VBScript ランゲージ リファレンス
http://msdn.microsoft.com/ja-jp/library/cc392193.aspx
WshShell オブジェクト
http://msdn.microsoft.com/ja-jp/library/cc364436.aspx
WshShell.Run
http://msdn.microsoft.com/ja-jp/library/cc364421.aspx
特殊フォルダー
http://msdn.microsoft.com/ja-jp/library/cc364490.aspx
Officeバージョン取得
http://support.microsoft.com/kb/240794/ja