PoshCode Archive  Hex Artifact Content

Artifact 42ad97a5acdf155b2735f19b78f1a0df7e1caec07416ac94609bbca03db9402c:

  • File get-windows-product-key.ps1 — part of check-in [d977d38fd2] at 2018-06-10 13:46:03 on branch trunk — hey guys. why you duplicate ugly code for retrieving product key? everything can be done much easier. (user: greg zakharov size: 1084)

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 68 65 79 20 67 75 79 73 2e  ption: hey guys.
0060: 20 77 68 79 20 79 6f 75 20 64 75 70 6c 69 63 61   why you duplica
0070: 74 65 20 75 67 6c 79 20 63 6f 64 65 20 66 6f 72  te ugly code for
0080: 20 72 65 74 72 69 65 76 69 6e 67 20 70 72 6f 64   retrieving prod
0090: 75 63 74 20 6b 65 79 3f 20 65 76 65 72 79 74 68  uct key? everyth
00a0: 69 6e 67 20 63 61 6e 20 62 65 20 64 6f 6e 65 20  ing can be done 
00b0: 6d 75 63 68 20 65 61 73 69 65 72 2e 0d 0a 23 20  much easier...# 
00c0: 76 65 72 73 69 6f 6e 3a 20 30 2e 31 0d 0a 23 20  version: 0.1..# 
00d0: 74 79 70 65 3a 20 66 75 6e 63 74 69 6f 6e 0d 0a  type: function..
00e0: 23 20 61 75 74 68 6f 72 3a 20 67 72 65 67 20 7a  # author: greg z
00f0: 61 6b 68 61 72 6f 76 0d 0a 23 20 6c 69 63 65 6e  akharov..# licen
0100: 73 65 3a 20 43 43 30 0d 0a 23 20 66 75 6e 63 74  se: CC0..# funct
0110: 69 6f 6e 3a 20 47 65 74 2d 50 72 6f 64 75 63 74  ion: Get-Product
0120: 4b 65 79 0d 0a 23 20 78 2d 70 6f 73 68 63 6f 64  Key..# x-poshcod
0130: 65 2d 69 64 3a 20 34 38 30 32 0d 0a 23 20 78 2d  e-id: 4802..# x-
0140: 61 72 63 68 69 76 65 64 3a 20 32 30 31 34 2d 30  archived: 2014-0
0150: 31 2d 32 31 54 30 32 3a 30 39 3a 34 30 0d 0a 23  1-21T02:09:40..#
0160: 20 78 2d 70 75 62 6c 69 73 68 65 64 3a 20 32 30   x-published: 20
0170: 31 34 2d 30 31 2d 31 36 54 31 36 3a 32 30 3a 30  14-01-16T16:20:0
0180: 30 0d 0a 23 0d 0a 23 0d 0a 66 75 6e 63 74 69 6f  0..#..#..functio
0190: 6e 20 47 65 74 2d 50 72 6f 64 75 63 74 4b 65 79  n Get-ProductKey
01a0: 28 5b 53 74 72 69 6e 67 5d 24 43 6f 6d 70 75 74  ([String]$Comput
01b0: 65 72 20 3d 20 27 2e 27 29 20 7b 0d 0a 20 20 62  er = '.') {..  b
01c0: 65 67 69 6e 20 7b 0d 0a 20 20 20 20 24 76 61 6c  egin {..    $val
01d0: 20 3d 20 5b 42 79 74 65 5b 5d 5d 28 5b 77 6d 69   = [Byte[]]([wmi
01e0: 63 6c 61 73 73 5d 28 27 5c 5c 27 20 2b 20 24 43  class]('\\' + $C
01f0: 6f 6d 70 75 74 65 72 20 2b 20 27 5c 72 6f 6f 74  omputer + '\root
0200: 5c 64 65 66 61 75 6c 74 3a 53 74 64 52 65 67 50  \default:StdRegP
0210: 72 6f 76 27 29 29 2e 47 65 74 42 69 6e 61 72 79  rov')).GetBinary
0220: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 32 31  Value(..      21
0230: 34 37 34 38 33 36 35 30 2c 20 27 53 4f 46 54 57  47483650, 'SOFTW
0240: 41 52 45 5c 4d 69 63 72 6f 73 6f 66 74 5c 57 69  ARE\Microsoft\Wi
0250: 6e 64 6f 77 73 20 4e 54 5c 43 75 72 72 65 6e 74  ndows NT\Current
0260: 56 65 72 73 69 6f 6e 27 2c 20 27 44 69 67 69 74  Version', 'Digit
0270: 61 6c 50 72 6f 64 75 63 74 49 64 27 0d 0a 20 20  alProductId'..  
0280: 20 20 29 2e 75 56 61 6c 75 65 5b 35 32 2e 2e 36    ).uValue[52..6
0290: 36 5d 0d 0a 20 20 20 20 24 6d 61 70 20 3d 20 22  6]..    $map = "
02a0: 42 43 44 46 47 48 4a 4b 4d 50 51 52 54 56 57 58  BCDFGHJKMPQRTVWX
02b0: 59 32 33 34 36 37 38 39 22 0d 0a 20 20 20 20 24  Y2346789"..    $
02c0: 6b 65 79 20 3d 20 22 22 0d 0a 20 20 7d 0d 0a 20  key = ""..  }.. 
02d0: 20 70 72 6f 63 65 73 73 20 7b 0d 0a 20 20 20 20   process {..    
02e0: 66 6f 72 20 28 24 69 20 3d 20 32 34 3b 20 24 69  for ($i = 24; $i
02f0: 20 2d 67 65 20 30 3b 20 24 69 2d 2d 29 20 7b 0d   -ge 0; $i--) {.
0300: 0a 20 20 20 20 20 20 24 6b 20 3d 20 30 0d 0a 20  .      $k = 0.. 
0310: 20 20 20 20 20 66 6f 72 20 28 24 6a 20 3d 20 31       for ($j = 1
0320: 34 3b 20 24 6a 20 2d 67 65 20 30 3b 20 24 6a 2d  4; $j -ge 0; $j-
0330: 2d 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 6b  -) {..        $k
0340: 20 3d 20 28 24 6b 20 2a 20 32 35 36 29 20 2d 62   = ($k * 256) -b
0350: 78 6f 72 20 24 76 61 6c 5b 24 6a 5d 0d 0a 20 20  xor $val[$j]..  
0360: 20 20 20 20 20 20 24 76 61 6c 5b 24 6a 5d 20 3d        $val[$j] =
0370: 20 5b 4d 61 74 68 5d 3a 3a 46 6c 6f 6f 72 28 5b   [Math]::Floor([
0380: 44 6f 75 62 6c 65 5d 28 24 6b 20 2f 20 32 34 29  Double]($k / 24)
0390: 29 0d 0a 20 20 20 20 20 20 20 20 24 6b 20 3d 20  )..        $k = 
03a0: 24 6b 20 25 20 32 34 0d 0a 20 20 20 20 20 20 7d  $k % 24..      }
03b0: 0d 0a 20 20 20 20 20 20 24 6b 65 79 20 3d 20 24  ..      $key = $
03c0: 6d 61 70 5b 24 6b 5d 20 2b 20 24 6b 65 79 0d 0a  map[$k] + $key..
03d0: 20 20 20 20 20 20 69 66 20 28 28 24 69 20 25 20        if (($i % 
03e0: 35 29 20 2d 65 71 20 30 20 2d 61 6e 64 20 24 69  5) -eq 0 -and $i
03f0: 20 2d 6e 65 20 30 29 20 7b 24 6b 65 79 20 3d 20   -ne 0) {$key = 
0400: 22 2d 22 20 2b 20 24 6b 65 79 7d 0d 0a 20 20 20  "-" + $key}..   
0410: 20 7d 0d 0a 20 20 7d 0d 0a 20 20 65 6e 64 20 7b   }..  }..  end {
0420: 24 6b 65 79 7d 0d 0a 7d 0d 0a 0d 0a 47 65 74 2d  $key}..}....Get-
0430: 50 72 6f 64 75 63 74 4b 65 79 0d 0a              ProductKey..