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{}
}