Functions/Policies/Set-PASMasterPolicy.ps1

function Set-PASMasterPolicy {
    [CmdletBinding(SupportsShouldProcess)]
    param (
        <#
    [Parameter(
        Mandatory = $true,
        ValueFromPipeline = $true,
        ValueFromPipelineByPropertyName = $true
    )]
    [int]$PolicyId,
#>

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Dual control policy.'
        )]
        [bool]$DualControl = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Multi-level approval policy.'
        )]
        [bool]$MultiLevelApproval = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Only managers approval policy.'
        )]
        [bool]$OnlyManagersApproval = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Number of confirmers policy.'
        )]
        [int]$ConfirmersNumber = 0,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Enforce exclusive access policy.'
        )]
        [bool]$EnforceExclusiveAccess = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Enforce one-time password policy.'
        )]
        [bool]$EnforceOneTimePassword = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Transparent connection policy.'
        )]
        [bool]$TransparentConnection = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Allow view password policy.'
        )]
        [bool]$AllowViewPassword = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Require reason policy.'
        )]
        [bool]$RequireReason = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Allow free text policy.'
        )]
        [bool]$AllowFreeText = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Password change days policy.'
        )]
        [int]$PasswordChangeDays = 0,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Password verification days policy.'
        )]
        [int]$PasswordVerificationDays = 0,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Require monitoring and isolation policy.'
        )]
        [bool]$RequireMonitoringAndIsolation = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Record activity policy.'
        )]
        [bool]$RecordActivity = $false,

        [Parameter(
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = 'Retention period policy.'
        )]
        [int]$RetentionPeriod = 0
    )

    begin {
        Assert-VersionRequirement -RequiredVersion 14.6
        $PolicyId = 1
    }

    process {
        $URI = "$($psPASSession.BaseURI)/API/Policies/$PolicyId"

        #Get request parameters
        $boundParameters = $PSBoundParameters | Get-PASParameter

        $originalMasterPolicy = Get-PASMasterPolicy

        # Flattened object with just the .Value properties
        $flattenedMasterPolicy = [PSCustomObject]@{}

        foreach ($prop in $originalMasterPolicy.PSObject.Properties) {
            $flattenedMasterPolicy | Add-Member -MemberType NoteProperty -Name $prop.Name -Value $prop.Value.Value
        }

        if ($null -ne $originalMasterPolicy) {
            Format-PutRequestObject -InputObject $flattenedMasterPolicy -boundParameters $boundParameters
        }

        #Create body of request
        $body = $boundParameters | ConvertTo-Json

        if ($PSCmdlet.ShouldProcess($PolicyId, 'Update Master Policy')) {

            $result = Invoke-PASRestMethod -Uri $URI -Method PUT -Body $body

            if ($null -ne $result) {
                $result
            }
        }
    }

    end {}
}