Public/OAuth/Export-RedditOAuthToken.ps1

<#
    .NOTES
    
     Created with: VSCode
     Created on: 5/11/2017 3:47 AM
     Edited on: 5/11/2017
     Created by: Mark Kraus
     Organization:
     Filename: Export-RedditOAuthToken.ps1
    
    .DESCRIPTION
        Export-RedditOAuthToken Function
#>

[CmdletBinding()]
param()

function Export-RedditOAuthToken {
    [CmdletBinding(
        DefaultParameterSetName = 'ExportPath',
        ConfirmImpact = 'Low',
        HelpUri = 'https://psraw.readthedocs.io/en/latest/Module/Export-RedditOAuthToken',
        SupportsShouldProcess = $true
    )]
    [OutputType([System.IO.FileInfo])]
    param
    (
        [Parameter(
            ParameterSetName = 'Path',
            Mandatory = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [ValidateNotNullOrEmpty()]
        [string]$Path,
        
        [Parameter(
            ParameterSetName = 'LiteralPath',
            Mandatory = $true,
            ValueFromRemainingArguments = $true
        )]
        [ValidateNotNullOrEmpty()]
        [string]$LiteralPath,
        
        [Parameter(
            ParameterSetName = 'LiteralPath',
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true
        )]
        [Parameter(
            ParameterSetName = 'Path',
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true
        )]
        [Parameter(
            ParameterSetName = 'ExportPath',
            Mandatory = $false,
            ValueFromPipelineByPropertyName = $true
        )]
        [ValidateSet(
            'ASCII', 
            'UTF8', 
            'UTF7', 
            'UTF32', 
            'Unicode', 
            'BigEndianUnicode', 
            'Default', 
            'OEM'
        )]
        [string]$Encoding = 'Unicode',
        
        [Parameter(
            ParameterSetName = 'LiteralPath',
            Mandatory = $true,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [Parameter(
            ParameterSetName = 'Path',
            Mandatory = $true,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [Parameter(
            ParameterSetName = 'ExportPath',
            Mandatory = $true,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true
        )]
        [Alias('Token')]
        [RedditOAuthToken]$AccessToken
    )
    
    Process {
        $Params = @{
            Depth       = [int32]::MaxValue - 1
            Encoding    = $Encoding
            InputObject = $AccessToken
        }
        switch ($PsCmdlet.ParameterSetName) {
            'Path' {
                $Params['Path'] = $Path
                $Target = $Path
                break
            }
            'LiteralPath' {
                $Params['LiteralPath'] = $LiteralPath
                $Target = $LiteralPath
                break
            }
            'ExportPath' {
                $Params['Path'] = $AccessToken.ExportPath
                $Target = $LiteralPath
                break
            }
        }
        if ($pscmdlet.ShouldProcess("Target")) {
            Export-Clixml @Params
        }
    }
}