title: How to find Windows product Key if your sticker is damaged
body: <p>I found a possible solution to the question here: <a href="http://youtu.be/71Vc9QiraQE" rel="nofollow noreferrer">http://youtu.be/71Vc9QiraQE</a></p>
  
  <p>I am not a power shell user myself and cannot quite follow the code in the script. </p>
  
  <p>It would be a useful script to help with reinstalls when operating systems have been upgraded. My problem is I would like to understand it more before using it or at least be told it looks harmless.</p>
  
  <p>Here is the Script:</p>
  
  <pre><code>function Get-WindowsKey {
      ## function to retrieve the Windows Product Key from any PC
      param ($targets = ".")
      $hklm = 2147483650
      $regPath = "Software\Microsoft\Windows NT\CurrentVersion"
      $regValue = "DigitalProductId"
      Foreach ($target in $targets) {
          $productKey = $null
          $win32os = $null
          $wmi = [WMIClass]"\\$target\root\default:stdRegProv"
          $data = $wmi.GetBinaryValue($hklm,$regPath,$regValue)
          $binArray = ($data.uValue)[52..66]
          $charsArray = "B","C","D","E","F","G","H","J","K","M","P","Q","­R","T","V","W","X","Y","2","3","4","5","6","7","8","9"
          ## decrypt base24 encoded binary data
          For ($i = 24; $i -ge 0; $i--) {
              $k = 0
              For ($j = 14; $j -ge 0; $j--) {
                  $k = $k * 256 -bxor $binArray[$j]
                  $binArray[$j] = [math]::truncate($k / 24)
                  $k = $k % 24
              }
              $productKey = $charsArray[$k] + $productKey
              If (($i % 5 -eq 0) -and ($i -ne 0)) {
                  $productKey = "-" + $productKey
              }
          }
          $win32os = Get-WmiObject Win32_OperatingSystem -computer $target
          $obj = New-Object Object
          $obj | Add-Member Noteproperty Computer -value $target
          $obj | Add-Member Noteproperty Caption -value $win32os.Caption
          $obj | Add-Member Noteproperty CSDVersion -value $win32os.CSDVersion
          $obj | Add-Member Noteproperty OSArch -value $win32os.OSArchitecture
          $obj | Add-Member Noteproperty BuildNumber -value $win32os.BuildNumber
          $obj | Add-Member Noteproperty RegisteredTo -value $win32os.RegisteredUser
          $obj | Add-Member Noteproperty ProductID -value $win32os.SerialNumber
          $obj | Add-Member Noteproperty ProductKey -value $productkey
          $obj
      }
  }
  Get-WindowsKey
  </code></pre>
  
  <p>The first command used in Windows PowerShell:</p>
  
  <pre><code>Set-ExecutionPolicy RemoteSigned
  </code></pre>
  
  <p><em>If the first script doesn't work, try this:</em>
  I was able to get my key using this, but I had to fix the script, changing the last line to:</p>
  
  <pre><code>function Get-WindowsKey {
  # ...
  }
  Get-WindowsKey localhost
  </code></pre>