Asked by:
New to Powershell. Have a script I would like to use on multiple computers. (supported) Please help.

Question
-
Dear PowerShell Experts,
I found this script in the PS gallery Script for Product Keys and it says it supports being run against multiple remote machines. I would like to input a text file of several machine names or .csv file, but I'm unsure of how to use it. Essentially, its primary function is to obtain the product key from all machines in your environment. Can someone please show me how to use the script below? Or potentially point me to another way to pull keys from a list of remote machines? (Windows 7 32/64 bit) Thanks in advance!
function Get-ProductKey { <# .SYNOPSIS Retrieves the product key and OS information from a local or remote system/s. .DESCRIPTION Retrieves the product key and OS information from a local or remote system/s. Queries of 64bit OS from a 32bit OS will result in inaccurate data being returned for the Product Key. You must query a 64bit OS from a system running a 64bit OS. .PARAMETER Computername Name of the local or remote system/s. .NOTES Author: Boe Prox Version: 1.1 -Update of function from http://powershell.com/cs/blogs/tips/archive/2012/04/30/getting-windows-product-key.aspx -Added capability to query more than one system -Supports remote system query -Supports querying 64bit OSes -Shows OS description and Version in output object -Error Handling .EXAMPLE Get-ProductKey -Computername Server1 OSDescription Computername OSVersion ProductKey ------------- ------------ --------- ---------- Microsoft(R) Windows(R) Server 2003, Enterprise Edition Server1 5.2.3790 bcdfg-hjklm-pqrtt-vwxyy-12345 Description ----------- Retrieves the product key information from 'Server1' #> [cmdletbinding()] Param ( [parameter(ValueFromPipeLine=$True,ValueFromPipeLineByPropertyName=$True)] [Alias("CN","__Server","IPAddress","Server")] [string[]]$Computername = $Env:Computername ) Begin { $map="BCDFGHJKMPQRTVWXY2346789" } Process { ForEach ($Computer in $Computername) { Write-Verbose ("{0}: Checking network availability" -f $Computer) If (Test-Connection -ComputerName $Computer -Count 1 -Quiet) { Try { Write-Verbose ("{0}: Retrieving WMI OS information" -f $Computer) $OS = Get-WmiObject -ComputerName $Computer Win32_OperatingSystem -ErrorAction Stop } Catch { $OS = New-Object PSObject -Property @{ Caption = $_.Exception.Message Version = $_.Exception.Message } } Try { Write-Verbose ("{0}: Attempting remote registry access" -f $Computer) $remoteReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$Computer) If ($OS.OSArchitecture -eq '64-bit') { $value = $remoteReg.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue('DigitalProductId4')[0x34..0x42] } Else { $value = $remoteReg.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion").GetValue('DigitalProductId')[0x34..0x42] } $ProductKey = "" Write-Verbose ("{0}: Translating data into product key" -f $Computer) for ($i = 24; $i -ge 0; $i--) { $r = 0 for ($j = 14; $j -ge 0; $j--) { $r = ($r * 256) -bxor $value[$j] $value[$j] = [math]::Floor([double]($r/24)) $r = $r % 24 } $ProductKey = $map[$r] + $ProductKey if (($i % 5) -eq 0 -and $i -ne 0) { $ProductKey = "-" + $ProductKey } } } Catch { $ProductKey = $_.Exception.Message } $object = New-Object PSObject -Property @{ Computername = $Computer ProductKey = $ProductKey OSDescription = $os.Caption OSVersion = $os.Version } $object.pstypenames.insert(0,'ProductKey.Info') $object } Else { $object = New-Object PSObject -Property @{ Computername = $Computer ProductKey = 'Unreachable' OSDescription = 'Unreachable' OSVersion = 'Unreachable' } $object.pstypenames.insert(0,'ProductKey.Info') $object } } }}
Thank you
- Moved by Bill_Stewart Wednesday, November 29, 2017 6:36 PM This is not support forum for gallery scripts
Friday, October 13, 2017 3:16 PM
All replies
-
I would go back to the creator of the script and ask for help.
Also I would suggesting learning the basics of PowerShell as this is easy to do when you know the basics.
I would get the content from the text file, run a foreach loop and run an invoke-command to get the information you want.
Please don't just get full scripts off the internet (doesn't matter from which site) and run them without knowing what they do. This is quite a good way to break something and also makes it more difficult for you to learn what each part of the script does.- Edited by I.T Delinquent Friday, October 13, 2017 3:27 PM
Friday, October 13, 2017 3:25 PM -
Post Gallery questions to authors Q&A page here: https://gallery.technet.microsoft.com/scriptcenter/Get-product-keys-of-local-83b4ce97/view/Discussions#content
First you must learn PowerShell before trying to use complex and advanced code. Without basic knowledge you will just be lost:
Learn PowerShell: https://mva.microsoft.com/en-us/training-courses/getting-started-with-microsoft-powershell-8276
\_(ツ)_/
Friday, October 13, 2017 8:19 PM