Script per ricavare informazioni sul sistema
Tramite WMI e il Registry è possibile ricavare semplicemente informazioni sul sistema quali:
- Versione
- Data di installazione
- Dati di registrazione
- Informazioni sull’attivazione
- Product Key
Di seguito un esempio di script che di solito adopero per esaminare le installazioni:
Option Explicit
On Error Resume Next
Dim message
message = “*** Operating System Info ***”
Dim objOS
For Each objOS in GetObject( _
“winmgmts:”).InstancesOf(“Win32_OperatingSystem”)
message = message & VBCR _
& “Name = ” & objOS.Caption & Trim( ” ” & objOS.CSDVersion) & VBCR _
& “Version = ” & objOS.Version & VBCR _
& “Registered User = ” & objOS.RegisteredUser & VBCR _
& “Organization = ” & objOS.Organization & VBCR _
& “Serial Number = ” & objOS.SerialNumber & VBCR _
& “Install Date = ” & WMIDateStringToDate(objOS.InstallDate) & VBCR _
& “Build Info =” & objOS.BuildNumber & ” ” & objOS.BuildType
Next
Set objOS = Nothing
message = message & VBCR & VBCR _
& “*** Windows Product Activation (WPA) Info ***”
Dim objWPA, installationID
For Each objWPA in GetObject( _
“winmgmts:”).InstancesOf(“Win32_WindowsProductActivation”)
objWPA.GetInstallationID(installationID)
message = message & VBCR _
& “Activation Required = ” & IIF(objWPA.ActivationRequired = 1, “Yes”, “No”) & VBCR _
& “Remaining Grace Period = ” & IIF(objWPA.ActivationRequired = 1, objWPA.RemainingGracePeriod, “-“)
Next
Set objWPA = Nothing
message = message & VBCR & VBCR _
& “*** CD Key ***”
Const DigitalProductIdKey=”HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId”
Dim wshShell
Set WshShell = CreateObject(“wscript.Shell”)
message = message & VBCR _
& DecodeDigitalProductID(WshShell.RegRead(DigitalProductIdKey))
WScript.Echo message
if Err <> 0 Then
WScript.Echo Err.Description
Err.Clear
End if
Private Function IIf( expr, truepart, falsepart )
IIF = falsepart
If expr Then IIf = truepart
End Function
Function WMIDateStringToDate(date)
WMIDateStringToDate = _
CDate(Mid(date, 5, 2) & “/” & _
Mid(date, 7, 2) & “/” & _
Left(date, 4) & ” ” & _
Mid (date, 9, 2) & “:” & _
Mid(date, 11, 2) & “:” & _
Mid(date, 13, 2))
End Function
Function DecodeDigitalProductID(id)
Const idOffset=52
Const Digits=”BCDFGHJKMPQRTVWXY2346789″
Dim i,intAccumulator,j,strProductKey
i=28
Do
intAccumulator=0 : j=14
Do
intAccumulator=intAccumulator*256
intAccumulator=id(j+idOffset)+intAccumulator
id(j+idOffset)=(intAccumulator\24) and 255
intAccumulator=intAccumulator Mod 24
j=j-1
Loop While j>=0
i=i-1
strProductKey=mid(Digits,intAccumulator+1,1) & strProductKey
if (((29-i) Mod 6)=0) and (i<>-1) then
i=i-1
strProductKey=”-” & strProductKey
End If
Loop While i>=0
DecodeDigitalProductID=strProductKey
End Function
Di seguito un esempio dell’output:
Per la codifica della data di installazione ho preferito utilizzare una funzione di decodifica anche se sarebbe stato possibile utilizzare la classe WbemScripting.SWbemDateTime, che però è disponibile solo a partire da Windows XP, per ulteriori informazioni si veda Hey, Scripting Guy! It’s About Time (Oh, and About Dates, Too).
Ho utilizzato On Error Resume Next per consentire la visualizazione delle informazioni anche in caso di possibili errori.