techthoughts2
11/12/2017 - 4:50 AM

Set Registry Key

Will create a string value in registry key specified

<#
.Synopsis
   Will create a string value in registry key specified
.DESCRIPTION
   Evaluates provided registry path and determines if key is present. Key will be created if not found. Once verified the string value specified will be created in the registry location.
.PARAMETER RegKeyPath
   Registry key path - must be in PS shorthand. Ex: HKLM:\SECURITY
.PARAMETER Name
   The value name to be created.  Equivalent to REG_SZ
.PARAMETER Value
   The string value that will be loaded into the item
.EXAMPLE
    Set-Registrykey -RegKeyPath HKLM:\SOFTWARE\HyperV\Viridian -Name Viridian -Value History

    Verifies if the specified registry key exists. It will be created if not found. Once verified the Viridian String will be created and the value History will be loaded into it. Only a true/false value will be returned based on success.
.EXAMPLE
   Set-Registrykey -RegKeyPath HKLM:\SOFTWARE\HyperV\Viridian -Name Viridian -Value History -Verbose

   Verifies if the specified registry key exists. It will be created if not found. Once verified the Viridian String will be created and the value History will be loaded into it. Verbose output will be displayed.
.OUTPUTS
   Boolean value
.NOTES
   Author: Jake Morrison
   http://techthoughts.info
   
   PS Shorthand reg keys must be used
   ACCEPTABLE: HKLM:\SECURITY
   NOT ACCEPTABLE: HKEY_LOCAL_MACHINE\SECURITY
#>
function Set-Registrykey {
    [CmdletBinding(SupportsShouldProcess = $true)]
    Param
    (
        [Parameter(Mandatory = $true, 
            Position = 0,
            HelpMessage = 'Registry key path')]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [String]
        $RegKeyPath,
        [Parameter(Mandatory = $true, 
            Position = 1,
            HelpMessage = 'Value Name')]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [String]
        $Name,
        [Parameter(Mandatory = $true, 
            Position = 2,
            HelpMessage = 'Value data')]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [String]
        $Value
    )
    $successEval = $true #assume the best
    try {
        #if the path doesn't exist, we will create it.
        Write-Verbose -Message "Evaluating if $RegKeyPath is present."
        if (!(Test-Path -Path $RegKeyPath -ErrorAction Stop)) {
            Write-Verbose -Message "Reg Key not found. Creating Reg Key..."
            New-Item -Path $RegKeyPath –Force -ErrorAction Stop | Out-Null
            Write-Verbose -Message "Reg Key created successfully."
        }
        else {
            Write-Verbose -Message "Reg key verified present."
        }
        Write-Verbose -Message "Creating $Name with value: $value"
        New-ItemProperty -Path $RegKeyPath -Name $Name -Value $Value `
            -PropertyType String -Force -ErrorAction Stop | Out-Null
        Write-Verbose -Message "Success."
    }
    catch {
        Write-Verbose -Message "An error was ecountered:"
        Write-Error $_
        $successEval = $false
    }
    return $successEval
}