SecretManagement.NetwrixPasswordSecure.Extension/internal/functions/Update-NetwrixContainer.ps1

function Update-NetwrixContainer {
    <#
    .SYNOPSIS
    Updates a password container.
 
    .DESCRIPTION
    Updates a password container.
 
    .PARAMETER Name
    Name to be searched for.
 
    .PARAMETER VaultName
    The name of the secret vault.
 
    .PARAMETER AdditionalParameters
    Additional parameters which where configured while creating the vault.
 
    .PARAMETER NewUserName
    If used a new Username will be saved.
 
    .PARAMETER NewMemo
    If used a new Note will be saved.
 
    .PARAMETER NewText
    If used the name of the entry will be changed.
 
    .PARAMETER NewPassword
    If used a new Password will be saved.
 
    .EXAMPLE
    Update-NetwrixContainer -Name foo -NewText FooBar -VaultName $vaultName -AdditionalParameters $AdditionalParameters
 
    Rename the entry 'foo' to 'foobar'
 
    .NOTES
    General notes
    #>

    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseOutputTypeCorrectly', '')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessforStateChangingFunctions', '')]
    param (
        [String]$Name,
        [string]$VaultName,
        [hashtable]$AdditionalParameters,
        [String]$NewUserName,
        [String]$NewMemo,
        [String]$NewText,
        [securestring]$NewPassword
    )
    Write-PSFMessage "Update-NetwrixContainer, $VaultName, AdditionalParameters=$($AdditionalParameters|ConvertTo-Json -Compress)"

    if (-not (Test-SecretVault -VaultName $vaultName -AdditionalParameters $AdditionalParameters)) {
        Write-PSFMessage -Level Error "${vaultName}: Failed to unlock the vault"
        return $false
    }
    $container = Get-NetwrixContainer -Filter $Name -VaultName $VaultName -AdditionalParameters $AdditionalParameters -ReturnType NonModifiedContainer
    if ($container.Count -gt 1) {
        Write-PSFMessage -Level Error 'Multiple credentials found; Search with Get-SecretInfo and require the correct one by *.MetaData.id'
        Wait-PSFMessage
        throw 'Multiple credentials found; Search with Get-SecretInfo and require the correct one by *.MetaData.id'
    }
    $psrApi = (Get-Variable -Name "Vault_$VaultName" -Scope Script -ErrorAction Stop).Value

    $conMan = $psrApi.ContainerManager

    Write-PSFMessage "Found $($container.Count) Password containers for filter $filter"
    foreach ($con in $Container) {
        Write-PSFMessage "Updating Container.id=$($con.id), .name=$($con.Info.ContainerName)"

        foreach ($child in $con.Items) {
            $newPropertyName = $child.ContainerItemType -replace 'ContainerItem', 'New'
            try {
                $newPropertyValue = Get-Variable $newPropertyName -ValueOnly -ErrorAction Stop
            }
            catch {
                Write-PSFMessage "Param $newPropertyName not in focus, continue"
                continue
            }
            if ([string]::IsNullOrEmpty($newPropertyValue)) {
                Write-PSFMessage "No $newPropertyName param provided, continue"
                continue
            }
            switch ($newPropertyName) {
                NewPassword {
                    $plainTextPassword = [PSCredential]::new('SecureString', $NewPassword).GetNetworkCredential().Password
                    Write-PSFMessage "Aktualisiere Kennwort auf $plainTextPassword"
                    $child.PlainTextValue = $plainTextPassword
                }
                # NewUserName {
                # NewMemo {
                # $NewName {
                Default {
                    Write-PSFMessage "Update property $_ with param $newPropertyName and value $newPropertyValue"
                    $child.Value = $newPropertyValue
                }
            }
        }
        $conMan.UpdateContainer($con)| Wait-Task
    }
}