none
New to Powershell. Have a script I would like to use on multiple computers. (supported) Please help. RRS feed

  • 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