$out = New-Object PSObject Try { $OSInfo = Get-WmiObject -class Win32_OperatingSystem -ErrorAction Stop $out | Add-Member -MemberType NoteProperty -Name Computername -Value $env:COMPUTERNAME $out | Add-Member -MemberType NoteProperty -Name OSArchitecture -Value $OSInfo.OSArchitecture $out | Add-Member -MemberType NoteProperty -Name Operatingsystem -Value $OSInfo.Caption $out | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $OSInfo.SerialNumber $out | Add-Member -MemberType NoteProperty -Name OSVersion -Value $OSInfo.Version If ($OSInfo.OSArchitecture -eq '64-bit') { $RegValue = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DigitalProductId4).DigitalProductID4[0x34..0x42] } Else { $RegValue = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name DigitalProductId).DigitalProductID[0x34..0x42] } $ProductKey = "" for ($i = 24; $i -ge 0; $i--) { $r = 0 for ($j = 14; $j -ge 0; $j--) { $r = ($r * 256) -bxor $RegValue[$j] $RegValue[$j] = [math]::Floor([double]($r/24)) $r = $r % 24 } $ProductKey = "BCDFGHJKMPQRTVWXY2346789"[$r] + $ProductKey if (($i % 5) -eq 0 -and $i -ne 0) { $ProductKey = "-" + $ProductKey } } $out | Add-Member -MemberType NoteProperty -Name ProductKey -Value $ProductKey } Catch { $out | Add-Member -MemberType NoteProperty -Name ErrorMessage -Value $error[0].exception.message } $out | Format-list | Out-String