VBScript-pätkiä
Hae XMLHTTP-komponentin avulla veppisivun title.
Function URLTitle(URL)
Dim Response
Dim sStart, sEnd
Set Http = CreateObject("Microsoft.XMLHTTP")
Http.Open "GET",URL,False
Http.Send
Response = Http.responseText
sStart=Instr(UCASE(Response),"<TITLE>")
sEnd=Instr(UCASE(Response),"</TITLE>")
If sStart >0 And (sEnd > sStart) Then
URLTitle=Mid(Response,sStart+7,sEnd-sStart-7)
Else
URLTitle="Error: No title found"
End If
End Function
WScript.Echo URLTitle("http://www.sonera.fi")
Perhanan vbscript ja sen funktion objektipalautuksen scope
Tartti oppia miten funktiot vbscriptissä palauttavat objekteja. Scopesta kun tullaan ulos, ei ulkopuolella voi testata IsObject:illa palauttiko funktio järkevää vai ei. Ensin funktio jota kutsutaan (tässä tapauksessa WMI-objektia pathin perusteella hakeva funktio):
Function GetWMIObject (WMIPath) ' ' Yritetään saada WMI-objekti annetun pathin perusteella ' Dim tempObj On Error Resume Next Set tempObj = GetObject(WMIPath) On Error Goto 0 If IsObject(tempObj) Then ' objekti syntyi, palautetaan se Set GetWmiObject = tempObj Exit Function Else ' ei saatu objektia, palautetaan nothing Set GetWMIObject = Nothing Exit Function End If End Function
Sitten kun sitä kutsutaan esimerkiksi loopissa jossa annetaan useampi path, ja keräillään saadut objektit arrayihin, niin seuraava esimerkki EI toimi:
For F=0 to Ubound(WMIPaths) 'WMIPaths on array jossa on kasa patheja Set objWMI = GetWMIObject (WMIPaths(F)) If IsObject(objWMI) Then Redim Preserve ThisMachineWMIs(ubound(ThisMachineWMIs)+1) ' muutetaan arraytä dynaamisesti ja... Set ThisMachineWMIs(ubound(ThisMachineWMIs)) = objWMI ' sijoitetaan objekti arrayhin. End If Next
Yllä käy niin hassusti, että objWMI on AINA objekti, oli paluuarvo sitten funktiosta "oikea" objekti tai Nothing. Hassua tästä seuraa sen verran, että vaikka objekti ON sisällöltään Nothing, se pointtaa silti mahdollisesti edellisillä kierroksilla saatuun objektiin. Jos siis kerrankin saadaan objekti, kaikilla seuraavilla kierroksilla objektiarrayhin menee KOPIO edellisestä saadusta objektista.
Oikea tapa testata (joka sitten toimii):
For F=0 to Ubound(WMIPaths) 'WMIPaths on array jossa on kasa patheja Set objWMI = GetWMIObject (WMIPaths(F)) If IsObject(objWMI) and Not (objWMI Is Nothing) Then ' Kun tulee testattua onko objekti Nothing, asia menee oikein. Redim Preserve ThisMachineWMIs(ubound(ThisMachineWMIs)+1) Set ThisMachineWMIs(ubound(ThisMachineWMIs)) = objWMI End If Next
Käyttiksen perustiedot WMI:n läpi
Tartti saada copypaste-kelpoinen hässäkkä aikaan komentoriviltä erilaisiin dokumentaatiohin. Alla tulos.
Copypaste koodista ja talletus vaikka nimellä "get-os-basic-info.vbs". Ajo sitten kätevästi komennolla CSCRIPT get-os-basic-info.vbs
'
' Get operating system basic info v1.0
'
' (C) PLZI 2012
'
Set oWMI = GetObject("winmgmts:root\cimv2")
Set colOS = oWMI.ExecQuery ("Select * from Win32_OperatingSystem")
For Each OS in colOS
WScript.Echo "Host Information"
Set cItems = oWMI.ExecQuery("Select * from Win32_Computersystem")
For Each Item in cItems
WScript.Echo "DNSName: " & vbtab & Item.DNSHostName
WScript.Echo "HostName:" & vbtab & Item.Name
WScript.Echo "Part of domain:" & vbtab & Item.PartOfDomain
If Item.PartOfDomain Then
WScript.Echo "Domain name:" & vbtab & Item.Domain
Wscript.Echo "Domain role:" & vbtab & ConvertRole(Item.DomainRole)
Else
Wscript.Echo "Workgroup:" & Item.WorkGroup
End If
Next
WScript.Echo
WScript.Echo "Operating system information"
Wscript.Echo "OS: " & vbtab & OS.Caption
Select Case OS.ServicePackMajorVersion
Case 0
strSP = "RTM"
Case Else
strSP = "Service Pack " & OS.ServicePackMajorVersion
End Select
WScript.Echo "SP Level:" & vbtab & strSP
WScript.Echo "Version: " & vbtab & OS.Version
WScript.Echo "OS Arch: " & vbtab & ConvertBitness(GetBitness("OS"))
WScript.Echo "Install Date: " & vbtab & DateTimeToDate(OS.InstallDate)
WScript.Echo
WScript.Echo "Hardware information"
Set cItems = oWMI.ExecQuery("Select * from Win32_Computersystem")
For Each Item In cItems
TotalMem = Item.TotalPhysicalMemory
TotalProcs = Item.NumberOfProcessors
Systype = Item.SystemType
Model = Item.Model
Manuf = Item.Manufacturer
Next
Set cItems = oWMI.ExecQuery("Select * from Win32_Processor")
TotalCores = 0
For Each Item In cItems
TotalCores = TotalCores + Item.NumberOfCores
Next
WScript.Echo "CPUs / Cores:" & vbtab & TotalProcs & "/" & TotalCores
Next
WScript.Echo "Manufacturer: " & vbtab & Manuf
WScript.Echo "Model: " & vbtab & Model
WScript.Echo "System type:" & vbTab & SysType
Wscript.Echo "Memory: " & vbtab & ConvertMem (TotalMem)
WScript.Echo "Processors: " & vbtab & ConvertProcs (TotalProcs, Totalcores)
WScript.Echo "HW Arch: " & vbtab & ConvertBitness(GetBitness("HW"))
Function GetBitness(Target)
Select Case Ucase(Target)
Case "OS", "WINDOWS", "OPERATING SYSTEM"
GetBitness = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth
Case "HW", "HARDWARE"
GetBitness = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").DataWidth
Case Else
GetBitness = 99999 'unknown Target item (OS, Hardware, Process)
End Select
End Function
Function DatetimeToDate(strUTC)
Set datetime = CreateObject("WbemScripting.SWbemDateTime")
datetime.Value = strUTC
DatetimeToDate = datetime.GetVarDate(True)
End Function
Function ConvertBitness (bitness)
Select Case Bitness
Case 32
ConvertBitness="x86"
Case 64
ConvertBitness="x64"
End Select
End Function
Function ConvertProcs (CPU,Cores)
Dim PerCpu
Dim CPUText
CPUText = Array ("None", "Single","Dual","Tri","Quad","Penta","Hexa","Hepta","Octa","Nona","Deca")
PerCPU = Cores / CPU
ConvertProcs = CPU & " " & CPUText(PerCpu) & "-core CPU(s)"
End Function
Function ConvertMem (Memory)
Dim MB, GB
MB = Round(Memory / 1048576)
GB = Round(Memory / (1048576*1024))
ConvertMem = MB & " MB (" & GB & " GB)"
End Function
Function ConvertRole (Role)
Select Case Role
Case 0
ConvertRole="Standalone Workstation"
Case 1
ConvertRole="Member Workstation"
Case 2
ConvertRole="Standalone Server"
Case 3
ConvertRole="Member Server"
Case 4
ConvertRole="Backup Domain Controller"
Case 5
ConvertRole="Primary Domain Controller"
Case Else
ConvertRole="Unknown role identifier (" & Role & ")"
End Select
End Function