Private/RSOP/_GetRSOP.ps1

Function _GetRSOP {
    param (
        [Parameter(Mandatory = $true)]
        [Parameter(ParameterSetName = 'Listing', Mandatory = $true)]
        [ValidateSet('HTML', 'Listing')]
        [string]$ReportType,

        [Parameter()]
        [Parameter(ParameterSetName = 'Listing')]
        # [ValidateScript( { Get-ADComputer $_ })]
        [string]$Identity = $env:COMPUTERNAME,

        [Parameter()]
        [Parameter(ParameterSetName = 'Listing')]
        # [ValidateScript( { Get-ADUser $_ })]
        [string]$User,

        [Parameter(Mandatory = $true)]
        [Parameter(ParameterSetName = 'Listing', Mandatory = $true)]
        # [ValidateScript( { Test-Path $_ })]
        [string]$Path,

        [Parameter(ParameterSetName = 'Listing', Mandatory = $false)]
        [PSCredential]$Credential
    )
    begin {
        $CurrentTime = Get-Date -Format 'MMddyyyy_hhmm'

        if ($Credential) {
            $Pass = [Net.NetworkCredential]::new('', $Credential.Password).password
        }

        if ($User) {
            $File = "${Path}gpresult_${Identity}_${User}_${CurrentTime}."
        }
        else {
            $File = "${Path}gpresult_${Identity}_${CurrentTime}."
        }
    }
    process {
        switch ($ReportType) {
            'HTML' {
                $File += 'html'
                if ($User) {
                    Write-Verbose "Getting HTML report for $User"
                    gpresult /S $Identity /H $File /Scope user /User $User
                }
                else {
                    # No user defined, pull computer GPO report
                    Write-Verbose "Getting HTML report for $Identity"
                    gpresult /S $Identity /H $File /Scope computer
                }
            }
            'Listing' {
                $File += 'txt'

                if ($Credential) {
                    if ($User) {
                        # User was defined so get User GPO Report
                        Write-Verbose "Getting TXT report for $User"
                        gpresult /S $Identity /R /Scope user /User $User /U $Credential.UserName /P $Pass > $File
                    }
                    else {
                        # No user defined, pull computer GPO report
                        Write-Verbose "Getting TXT report for $Identity"
                        gpresult /S $Identity /R /Scope computer /U $Credential.UserName /P $Pass > $File
                    }
                }
                else {
                    if ($User) {
                        # User was defined so get User GPO Report
                        Write-Verbose "Getting TXT report for $User"
                        gpresult /S $Identity /R /Scope user /User $User > $File
                    }
                    else {
                        # No user defined, pull computer GPO report
                        Write-Verbose "Getting TXT report for $Identity"
                        gpresult /S $Identity /R /Scope computer > $File
                    }
                }
            }
        }
    }
    end {
        # send back the file location and let the calling function deal with opening it.
        if (Test-Path $File) {
            return $File
        }
        else {
            # Don't change this text without updating the calling function!
            return 'Unable to create file.'
        }
    }
}