Script for new registry in remote computers

Hi all,
I am trying to create a script with a function where I need to create new registry on multiple remote computers. I am getting below error on passing parameters to the script:
Invoke-Command : Parameter set cannot be resolved using the specified named parameters.
At D:\6420x64\New-SupportLevel4.ps1:44 char:13

  •         Invoke-Command -ComputerName $HostName
    
  •         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo : InvalidArgument: (:slight_smile: [Invoke-Command], ParameterBindingException
    • FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

Attached is my ps1 file.

M request to upload ps1 was denied:) . Pasting contents of my ps1 file:

function Set-RegEntry
{
[CmdletBinding()]
#[OutputType([int])]
Param
(

    #This is ComputerName Parameter for target Computer.
    [Parameter(Mandatory=$true,
               ValueFromPipeline=$true,
               ValueFromPipelineByPropertyName=$true,
               Position=0)]
               [String[]]$HostName,

    # This is New Registry Parameter for target Computer.
    [Parameter(Mandatory=$true,
               ValueFromPipeline=$false,
               ValueFromPipelineByPropertyName=$false,
               Position=1)]
    [ValidateSet(1,2,3)] [int]$RegLevel
)

Begin
    {
    #Setting up registry path to check
            $RegistryKey = 'HKLM:\SOFTWARE\CMC'
            $PathTest = Test-Path $RegistryKey
    }
Process
    {

    Try{
    #Invoking command on list of remote computers stored in $HostName
        Invoke-Command -ComputerName $HostName
        {
          
        #Checking if registry path exists
            IF ($PathTest -eq $false)
                {
                #If not, creating new registry path and setting up the reistry value
                    NEW-ITEM -Path HKLM:\SOFTWARE -Name CMC
                    NEW-ITEM -Path HKLM:\SOFTWARE\CMC\ -Name "Support Level" -Value $RegLevel
                }
            ELSE
                {
                #If registry exists
                    WRITE-HOST "Registry Key Exists on $HostName"
                }
        }
Catch [PSRemotingTransportException]
{
#Catching exception if there is an issue on powershell on remote computer.
    Write-Output "Issue with Powershell on $HostName" 
}
    }
Finally{}
}
End
    {
    }

}

Try this:

function Set-Reg {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Position=0,HelpMessage='Target host name or IP address')][String[]]$HostName,
        [Parameter(Mandatory=$true,Position=1,HelpMessage='Registry container/folder')][String]$RegKey,
        [Parameter(Mandatory=$true,Position=2,HelpMessage='Registry leaf')]$RegValue,
        [Parameter(Mandatory=$true,Position=3,HelpMessage='Data to be saved/updated')]$RegData
    )
    $RemoteCommand = Invoke-Command -ComputerName $HostName { param($RegKey,$RegValue,$RegData)
        if (-not (Test-Path -Path $RegKey)) { New-Item -Path $RegKey }
        Set-ItemProperty -Path $RegKey -Name $RegValue -Value $RegData
        Get-ItemProperty -Path $RegKey -Name $RegValue
        } -ArgumentList $RegKey,$RegValue,$RegData
    if ($RemoteCommand.$RegValue -eq $RegData) { Write-Output "Registry key $Regkey\$RegValue set to $RegData" 
        } else { Write-Output "Failed to set registry key $Regkey\$RegValue" }
}

Example usage:

Set-Reg localhost 'HKLM:\SOFTWARE\CMC' 'Support Level' 2

when using this on remote computers, you must be running the script in a security context that has administrative permissions on the remote machines, otherwise the function can be modified to use -credential parameter…

Note that PS will automatically pick the RegValue data type that matches the RegData,
for example this command

 Set-Reg localhost 'HKLM:\SOFTWARE\CMC' 'Support Level' 2 

creates a DWORD (32-bit) RegValue (leaf object) called ‘Support Level’ and stores RegData (2) in it.
if followed by this command:

 Set-Reg localhost 'HKLM:\SOFTWARE\CMC' 'Support Level' 'cheese' 

PS deletes the DWORD (32-bit) RegValue ‘Support Level’ and creates a new String RegValue ‘Support Level’ and stores RegData (‘cheese’) in it.