PoshCode Archive  Hex Artifact Content

Artifact 4db937d0c95d3df940cff542b4a020abd241d31ff7aee8c56456212429338394:

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

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