Cmdlets/Get-SPOWebGroupValidation/Get-SPOWebGroupValidation.psm1

Function Get-SPOWebGroupValidation
{
    [cmdletbinding()]
    param(
    [parameter(Mandatory=$True, ValueFromPipeline=$True, position=0)]
    [System.Object[]]$Entry,
    [parameter(Mandatory=$True, position=1)]
    [System.Management.Automation.PSCredential]$Credential,
    [parameter(Mandatory=$False, position=2, HelpMessage="Use the -GroupExclusionFile parameter to specify a text file containing a list groups that should be evaluated for exclusion.")]
    [ValidateScript({
        if($_.localpath.endswith("txt")){$True}else{throw "`r`n`'InputFile`' must be a txt file"}
        if(test-path $_.localpath){$True}else{throw "`r`nFile $($_.localpath) does not exist"}
    })]
    [URI]$GroupExclusionFile
    )

    if($GroupExclusionFile)
    {
        $GroupExclusions = Get-Content $GroupExclusionFile.LocalPath
    }
    try
    {
        try
        {
            Get-PnPConnection | Out-Null
            if(-not ((Get-PnPConnection).url.trimend("/") -eq $(($Entry.'Web URL').Replace($entry.'Source Site URL', $Entry.'Destination Site URL'.trimend("/")))))
            {
                Disconnect-PnPOnline
                Connect-PnPOnline -Url $(($Entry.'Web URL').Replace($entry.'Source Site URL', $Entry.'Destination Site URL'.trimend("/"))) -Credentials $Credential | Out-Null
            }
        }
        catch
        {
            Connect-PnPOnline -Url $(($Entry.'Web URL').Replace($entry.'Source Site URL', $Entry.'Destination Site URL'.trimend("/"))) -Credentials $Credential | Out-Null
        }
    }
    catch
    {
        write-host "Could not connect to web $(($Entry.'Web URL').Replace($entry.'Source Site URL', $Entry.'Destination Site URL'.trimend("/")))"
    }
    $WebGroup = Get-PnPGroup -Identity $Entry.'Group Name' -ErrorAction SilentlyContinue
    $WebGroupEntry = New-Object System.Object
    $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Source Site URL" -Value $Entry.'Source Site URL'
    $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Destination Site URL" -Value $Entry.'Destination Site URL'
    $WebGroupEntry | Add-Member -MemberType NoteProperty -name "Web URL" -Value (Get-PnPConnection | Select-Object -ExpandProperty URL)
    $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Group Name" -value $Entry.'Group Name'
    if($WebGroup)
    {
        $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Type of Entry" -Value "Group"
        $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Exists in Destination Site" -Value "True"
        if($GroupExclusionFile)
        {
            if($GroupExclusions -imatch $Entry.'Group Name')
            {
                $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Excluded Group" -Value "True"
            }
            else
            {
                $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Excluded Group" -Value "False"
            }
        }
    }
    else
    {
        $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Type of Entry" -Value "Group"
        $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Exists in Destination Site" -Value "False"
        if($GroupExclusions -imatch $Entry.'Group Name')
        {
            $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Excluded Group" -Value "True"
        }
        else
        {
            $WebGroupEntry | Add-Member -MemberType NoteProperty -Name "Excluded Group" -Value "False"
        }
    }
    Return $WebGroupEntry
}