Functions/Policies/Set-PASPlatform.ps1

# .ExternalHelp psPAS-help.xml
function Set-PASPlatform {
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Settings matches the API endpoint terminology')]
    [CmdletBinding(SupportsShouldProcess)]
    param(

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [Alias('PlatformID')]
        [int]$id,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false
        )]
        [ValidateSet('replace', 'remove')]
        [Alias('Operation')]
        [string]$op,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $false
        )]
        [ValidateSet('Policy/General/policyType', 'Policy/General/immediateInterval', 'Policy/General/interval', 'Policy/General/maxConcurrentConnections', 'Policy/General/searchForUsages',
            'Policy/General/looselyConnectedDevices', 'Policy/General/allowedSafes', 'Policy/cpmPlugin/dllName', 'Policy/cpmPlugin/exeName',
            'Policy/cpmPlugin/scriptName', 'Policy/cpmPlugin/scriptEngine', 'Policy/cpmPlugin/xmlFile', 'Policy/cpmPlugin/activationMethod',
            'Policy/cpmPlugin/protocolValidationEx', 'Policy/cpmPlugin/protocolValidationFileCategories', 'Policy/cpmPlugin/supportedBitness', 'Policy/cpmPlugin/supportedTechnology', 'Policy/additionalPolicySettings/promptsFilename',
            'Policy/additionalPolicySettings/processFilename', 'Policy/additionalPolicySettings/port', 'Policy/additionalPolicySettings/protocol', 'Policy/additionalPolicySettings/changeCommand' ,'Policy/additionalPolicySettings/reconcileCommand',
            'Policy/additionalPolicySettings/connectionCommand', 'Policy/additionalPolicySettings/dsn', 'Policy/additionalPolicySettings/reconcileIsWinAccount', 'Policy/additionalPolicySettings/reconcileWinExtraConnectionString', 'Policy/additionalPolicySettings/useSsl',
            'Policy/additionalPolicySettings/restartAppPool', 'Policy/additionalPolicySettings/commit', 'Policy/additionalPolicySettings/debug', 'Policy/additionalPolicySettings/disableAddressResolving', 'Policy/additionalPolicySettings/verifyMachineNameBeforeAction',
            'Policy/additionalPolicySettings/wmiCommandStatementFile', 'Policy/additionalPolicySettings/wmiReconcileCommandStatementFile', 'Policy/additionalPolicySettings/wmiRegistryReturnCodePath', 'Policy/additionalPolicySettings/unlockUserOnReconcile', 'Policy/additionalPolicySettings/changePasswordInResetMode',
            'Policy/additionalPolicySettings/convertFqdnToIP', 'Policy/additionalPolicySettings/commandForbiddenCharacters', 'Policy/additionalPolicySettings/commandBlackList', 'Policy/additionalPolicySettings/allowDomainUserAdHocAccess', 'Policy/additionalPolicySettings/domainUserAdHocAccessLimit',
            'Policy/additionalPolicySettings/adHocConnectionTimeout', 'Policy/additionalPolicySettings/adHocUserNamePrefix', 'Policy/additionalPolicySettings/adHocUserNameSuffix', 'General/description', 'General/name',
            'General/platformBaseId', 'General/platformBaseProtocol', 'General/platformBaseType', 'General/status')]
        [string]$path,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$value,

        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [hashtable[]]$operations
    )

    begin {
        Assert-VersionRequirement -SelfHosted
        Assert-VersionRequirement -RequiredVersion 15.2
    }#begin

    process {

        #Get all parameters that will be sent in the request
        $boundParameters = $PSBoundParameters | Get-PASParameter -ParametersToRemove InputObject, id

        #Create URL for Request
        $URI = "$($psPASSession.BaseURI)/API/platforms/targets/$id/settings"

        if ($PSBoundParameters.Keys -contains 'operations') {

            $boundParameters = $boundParameters['operations']

        }

        #Do Not Pipe into ConvertTo-JSON.
        #Correct JSON Format is only achieved when the array is not sent along the pipe
        $body = ConvertTo-Json @($boundParameters)

        if ($PSCmdlet.ShouldProcess($id, 'Update Platform Properties')) {

            #send request to PAS web service
            Invoke-PASRestMethod -Uri $URI -Method PATCH -Body $Body

        }

    }#process

    end { }#end

}