Scripts/ActiveDirectory/Update-CohesityActiveDirectory.ps1

function Update-CohesityActiveDirectory {
    <#
        .SYNOPSIS
        Updates active directory entities.
        .DESCRIPTION
        Updates the user id mapping info of an Active Directory.
        Updates the list of trusted domains to be ignored during trusted domain discovery of an
        Active Directory.
        Updates the LDAP provide Id for an Active Directory domain.
        Updates the preferred domain controllers of an Active Directory
 
        .NOTES
        Published by Cohesity
        .LINK
        https://cohesity.github.io/cohesity-powershell-module/#/README
        .EXAMPLE
        Update-CohesityActiveDirectory -DomainName cohesity.com -IdMappingInfo $mappingObject
        .EXAMPLE
        Update-CohesityActiveDirectory -DomainName cohesity.com -PreferredDomainControllers $dcObject
        .EXAMPLE
        Update-CohesityActiveDirectory -DomainName cohesity.com -LdapProvider $ldapObject
        .EXAMPLE
        Update-CohesityActiveDirectory -DomainName cohesity.com -IgnoredTrustedDomains $itdObject
    #>


    [CmdletBinding(DefaultParameterSetName = 'IdMappingInfo', SupportsShouldProcess = $True, ConfirmImpact = "High")]
    Param(
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ParameterSetName = 'DomainOnly', Position = 0)]
        [Parameter(Mandatory = $true, ParameterSetName = 'IdMappingInfo', Position = 0)]
        [Parameter(Mandatory = $true, ParameterSetName = 'IgnoredTrustedDomains', Position = 0)]
        [Parameter(Mandatory = $true, ParameterSetName = 'LdapProvider', Position = 0)]
        [Parameter(Mandatory = $true, ParameterSetName = 'PreferredDomainControllers', Position = 0)]
        # Specifies the Active Directory Domain Name.
        $DomainName,
        [Parameter(Mandatory = $true, ParameterSetName = 'IdMappingInfo', Position = 1)]
        # Specifies how the Unix and Windows users are mapped in an Active Directory.
        $IdMappingInfo,
        [Parameter(Mandatory = $true, ParameterSetName = 'IgnoredTrustedDomains', Position = 1)]
        # Specifies the list of trusted domains that were set by the user to be ignored during trusted domain discovery.
        $IgnoredTrustedDomains,
        [Parameter(Mandatory = $true, ParameterSetName = 'LdapProvider', Position = 1)]
        # Specifies the LDAP provider which is map to this Active Directory
        $LdapProvider,
        [Parameter(Mandatory = $true, ParameterSetName = 'PreferredDomainControllers', Position = 1)]
        # Specifies Map of Active Directory domain names to its preferred domain controllers.
        $PreferredDomainControllers
    )
    Begin {
        if (-not (Test-Path -Path "$HOME/.cohesity")) {
            throw "Failed to authenticate. Please connect to the Cohesity Cluster using 'Connect-CohesityCluster'"
        }
        $session = Get-Content -Path $HOME/.cohesity | ConvertFrom-Json

        $server = $session.ClusterUri

        $token = $session.Accesstoken.Accesstoken
    }

    Process {
        if ($PSCmdlet.ShouldProcess($DomainName)) {
            $url = $server + '/irisservices/api/v1/public/activeDirectory/' + $DomainName
            switch ($PsCmdlet.ParameterSetName) {
                "IdMappingInfo" {
                    Write-Output $IdMappingInfo
                    $url = $url + '/idMappingInfo'
                    $payload = $IdMappingInfo
                }
                "IgnoredTrustedDomains" {
                    Write-Output $IgnoredTrustedDomains
                    $url = $url + '/ignoredTrustedDomains'
                    $payload = $IgnoredTrustedDomains
                }
                "LdapProvider" {
                    Write-Output $LdapProvider
                    $url = $url + '/ldapProvider'
                    $payload = $LdapProvider
                }
                "PreferredDomainControllers" {
                    Write-Output $PreferredDomainControllers
                    $url = $url + '/preferredDomainControllers'
                    $payload = $PreferredDomainControllers
                }
            }
            $headers = @{'Authorization' = 'Bearer ' + $token }
            $payloadJson = $payload | ConvertTo-Json
            $resp = Invoke-RestApi -Method Put -Uri $url -Headers $headers -Body $payloadJson
            if ($resp) {
                $resp
            }
            else {
                $errorMsg = "Active Directory : $DomainName, Failed to update"
                Write-Output $errorMsg
                CSLog -Message $errorMsg
            }
        }
    }
    End {
    }
}