PoshCode Archive  Hex Artifact Content

Artifact 374d8547540ff71ef8d7db773b166efbcfb3b8bac0954efea3979dccede5d700:

  • File get-windows-product-key.ps1 — part of check-in [f5a4f2e000] at 2018-06-10 14:02:05 on branch trunk — retrieve the windows product key of a specified machine using WMI (user: Veronika size: 1659)

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 56 65 72 6f 6e 69 6b 61 0d 0a  thor: Veronika..
00d0: 23 20 6c 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a  # license: CC0..
00e0: 23 20 66 75 6e 63 74 69 6f 6e 3a 20 67 65 74 2d  # function: get-
00f0: 77 69 6e 64 6f 77 73 70 72 6f 64 75 63 74 6b 65  windowsproductke
0100: 79 0d 0a 23 20 78 2d 70 6f 73 68 63 6f 64 65 2d  y..# x-poshcode-
0110: 69 64 3a 20 35 38 32 30 0d 0a 23 20 78 2d 61 72  id: 5820..# x-ar
0120: 63 68 69 76 65 64 3a 20 32 30 31 35 2d 30 34 2d  chived: 2015-04-
0130: 31 39 54 30 35 3a 33 38 3a 35 32 0d 0a 23 20 78  19T05:38:52..# x
0140: 2d 70 75 62 6c 69 73 68 65 64 3a 20 32 30 31 35  -published: 2015
0150: 2d 30 34 2d 30 39 54 31 31 3a 30 35 3a 30 30 0d  -04-09T11:05:00.
0160: 0a 23 0d 0a 23 0d 0a 66 75 6e 63 74 69 6f 6e 20  .#..#..function 
0170: 67 65 74 2d 77 69 6e 64 6f 77 73 70 72 6f 64 75  get-windowsprodu
0180: 63 74 6b 65 79 28 5b 73 74 72 69 6e 67 5d 24 63  ctkey([string]$c
0190: 6f 6d 70 75 74 65 72 29 0d 0a 7b 0d 0a 24 52 65  omputer)..{..$Re
01a0: 67 20 3d 20 5b 57 4d 49 43 6c 61 73 73 5d 20 28  g = [WMIClass] (
01b0: 22 5c 5c 22 20 2b 20 24 63 6f 6d 70 75 74 65 72  "\\" + $computer
01c0: 20 2b 20 22 5c 72 6f 6f 74 5c 64 65 66 61 75 6c   + "\root\defaul
01d0: 74 3a 53 74 64 52 65 67 50 72 6f 76 22 29 0d 0a  t:StdRegProv")..
01e0: 24 76 61 6c 75 65 73 20 3d 20 5b 62 79 74 65 5b  $values = [byte[
01f0: 5d 5d 28 24 72 65 67 2e 67 65 74 62 69 6e 61 72  ]]($reg.getbinar
0200: 79 76 61 6c 75 65 28 32 31 34 37 34 38 33 36 35  yvalue(214748365
0210: 30 2c 22 53 4f 46 54 57 41 52 45 5c 4d 69 63 72  0,"SOFTWARE\Micr
0220: 6f 73 6f 66 74 5c 57 69 6e 64 6f 77 73 20 4e 54  osoft\Windows NT
0230: 5c 43 75 72 72 65 6e 74 56 65 72 73 69 6f 6e 22  \CurrentVersion"
0240: 2c 22 44 69 67 69 74 61 6c 50 72 6f 64 75 63 74  ,"DigitalProduct
0250: 49 64 22 29 2e 75 76 61 6c 75 65 29 0d 0a 24 6c  Id").uvalue)..$l
0260: 6f 6f 6b 75 70 20 3d 20 5b 63 68 61 72 5b 5d 5d  ookup = [char[]]
0270: 28 22 42 22 2c 22 43 22 2c 22 44 22 2c 22 46 22  ("B","C","D","F"
0280: 2c 22 47 22 2c 22 48 22 2c 22 4a 22 2c 22 4b 22  ,"G","H","J","K"
0290: 2c 22 4d 22 2c 22 50 22 2c 22 51 22 2c 22 52 22  ,"M","P","Q","R"
02a0: 2c 22 54 22 2c 22 56 22 2c 22 57 22 2c 22 58 22  ,"T","V","W","X"
02b0: 2c 22 59 22 2c 22 32 22 2c 22 33 22 2c 22 34 22  ,"Y","2","3","4"
02c0: 2c 22 36 22 2c 22 37 22 2c 22 38 22 2c 22 39 22  ,"6","7","8","9"
02d0: 29 0d 0a 24 6b 65 79 53 74 61 72 74 49 6e 64 65  )..$keyStartInde
02e0: 78 20 3d 20 5b 69 6e 74 5d 35 32 3b 0d 0a 24 6b  x = [int]52;..$k
02f0: 65 79 45 6e 64 49 6e 64 65 78 20 3d 20 5b 69 6e  eyEndIndex = [in
0300: 74 5d 28 24 6b 65 79 53 74 61 72 74 49 6e 64 65  t]($keyStartInde
0310: 78 20 2b 20 31 35 29 3b 0d 0a 24 64 65 63 6f 64  x + 15);..$decod
0320: 65 4c 65 6e 67 74 68 20 3d 20 5b 69 6e 74 5d 32  eLength = [int]2
0330: 39 0d 0a 24 64 65 63 6f 64 65 53 74 72 69 6e 67  9..$decodeString
0340: 4c 65 6e 67 74 68 20 3d 20 5b 69 6e 74 5d 31 35  Length = [int]15
0350: 0d 0a 24 64 65 63 6f 64 65 64 43 68 61 72 73 20  ..$decodedChars 
0360: 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20 63 68 61  = new-object cha
0370: 72 5b 5d 20 24 64 65 63 6f 64 65 4c 65 6e 67 74  r[] $decodeLengt
0380: 68 20 0d 0a 24 68 65 78 50 69 64 20 3d 20 6e 65  h ..$hexPid = ne
0390: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-object System.
03a0: 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 41 72 72 61  Collections.Arra
03b0: 79 4c 69 73 74 0d 0a 66 6f 72 20 28 24 69 20 3d  yList..for ($i =
03c0: 20 24 6b 65 79 53 74 61 72 74 49 6e 64 65 78 3b   $keyStartIndex;
03d0: 20 24 69 20 2d 6c 65 20 24 6b 65 79 45 6e 64 49   $i -le $keyEndI
03e0: 6e 64 65 78 3b 20 24 69 2b 2b 29 7b 20 5b 76 6f  ndex; $i++){ [vo
03f0: 69 64 5d 24 68 65 78 50 69 64 2e 41 64 64 28 24  id]$hexPid.Add($
0400: 76 61 6c 75 65 73 5b 24 69 5d 29 20 7d 0d 0a 66  values[$i]) }..f
0410: 6f 72 20 28 20 24 69 20 3d 20 24 64 65 63 6f 64  or ( $i = $decod
0420: 65 4c 65 6e 67 74 68 20 2d 20 31 3b 20 24 69 20  eLength - 1; $i 
0430: 2d 67 65 20 30 3b 20 24 69 2d 2d 29 0d 0a 20 20  -ge 0; $i--)..  
0440: 20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20    {             
0450: 20 20 20 0d 0a 20 20 20 20 20 69 66 20 28 28 24     ..     if (($
0460: 69 20 2b 20 31 29 20 25 20 36 20 2d 65 71 20 30  i + 1) % 6 -eq 0
0470: 29 7b 24 64 65 63 6f 64 65 64 43 68 61 72 73 5b  ){$decodedChars[
0480: 24 69 5d 20 3d 20 27 2d 27 7d 0d 0a 20 20 20 20  $i] = '-'}..    
0490: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 7b 0d   else..       {.
04a0: 0a 20 20 20 20 20 20 20 20 24 64 69 67 69 74 4d  .        $digitM
04b0: 61 70 49 6e 64 65 78 20 3d 20 5b 69 6e 74 5d 30  apIndex = [int]0
04c0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 24  ..        for ($
04d0: 6a 20 3d 20 24 64 65 63 6f 64 65 53 74 72 69 6e  j = $decodeStrin
04e0: 67 4c 65 6e 67 74 68 20 2d 20 31 3b 20 24 6a 20  gLength - 1; $j 
04f0: 2d 67 65 20 30 3b 20 24 6a 2d 2d 29 0d 0a 20 20  -ge 0; $j--)..  
0500: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0510: 20 20 20 20 20 24 62 79 74 65 56 61 6c 75 65 20       $byteValue 
0520: 3d 20 5b 69 6e 74 5d 28 28 24 64 69 67 69 74 4d  = [int](($digitM
0530: 61 70 49 6e 64 65 78 20 2a 20 5b 69 6e 74 5d 32  apIndex * [int]2
0540: 35 36 29 20 2d 62 6f 72 20 5b 62 79 74 65 5d 24  56) -bor [byte]$
0550: 68 65 78 50 69 64 5b 24 6a 5d 29 3b 0d 0a 20 20  hexPid[$j]);..  
0560: 20 20 20 20 20 20 20 20 20 20 24 68 65 78 50 69            $hexPi
0570: 64 5b 24 6a 5d 20 3d 20 5b 62 79 74 65 5d 20 28  d[$j] = [byte] (
0580: 5b 6d 61 74 68 5d 3a 3a 46 6c 6f 6f 72 28 24 62  [math]::Floor($b
0590: 79 74 65 56 61 6c 75 65 20 2f 20 32 34 29 29 3b  yteValue / 24));
05a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64  ..            $d
05b0: 69 67 69 74 4d 61 70 49 6e 64 65 78 20 3d 20 24  igitMapIndex = $
05c0: 62 79 74 65 56 61 6c 75 65 20 25 20 32 34 3b 0d  byteValue % 24;.
05d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65  .            $de
05e0: 63 6f 64 65 64 43 68 61 72 73 5b 24 69 5d 20 3d  codedChars[$i] =
05f0: 20 24 6c 6f 6f 6b 75 70 5b 24 64 69 67 69 74 4d   $lookup[$digitM
0600: 61 70 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  apIndex];..     
0610: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
0620: 0d 0a 20 20 20 20 20 7d 0d 0a 24 53 54 52 20 3d  ..     }..$STR =
0630: 20 27 27 20 20 20 20 20 0d 0a 24 64 65 63 6f 64   ''     ..$decod
0640: 65 64 43 68 61 72 73 20 7c 20 25 20 7b 20 24 73  edChars | % { $s
0650: 74 72 2b 3d 24 5f 7d 0d 0a 24 53 54 52 0d 0a 7d  tr+=$_}..$STR..}
0660: 0d 0a 67 65 74 2d 77 69 6e 64 6f 77 73 70 72 6f  ..get-windowspro
0670: 64 75 63 74 6b 65 79 20 2e 0d 0a                 ductkey ...