Functions/Set-ARMparameter.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
#Requires -Version 5.0 function Set-ARMparameter { <# .SYNOPSIS Update an existing parameter in the ARM template .DESCRIPTION Update an existing parameter in the ARM template .PARAMETER Name The variable Name. This is a Mandatory parameter and is an dynamic parameter .PARAMETER Value The new value for the variable. This is a Mandatory parameter .EXAMPLE Set-ARMparameter -Name adminUsername -Value [PSCustomObject]@{type="string"} This will update the parameter adminUsername with a type of string .EXAMPLE $newParameter = New-ARMparameter -Name adminUsername -Type string -DefaultValue "foo" $newParameter | Add-ARMparameter $newParameter.adminUsername.defaultValue = "new foo" Set-ARMparameter -Name adminUsername -Value $newParameter This will create a new parameter adminUsername and add it to the ARM template. The defaultValue is updated to "new foo" and the value of the adminUsername parameter is updated. .INPUTS PSCustomObject .OUTPUTS .NOTES Author: Tore Groneng Website: www.firstpoint.no Twitter: @ToreGroneng #> [cmdletbinding()] Param( [Parameter(Mandatory)] [PSCustomObject] $Value ) DynamicParam { $Dictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary $NewDynParam = @{ Name = "Name" Mandatory = $true ValueFromPipelineByPropertyName = $true ValueFromPipeline = $false DPDictionary = $Dictionary } $allParameters = $script:Template.parameters.PSobject.Properties.Name if ($allParameters) { $null = $NewDynParam.Add("ValidateSet",$allParameters) } else { $null = $NewDynParam.Add("ValidateSet",@("-")) } New-DynamicParam @NewDynParam $Dictionary } # FIXME this cmdlet should reflect the parameters of New-ARMparameter Begin { $f = $MyInvocation.InvocationName Write-Verbose -Message "$f - START" } Process { $Name = $PSBoundParameters.Name $oldvalue = ((Get-ARMparameter -Name $Name | Select-Object -ExpandProperty $name | ConvertTo-Hash | Out-HashString) -replace [environment]::NewLine,"") -replace " ","" $newValue = (($value | ConvertTo-Hash | Out-HashString) -replace [environment]::NewLine,"") -replace " ","" Write-Verbose -Message "$f - Updating variable [$Name] from '$oldValue' to '$newValue" if ($script:Template) { $script:Template.parameters.$name = $Value } } } |