PoshCode Archive  Hex Artifact Content

Artifact 8cacc58729e4c7f36a8978c8d349110f7dedd168d6d5f04ba34ebea1091e8bb8:

  • File get-windows-product-key.ps1 — part of check-in [885bb79ad8] at 2018-06-10 13:55:13 on branch trunk — retrieve the windows product key of a specified machine using WMI (user: greg zakharov size: 1112)

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 67 72 65 67 20 7a 61 6b 68 61  thor: greg zakha
00d0: 72 6f 76 0d 0a 23 20 6c 69 63 65 6e 73 65 3a 20  rov..# license: 
00e0: 43 43 30 0d 0a 23 20 66 75 6e 63 74 69 6f 6e 3a  CC0..# function:
00f0: 20 47 65 74 2d 50 72 6f 64 75 63 74 4b 65 79 0d   Get-ProductKey.
0100: 0a 23 20 78 2d 70 6f 73 68 63 6f 64 65 2d 69 64  .# x-poshcode-id
0110: 3a 20 35 34 32 37 0d 0a 23 20 78 2d 64 65 72 69  : 5427..# x-deri
0120: 76 65 64 2d 66 72 6f 6d 2d 69 64 3a 20 35 34 37  ved-from-id: 547
0130: 37 0d 0a 23 20 78 2d 61 72 63 68 69 76 65 64 3a  7..# x-archived:
0140: 20 32 30 31 34 2d 31 30 2d 30 38 54 31 35 3a 34   2014-10-08T15:4
0150: 35 3a 32 39 0d 0a 23 20 78 2d 70 75 62 6c 69 73  5:29..# x-publis
0160: 68 65 64 3a 20 32 30 31 34 2d 30 39 2d 31 34 54  hed: 2014-09-14T
0170: 31 31 3a 31 34 3a 30 30 0d 0a 23 0d 0a 23 0d 0a  11:14:00..#..#..
0180: 66 75 6e 63 74 69 6f 6e 20 47 65 74 2d 50 72 6f  function Get-Pro
0190: 64 75 63 74 4b 65 79 28 5b 53 74 72 69 6e 67 5d  ductKey([String]
01a0: 24 43 6f 6d 70 75 74 65 72 20 3d 20 27 2e 27 29  $Computer = '.')
01b0: 20 7b 0d 0a 20 20 3c 23 0d 0a 20 20 20 20 2e 4e   {..  <#..    .N
01c0: 4f 54 45 53 0d 0a 20 20 20 20 20 20 20 20 41 75  OTES..        Au
01d0: 74 68 6f 72 3a 20 67 72 65 67 20 7a 61 6b 68 61  thor: greg zakha
01e0: 72 6f 76 0d 0a 20 20 23 3e 0d 0a 20 20 62 65 67  rov..  #>..  beg
01f0: 69 6e 20 7b 0d 0a 20 20 20 20 24 76 61 6c 20 3d  in {..    $val =
0200: 20 5b 42 79 74 65 5b 5d 5d 28 5b 77 6d 69 63 6c   [Byte[]]([wmicl
0210: 61 73 73 5d 28 27 5c 5c 27 20 2b 20 24 43 6f 6d  ass]('\\' + $Com
0220: 70 75 74 65 72 20 2b 20 27 5c 72 6f 6f 74 5c 64  puter + '\root\d
0230: 65 66 61 75 6c 74 3a 53 74 64 52 65 67 50 72 6f  efault:StdRegPro
0240: 76 27 29 29 2e 47 65 74 42 69 6e 61 72 79 56 61  v')).GetBinaryVa
0250: 6c 75 65 28 0d 0a 20 20 20 20 20 20 32 31 34 37  lue(..      2147
0260: 34 38 33 36 35 30 2c 20 27 53 4f 46 54 57 41 52  483650, 'SOFTWAR
0270: 45 5c 4d 69 63 72 6f 73 6f 66 74 5c 57 69 6e 64  E\Microsoft\Wind
0280: 6f 77 73 20 4e 54 5c 43 75 72 72 65 6e 74 56 65  ows NT\CurrentVe
0290: 72 73 69 6f 6e 27 2c 20 27 44 69 67 69 74 61 6c  rsion', 'Digital
02a0: 50 72 6f 64 75 63 74 49 64 27 0d 0a 20 20 20 20  ProductId'..    
02b0: 29 2e 75 56 61 6c 75 65 5b 35 32 2e 2e 36 36 5d  ).uValue[52..66]
02c0: 0d 0a 20 20 20 20 24 6d 61 70 20 3d 20 22 42 43  ..    $map = "BC
02d0: 44 46 47 48 4a 4b 4d 50 51 52 54 56 57 58 59 32  DFGHJKMPQRTVWXY2
02e0: 33 34 36 37 38 39 22 0d 0a 20 20 20 20 24 6b 65  346789"..    $ke
02f0: 79 20 3d 20 22 22 0d 0a 20 20 7d 0d 0a 20 20 70  y = ""..  }..  p
0300: 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 20 66 6f  rocess {..    fo
0310: 72 20 28 24 69 20 3d 20 32 34 3b 20 24 69 20 2d  r ($i = 24; $i -
0320: 67 65 20 30 3b 20 24 69 2d 2d 29 20 7b 0d 0a 20  ge 0; $i--) {.. 
0330: 20 20 20 20 20 24 6b 20 3d 20 30 0d 0a 20 20 20       $k = 0..   
0340: 20 20 20 66 6f 72 20 28 24 6a 20 3d 20 31 34 3b     for ($j = 14;
0350: 20 24 6a 20 2d 67 65 20 30 3b 20 24 6a 2d 2d 29   $j -ge 0; $j--)
0360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 6b 20 3d   {..        $k =
0370: 20 28 24 6b 20 2a 20 32 35 36 29 20 2d 62 78 6f   ($k * 256) -bxo
0380: 72 20 24 76 61 6c 5b 24 6a 5d 0d 0a 20 20 20 20  r $val[$j]..    
0390: 20 20 20 20 24 76 61 6c 5b 24 6a 5d 20 3d 20 5b      $val[$j] = [
03a0: 4d 61 74 68 5d 3a 3a 46 6c 6f 6f 72 28 5b 44 6f  Math]::Floor([Do
03b0: 75 62 6c 65 5d 28 24 6b 20 2f 20 32 34 29 29 0d  uble]($k / 24)).
03c0: 0a 20 20 20 20 20 20 20 20 24 6b 20 3d 20 24 6b  .        $k = $k
03d0: 20 25 20 32 34 0d 0a 20 20 20 20 20 20 7d 0d 0a   % 24..      }..
03e0: 20 20 20 20 20 20 24 6b 65 79 20 3d 20 24 6d 61        $key = $ma
03f0: 70 5b 24 6b 5d 20 2b 20 24 6b 65 79 0d 0a 20 20  p[$k] + $key..  
0400: 20 20 20 20 69 66 20 28 28 24 69 20 25 20 35 29      if (($i % 5)
0410: 20 2d 65 71 20 30 20 2d 61 6e 64 20 24 69 20 2d   -eq 0 -and $i -
0420: 6e 65 20 30 29 20 7b 24 6b 65 79 20 3d 20 22 2d  ne 0) {$key = "-
0430: 22 20 2b 20 24 6b 65 79 7d 0d 0a 20 20 20 20 7d  " + $key}..    }
0440: 0d 0a 20 20 7d 0d 0a 20 20 65 6e 64 20 7b 24 6b  ..  }..  end {$k
0450: 65 79 7d 0d 0a 7d 0d 0a                          ey}..}..