Ich habe heute ein Script zusammengebastelt, welches den Windows 7 und den Office 2007 Lizenz-Key des Computers ausliest und ihn in eine Textdatei speichert. Die Textdatei entspricht dem Computernamen zur einfachen Zuordnung von PC und Key. Das Script läuft komplett selbstständig, kann also z.B per Gruppenrichtlinie automatisch ausgeführt werden.
Code-Grundlage ist dieser Forum Post.
Ich habe den Code bereinigt, gekürzt und um die Erkennung von Office 2007 erweitert. Das Script erkennt außerdem, ob das System mit 32bit oder 64bit läuft und passt die Erkennung dementsprechend an.
Hier der verbesserte Code:
On Error Resume Next Dim WshNetwork Set WshNetwork = CreateObject("WScript.Network") cName = WshNetwork.ComputerName Set WshShell = CreateObject("WScript.Shell") ' detect processor architecture, returns 32 or 64 pa = GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth ' get current path set fso = CreateObject("Scripting.FileSystemObject") logpath = fso.BuildPath(fso.GetAbsolutePathName("."), "Keys.txt") 'logpath = "\\server\path\to\log.txt" 'for servers ' ----------- Windows 7 Key ----------- wkey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" wdigitalId = WshShell.RegRead(wkey & "DigitalProductId") wProductName = "Product Name : " & WshShell.RegRead(wkey & "ProductName") & vbNewLine wProductId = "Product Id : " & WshShell.RegRead(wkey & "ProductId") & vbNewLine wProductKey = "Install Key : " & Converted(wdigitalId) windowsData = wProductName & wProductId & wProductKey ' ----------- Windows 7 END ----------- ' ----------- Office 2007 Key ----------- '32bit or 64bit? If pa = "32" Then okey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\ Registration\{90120000-0011-0000-0000-0000000FF1CE}\DigitalProductID\" Else okey = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Registration\{91120000-00CA-0000-0000-0000000FF1CE}\" End if odigitalId = WshShell.RegRead(okey & "DigitalProductID") If (IsEmpty(odigitalId)) Then officeData = "Office 2007 not found" Else oProductKey = "Install Key : " & Converted(odigitalId) oProductName = "Product Name : " & WshShell.RegRead(okey & "ProductName") & vbNewLine oProductId = "Product Id : " & WshShell.RegRead(okey & "ProductId") & vbNewLine officeData = oProductName & oProductId & oProductKey End If ' ----------- Office 2007 END ----------- Save() Function Converted(id) Const OFFSET = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 x = 14 Do Cur = Cur * 256 Cur = id(x + OFFSET) + Cur id(x + OFFSET) = (Cur \ 24) And 255 Cur = Cur Mod 24 x = x -1 Loop While x >= 0 i = i - 1 Converted = Mid(Chars, Cur + 1, 1) & Converted If (((29 - i) Mod 6) = 0) And (i <> -1) Then i = i -1 Converted = "-" & Converted End If Loop While i >= 0 End Function Function Save() WScript.Echo "Save to: " & logpath Set file = CreateObject("Scripting.FileSystemObject").CreateTextFile(logpath,2,0) file.Writeline(FormatDateTime(Date, vbLongDate) & vbNewLine) file.Writeline(windowsData & vbNewLine) 'Windows 7 file.Writeline(officeData & vbNewLine) 'Office 2007 file.close End Function
Ergebnis:
Den Logpath in Zeile 7 müsst ihr anpassen. Ihr könnt diese Zeile auch komplett entfernen und die Zeile 61 anpassen („logpath &“ entfernen), dann wird die Logdatei immer im selben Ordner mit der .vbs erstellt. Dann ist das Script allerdings nicht mehr GPO tauglich. Für GPO Verteilung via Computer-Startscript müsst ihr den Pfad im Script explizit angeben.
Hinweis: Die Erkennung des Windows Keys funktioniert bei der Enterprise Version voraussichtlich nicht. Bei Windows Server 2008 R2 (Standard) funktioniert es.
Es ist etwas erschreckend wie schlecht die Keys geschützt waren. Ich weiß nicht, ob sich diese Methode auch für andere Versionen von Windows oder Office verwenden ließe. Vielleicht ist hier ein ITler mit WinXP, Office 2k3 o.Ä. und schaut mal in der Registry nach.