Public/Start-MDSWebBrowser.ps1

Function Start-MDSWebBrowser {
    <#
    .SYNOPSIS
    Opens a web browser as the current user or as the user of the credentials provided

    .DESCRIPTION
    Opens a web browser as the current user or as the user of the credentials provided. Defaults to Internet Explorer.

    .EXAMPLE
    Start-MDSWebBrowswer -MDSCredential $MDSCredentialName

    .EXAMPLE
    Start-MDSWebBrowswer -Credential -Browser Chrome

    .NOTES

    #>


    [System.Diagnostics.CodeAnalysis.SuppressMessage('PSAvoidUsingPlainTextForPassword', '')]
    [System.Diagnostics.CodeAnalysis.SuppressMessage('PSUsePSCredentialType', '')]

    [CmdletBinding(
        SupportsShouldProcess,
        DefaultParameterSetName="MDSCredential"
    )]
    Param(
        [parameter(Position=0,ParameterSetName="MDSCredential")]
        [String]$MDSCredential,

        [parameter(Position=0,ParameterSetName="Credential")]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.CredentialAttribute()]
        $Credential,

        [parameter(Position=1,ParameterSetName="MDSCredential")]
        [parameter(Position=1,ParameterSetName="Credential")]
        [ValidateSet('IE','Chrome')]
        [string]$Browser='IE'
    )

    Begin {}
    Process {
        $ProcessPath = Switch ($Browser) {
            IE      {'C:\Program Files\Internet Explorer\iexplore.exe'}
            Chrome  {'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'}
            Default {}
        }
        # Variable for storing parameters
        $Parameters = @{}

        # Capture MDS Credentials
        If ($PsCmdlet.ParameterSetName -eq "MDSCredential" -and -not [string]::IsNullOrEmpty($MDSCredential)) {
            Try {
                $Credential = Get-MDSCredential -Name $MDSCredential
            }
            Catch {
                $PsCmdlet.ThrowTerminatingError($PSItem)
            }
        }
        ElseIf ($PsCmdlet.ParameterSetName -eq "MDSCredential" -and [string]::IsNullOrEmpty($MDSCredential)) {
            Write-Verbose "Opening $($Browser) for the current user."
            Return Start-Process $ProcessPath
        }

        # Add credentials to parameter list
        If ($null -ne $Credential) {
            $Parameters.Add("Credential",$Credential)
        }

        # For use in Confirm & WhatIf
        $ShouldProcessTarget = "Username: {0}, Browser: {1}" -f $Credential.UserName,$Browser

        # Execute Explorer
        If ($PSCmdlet.ShouldProcess($ShouldProcessTarget,$MyInvocation.MyCommand)) {
            Try {
                Write-Verbose "Opening $($Browser) for $($Credential.UserName)."
                Start-Process $ProcessPath @Parameters -LoadUserProfile
            }
            Catch {
                $PsCmdlet.ThrowTerminatingError($PSItem)
            }
        }
    }

    End {}
}