PoshCode Archive  Hex Artifact Content

Artifact 3e6b65f4ab745184c1c29395fe41433928fc1dc46b390b41802eb081625480d2:

  • File get-windows-product-key.ps1 — part of check-in [436d63bc29] at 2018-06-10 13:56:58 on branch trunk — retrieve the windows product key of a specified machine using WMI (user: karl prosser size: 1663)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 67  hell..# title: g
0030: 65 74 20 77 69 6e 64 6f 77 73 20 70 72 6f 64 75  et windows produ
0040: 63 74 20 6b 65 79 0d 0a 23 20 64 65 73 63 72 69  ct key..# descri
0050: 70 74 69 6f 6e 3a 20 72 65 74 72 69 65 76 65 20  ption: retrieve 
0060: 74 68 65 20 77 69 6e 64 6f 77 73 20 70 72 6f 64  the windows prod
0070: 75 63 74 20 6b 65 79 20 6f 66 20 61 20 73 70 65  uct key of a spe
0080: 63 69 66 69 65 64 20 6d 61 63 68 69 6e 65 20 75  cified machine u
0090: 73 69 6e 67 20 57 4d 49 0d 0a 23 20 76 65 72 73  sing WMI..# vers
00a0: 69 6f 6e 3a 20 30 2e 31 0d 0a 23 20 74 79 70 65  ion: 0.1..# type
00b0: 3a 20 66 75 6e 63 74 69 6f 6e 0d 0a 23 20 61 75  : function..# au
00c0: 74 68 6f 72 3a 20 6b 61 72 6c 20 70 72 6f 73 73  thor: karl pross
00d0: 65 72 0d 0a 23 20 6c 69 63 65 6e 73 65 3a 20 43  er..# license: C
00e0: 43 30 0d 0a 23 20 66 75 6e 63 74 69 6f 6e 3a 20  C0..# function: 
00f0: 67 65 74 2d 77 69 6e 64 6f 77 73 70 72 6f 64 75  get-windowsprodu
0100: 63 74 6b 65 79 0d 0a 23 20 78 2d 70 6f 73 68 63  ctkey..# x-poshc
0110: 6f 64 65 2d 69 64 3a 20 35 35 34 39 0d 0a 23 20  ode-id: 5549..# 
0120: 78 2d 61 72 63 68 69 76 65 64 3a 20 32 30 31 35  x-archived: 2015
0130: 2d 30 31 2d 33 31 54 32 30 3a 32 39 3a 31 36 0d  -01-31T20:29:16.
0140: 0a 23 20 78 2d 70 75 62 6c 69 73 68 65 64 3a 20  .# x-published: 
0150: 32 30 31 35 2d 31 30 2d 32 39 54 31 37 3a 34 36  2015-10-29T17:46
0160: 3a 30 30 0d 0a 23 0d 0a 23 0d 0a 66 75 6e 63 74  :00..#..#..funct
0170: 69 6f 6e 20 67 65 74 2d 77 69 6e 64 6f 77 73 70  ion get-windowsp
0180: 72 6f 64 75 63 74 6b 65 79 28 5b 73 74 72 69 6e  roductkey([strin
0190: 67 5d 24 63 6f 6d 70 75 74 65 72 29 0d 0a 7b 0d  g]$computer)..{.
01a0: 0a 24 52 65 67 20 3d 20 5b 57 4d 49 43 6c 61 73  .$Reg = [WMIClas
01b0: 73 5d 20 28 22 5c 5c 22 20 2b 20 24 63 6f 6d 70  s] ("\\" + $comp
01c0: 75 74 65 72 20 2b 20 22 5c 72 6f 6f 74 5c 64 65  uter + "\root\de
01d0: 66 61 75 6c 74 3a 53 74 64 52 65 67 50 72 6f 76  fault:StdRegProv
01e0: 22 29 0d 0a 24 76 61 6c 75 65 73 20 3d 20 5b 62  ")..$values = [b
01f0: 79 74 65 5b 5d 5d 28 24 72 65 67 2e 67 65 74 62  yte[]]($reg.getb
0200: 69 6e 61 72 79 76 61 6c 75 65 28 32 31 34 37 34  inaryvalue(21474
0210: 38 33 36 35 30 2c 22 53 4f 46 54 57 41 52 45 5c  83650,"SOFTWARE\
0220: 4d 69 63 72 6f 73 6f 66 74 5c 57 69 6e 64 6f 77  Microsoft\Window
0230: 73 20 4e 54 5c 43 75 72 72 65 6e 74 56 65 72 73  s NT\CurrentVers
0240: 69 6f 6e 22 2c 22 44 69 67 69 74 61 6c 50 72 6f  ion","DigitalPro
0250: 64 75 63 74 49 64 22 29 2e 75 76 61 6c 75 65 29  ductId").uvalue)
0260: 0d 0a 24 6c 6f 6f 6b 75 70 20 3d 20 5b 63 68 61  ..$lookup = [cha
0270: 72 5b 5d 5d 28 22 42 22 2c 22 43 22 2c 22 44 22  r[]]("B","C","D"
0280: 2c 22 46 22 2c 22 47 22 2c 22 48 22 2c 22 4a 22  ,"F","G","H","J"
0290: 2c 22 4b 22 2c 22 4d 22 2c 22 50 22 2c 22 51 22  ,"K","M","P","Q"
02a0: 2c 22 52 22 2c 22 54 22 2c 22 56 22 2c 22 57 22  ,"R","T","V","W"
02b0: 2c 22 58 22 2c 22 59 22 2c 22 32 22 2c 22 33 22  ,"X","Y","2","3"
02c0: 2c 22 34 22 2c 22 36 22 2c 22 37 22 2c 22 38 22  ,"4","6","7","8"
02d0: 2c 22 39 22 29 0d 0a 24 6b 65 79 53 74 61 72 74  ,"9")..$keyStart
02e0: 49 6e 64 65 78 20 3d 20 5b 69 6e 74 5d 35 32 3b  Index = [int]52;
02f0: 0d 0a 24 6b 65 79 45 6e 64 49 6e 64 65 78 20 3d  ..$keyEndIndex =
0300: 20 5b 69 6e 74 5d 28 24 6b 65 79 53 74 61 72 74   [int]($keyStart
0310: 49 6e 64 65 78 20 2b 20 31 35 29 3b 0d 0a 24 64  Index + 15);..$d
0320: 65 63 6f 64 65 4c 65 6e 67 74 68 20 3d 20 5b 69  ecodeLength = [i
0330: 6e 74 5d 32 39 0d 0a 24 64 65 63 6f 64 65 53 74  nt]29..$decodeSt
0340: 72 69 6e 67 4c 65 6e 67 74 68 20 3d 20 5b 69 6e  ringLength = [in
0350: 74 5d 31 35 0d 0a 24 64 65 63 6f 64 65 64 43 68  t]15..$decodedCh
0360: 61 72 73 20 3d 20 6e 65 77 2d 6f 62 6a 65 63 74  ars = new-object
0370: 20 63 68 61 72 5b 5d 20 24 64 65 63 6f 64 65 4c   char[] $decodeL
0380: 65 6e 67 74 68 20 0d 0a 24 68 65 78 50 69 64 20  ength ..$hexPid 
0390: 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20 53 79 73  = new-object Sys
03a0: 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e  tem.Collections.
03b0: 41 72 72 61 79 4c 69 73 74 0d 0a 66 6f 72 20 28  ArrayList..for (
03c0: 24 69 20 3d 20 24 6b 65 79 53 74 61 72 74 49 6e  $i = $keyStartIn
03d0: 64 65 78 3b 20 24 69 20 2d 6c 65 20 24 6b 65 79  dex; $i -le $key
03e0: 45 6e 64 49 6e 64 65 78 3b 20 24 69 2b 2b 29 7b  EndIndex; $i++){
03f0: 20 5b 76 6f 69 64 5d 24 68 65 78 50 69 64 2e 41   [void]$hexPid.A
0400: 64 64 28 24 76 61 6c 75 65 73 5b 24 69 5d 29 20  dd($values[$i]) 
0410: 7d 0d 0a 66 6f 72 20 28 20 24 69 20 3d 20 24 64  }..for ( $i = $d
0420: 65 63 6f 64 65 4c 65 6e 67 74 68 20 2d 20 31 3b  ecodeLength - 1;
0430: 20 24 69 20 2d 67 65 20 30 3b 20 24 69 2d 2d 29   $i -ge 0; $i--)
0440: 0d 0a 20 20 20 20 7b 20 20 20 20 20 20 20 20 20  ..    {         
0450: 20 20 20 20 20 20 20 0d 0a 20 20 20 20 20 69 66         ..     if
0460: 20 28 28 24 69 20 2b 20 31 29 20 25 20 36 20 2d   (($i + 1) % 6 -
0470: 65 71 20 30 29 7b 24 64 65 63 6f 64 65 64 43 68  eq 0){$decodedCh
0480: 61 72 73 5b 24 69 5d 20 3d 20 27 2d 27 7d 0d 0a  ars[$i] = '-'}..
0490: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
04a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 64 69    {..        $di
04b0: 67 69 74 4d 61 70 49 6e 64 65 78 20 3d 20 5b 69  gitMapIndex = [i
04c0: 6e 74 5d 30 0d 0a 20 20 20 20 20 20 20 20 66 6f  nt]0..        fo
04d0: 72 20 28 24 6a 20 3d 20 24 64 65 63 6f 64 65 53  r ($j = $decodeS
04e0: 74 72 69 6e 67 4c 65 6e 67 74 68 20 2d 20 31 3b  tringLength - 1;
04f0: 20 24 6a 20 2d 67 65 20 30 3b 20 24 6a 2d 2d 29   $j -ge 0; $j--)
0500: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0510: 20 20 20 20 20 20 20 20 20 24 62 79 74 65 56 61           $byteVa
0520: 6c 75 65 20 3d 20 5b 69 6e 74 5d 28 28 24 64 69  lue = [int](($di
0530: 67 69 74 4d 61 70 49 6e 64 65 78 20 2a 20 5b 69  gitMapIndex * [i
0540: 6e 74 5d 32 35 36 29 20 2d 62 6f 72 20 5b 62 79  nt]256) -bor [by
0550: 74 65 5d 24 68 65 78 50 69 64 5b 24 6a 5d 29 3b  te]$hexPid[$j]);
0560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 68  ..            $h
0570: 65 78 50 69 64 5b 24 6a 5d 20 3d 20 5b 62 79 74  exPid[$j] = [byt
0580: 65 5d 20 28 5b 6d 61 74 68 5d 3a 3a 46 6c 6f 6f  e] ([math]::Floo
0590: 72 28 24 62 79 74 65 56 61 6c 75 65 20 2f 20 32  r($byteValue / 2
05a0: 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  4));..          
05b0: 20 20 24 64 69 67 69 74 4d 61 70 49 6e 64 65 78    $digitMapIndex
05c0: 20 3d 20 24 62 79 74 65 56 61 6c 75 65 20 25 20   = $byteValue % 
05d0: 32 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  24;..           
05e0: 20 24 64 65 63 6f 64 65 64 43 68 61 72 73 5b 24   $decodedChars[$
05f0: 69 5d 20 3d 20 24 6c 6f 6f 6b 75 70 5b 24 64 69  i] = $lookup[$di
0600: 67 69 74 4d 61 70 49 6e 64 65 78 5d 3b 0d 0a 20  gitMapIndex];.. 
0610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
0620: 20 20 20 7d 0d 0a 20 20 20 20 20 7d 0d 0a 24 53     }..     }..$S
0630: 54 52 20 3d 20 27 27 20 20 20 20 20 0d 0a 24 64  TR = ''     ..$d
0640: 65 63 6f 64 65 64 43 68 61 72 73 20 7c 20 25 20  ecodedChars | % 
0650: 7b 20 24 73 74 72 2b 3d 24 5f 7d 0d 0a 24 53 54  { $str+=$_}..$ST
0660: 52 0d 0a 7d 0d 0a 67 65 74 2d 77 69 6e 64 6f 77  R..}..get-window
0670: 73 70 72 6f 64 75 63 74 6b 65 79 20 2e 0d 0a     sproductkey ...