Scripts/Utility/set-cohesitycmdletconfig.ps1

# the configuration structure for cohesity cmdlet
class CohesityConfig {
    [int]$LogSeverity = 0
    $LogRequestedPayload = $false
    $LogResponseData = $false
    $LogHeaderDetail = $false
    $RefreshToken = $false
    [string]$LogFilePath
    # following values are read only, not for configuration purpose
    [string]$ConfigFolder = "cohesity"
    [string]$ConfigFileName = "config.json"
    [string]$LogFileName = "cmdlet.log"
}
$Global:CohesityCmdletConfig = $null
function Set-CohesityCmdletConfig {
    <#
        .SYNOPSIS
        Set the local configuration for cohesity powershell cmdlets.
        .DESCRIPTION
        Set the local configuration for cohesity powershell cmdlets. If the logging flags are set, a log is generated in the following path $HOME/cohesity/cmdlet.log.
        .NOTES
        Published by Cohesity
        .LINK
        https://cohesity.github.io/cohesity-powershell-module/#/README
        .EXAMPLE
        Set-CohesityCmdletConfig -LogSeverity 2
        Enables the log severity to 2.
        Log severity 1 for success/failure status, 2 for data validation errors, 3 for exception messages.
        .EXAMPLE
        Set-CohesityCmdletConfig -LogRequestedPayload:$true
        Enables the log for request payload.
        .EXAMPLE
        Set-CohesityCmdletConfig -LogResponseData:$true
        Enables the log for response data.
        .EXAMPLE
        Set-CohesityCmdletConfig -LogHeaderDetail:$true
        Enables the logs for headers.
        .EXAMPLE
        Set-CohesityCmdletConfig -RefreshToken:$true
        Enables the flag RefreshToken, the cmdlet framework would implicitly attempt to refresh the expired token. The user does not need to explicitly connect to the cluster post token expiry.
        .EXAMPLE
        Set-CohesityCmdletConfig -LogFilePath "C:\cohesity\mylogs"
        Set the log file path. The cmdlet will create the folders if it does not exists.
    #>

    [CmdletBinding(DefaultParameterSetName = 'Default', SupportsShouldProcess = $True, ConfirmImpact = "High")]
    param(
        [Parameter(Mandatory = $false)]
        [ValidateSet(0, 1, 2, 3)]
        # Set the log level.
        [int]$LogSeverity,
        [Parameter(Mandatory = $false)]
        # Not recommended, the request payload may contain passwords or key information.
        [switch]$LogRequestedPayload = $false,
        [Parameter(Mandatory = $false)]
        # Log the response data.
        [switch]$LogResponseData = $false,
        [Parameter(Mandatory = $false)]
        # Log the header details.
        [switch]$LogHeaderDetail = $false,
        [Parameter(Mandatory = $false)]
        # If set and the token has expired, the framework would attempt refreshing the token.
        [switch]$RefreshToken = $false,
        [Parameter(Mandatory = $false)]
        # Log file path. For example set the path as C:\temp
        [string]$LogFilePath

    )
    Begin {
        [CohesityConfig]$configObject = [CohesityConfig]::New()
        $configFileName = $configObject.ConfigFileName
        $cohesityFolder = $configObject.ConfigFolder
        # check if the folder exists
        if ($false -eq [System.IO.Directory]::Exists("$HOME/" + $cohesityFolder)) {
            New-Item -Path "$HOME/" -Name $cohesityFolder -ItemType "directory" | Out-Null
        }
        $cmdletConfigPath = "$HOME/" + $cohesityFolder + "/" + $configFileName
        if ($false -eq [System.IO.File]::Exists($cmdletConfigPath)) {
            $configObject | ConvertTo-Json -depth 100 | Out-File $cmdletConfigPath
        }
    }
    Process {
        if ($PSCmdlet.ShouldProcess("Cmdlet configuration")) {
            $config = Get-Content $cmdletConfigPath | ConvertFrom-Json

            if ($PSBoundParameters.ContainsKey('LogSeverity')) {
                $config.LogSeverity = $LogSeverity
            }
            if ($PSBoundParameters.ContainsKey('LogRequestedPayload')) {
                $config.LogRequestedPayload = $LogRequestedPayload.IsPresent
            }
            if ($PSBoundParameters.ContainsKey('LogResponseData')) {
                $config.LogResponseData = $LogResponseData.IsPresent
            }
            if ($PSBoundParameters.ContainsKey('LogHeaderDetail')) {
                $config.LogHeaderDetail = $LogHeaderDetail.IsPresent
            }
            if ($PSBoundParameters.ContainsKey('RefreshToken')) {
                $config.RefreshToken = $RefreshToken.IsPresent
            }
            if ($PSBoundParameters.ContainsKey('LogFilePath')) {
                $property = Get-Member -InputObject $config -Name LogFilePath
                if (-not $property) {
                    $config | Add-Member -NotePropertyName LogFilePath -NotePropertyValue ""
                }
                if ($false -eq [System.IO.Directory]::Exists($LogFilePath)) {
                     Write-OutPut "Folder does not exists, creating '$LogFilePath'"
                     New-Item -Path $LogFilePath  -ItemType "directory" -Force | Out-Null
                }
                $config.LogFilePath = $LogFilePath
            }

            $config | ConvertTo-Json -depth 100 | Out-File $cmdletConfigPath
            $Global:CohesityCmdletConfig | Out-Null
            $Global:CohesityCmdletConfig = $config
        }
    }
    End {
    }
}