functions/Set-TssSecret.ps1
function Set-TssSecret { <# .SYNOPSIS Set a value for a given secret in Secret Server .DESCRIPTION Sets a secret property or field in Secret Server. .PARAMETER TssSession TssSession object created by New-TssSession .PARAMETER Id Secret ID to the property/field. .PARAMETER Comment Comment to provide for restricted secret (Require Comment is enabled) .PARAMETER Field Field name to set .PARAMETER Value Value to set for field or property .PARAMETER Clear If provided will clear/blank out the field value .EXAMPLE PS C:\> $session = New-TssSession -SecretServer https://alpha -Credential $ssCred PS C:\> Set-TssSecret -TssSession $session -Id 93 -Property Name -Value "Server2 admin account" Sets secret 93's property, "Name", to "Server2 admin account" .EXAMPLE PS C:\> $session = New-TssSession -SecretServer https://alpha -Credential $ssCred PS C:\> Set-TssSecret -TssSession $session -Id 93 -Field Machine -Value "server2" Sets secret 93's field, "Machine", to "server2" .EXAMPLE PS C:\> $session = New-TssSession -SecretServer https://alpha -Credential $ssCred PS C:\> Set-TssSecret -TssSession $session -Id 1455 -Property enableInheritPermissions -Value $false -Comment "disabling folder inheritance" Sets secret 1455's property, "enableInheritPermissions", to false and providing required comment .EXAMPLE PS C:\> $session = New-TssSession -SecretServer https://alpha -Credential $ssCred PS C:\> Set-TssSecret -TssSession $session -Id 1455 -Field Notes -Value "to be decommissioned" -Comment "updating notes field" Sets secret 1455's field, "Notes", to the provided value providing required comment .EXAMPLE PS C:\> $session = New-TssSession -SecretServer https://alpha -Credential $ssCred PS C:\> Set-TssSecret -TssSession $session -Id 113 -Field Notes -Clear Sets secret 1455's field, "Notes", to an empty value .NOTES Requires TssSession object returned by New-TssSession #> [cmdletbinding(SupportsShouldProcess)] param( # TssSession object passed for auth info [Parameter(Mandatory, ValueFromPipeline, Position = 0)] [TssSession]$TssSession, # Secret Id to modify [Parameter(Mandatory,ValueFromPipelineByPropertyName)] [Alias("SecretId")] [int[]] $Id, # Provide comment for restricted secret [Parameter(ParameterSetName = "field")] [string] $Comment, # Field of the secret [Parameter(Mandatory, ParameterSetName = "field")] [Alias('FieldName')] [string] $Field, # Value for the property or field [Parameter(ParameterSetName = "field")] [string] $Value, # Clear the current field value [Parameter(ParameterSetName = "field")] [switch] $Clear, # Set email when changed to true [Parameter(ParameterSetName= "email")] [switch] $EmailWhenChanged, # Set email when HB fails to true [Parameter(ParameterSetName= "email")] [switch] $EmailWhenViewed, # Set email when viewed to true [Parameter(ParameterSetName= "email")] [switch] $EmailWhenHeartbeatFails ) begin { $tssParams = . $GetParams $PSBoundParameters 'Set-TssSecret' $invokeParams = @{ } # data object for Email Settings $emailBody = @{ data = @{ } } } process { if ($tssParams.Contains('TssSession') -and $TssSession.IsValidSession()) { $invokeParams.PersonalAccessToken = $TssSession.AccessToken foreach ($secret in $Id) { if ($TssParams.Contains('Field')) { $uri = $TssSession.SecretServer + ($TssSession.ApiVersion, "secrets", $secret, "fields", $Field -join "/") if ([string]::IsNullOrEmpty($Value)) { $Value = "" } if ($TssParams.Contains('Clear') -and $TssParams.Contains('Value')) { Write-Warning "Clear and Value provided, only one is supported" return } elseif ($TssParams.Contains('Clear')) { $body = '{"value": ""}' } else { $body = "{'value': '$Value'}" } $invokeParams.Uri = $uri $invokeParams.Body = $body $invokeParams.PersonalAccessToken = $TssSession.AccessToken $invokeParams.Method = 'PUT' if (-not $PSCmdlet.ShouldProcess("$($invokeParams.Method) $uri with $($invokeParams.Body)")) { return } $restResponse = Invoke-TssRestApi @invokeParams if ($restResponse -eq $Value) { Write-Verbose "$secret field $Field updated successfully" } elseif ($TssParams.Contains('Clear') -and ($null -eq $restResponse)) { Write-Verbose "$secret field $Field cleared successfully" } else { $restResponse } } if ($TssParams.Contains('EmailWhenChanged') -or $TssParams.Contains('EmailWhenViewed') -or $TssParams.Contains('EmailWhenHeartbeatFails')) { $uri = $TssSession.SecretServer + ($TssSession.ApiVersion, "secrets", $secret, "email" -join "/") if ($TssParams.Contains('EmailWhenChanged')) { $sendEmailWhenChanged = @{ dirty = $true value = $EmailWhenChanged } $emailBody.data.Add('sendEmailWhenChanged',$sendEmailWhenChanged) } if ($TssParams.Contains('EmailWhenViewed')) { $sendEmailWhenViewed = @{ dirty = $true value = $EmailWhenViewed } $emailBody.data.Add('sendEmailWhenViewd',$sendEmailWhenViewed) } if ($TssParams.Contains('EmailWhenHeartbeatFails')) { $sendEmailWhenHeartbeatFails = @{ dirty = $true value = $EmailWhenHeartbeatFails } $emailBody.data.Add('sendEmailWhenHeartbeatFails',$sendEmailWhenHeartbeatFails) } $invokeParams.Uri = $uri $invokeParams.Body = $emailBody | ConvertTo-Json $invokeParams.Method = 'PATCH' if (-not $PSCmdlet.ShouldProcess("$($invokeParams.Method) $uri with $($invokeParams.Body)")) { return } try { $restResponse = Invoke-TssRestApi @invokeParams } catch { Write-Warning "Issue setting email settings, verify Email Server is configured in Secret Server" $err = $_.ErrorDetails.Message Write-Error $err } } } } else { Write-Warning "No valid session found" } } } |