CMUIntegrations/Get-EarlyWarningReport.ps1

$ScriptName = $($MyInvocation.MyCommand.Name).Split(".")[0]
Start-Transcript -path "D:\logs\$ScriptName - $(Get-Date -Format 'yyyy-MM-dd-HH-mm-ss').txt"
$VerbosePreference = "continue"
$DebugPreference = "continue"
$ErrorActionPreference = "stop"


#Import Useful Modules
Import-Module PSBlackboard.psm1 -Force
#Import-Module PSBlackboard

#Friday Mornings
#Do one file per semester
#Get Useful Terms
Write-Debug "Getting Current Blackboard Terms from the RESTAPI"
$CurrentTerms = Get-BBTerms -TargetTerm 'AllCurrent'
Write-Debug $CurrentTerms

#Get the courses
foreach($Term in $CurrentTerms){
    [System.Collections.ArrayList]$Courses = @()
    [System.Collections.ArrayList]$CourseMemberships = @()
    [System.Collections.ArrayList]$FeedFileOutput = @()

    Get-BBCourses -Filter "termId=$($Term.id)" |
        ForEach-Object{
            $Courses.Add($_) | out-null
        }
    $Counter = 0
    Write-Debug $Courses.ToString()
    foreach ($Course in $Courses) {
        $Counter += 1
        Write-Debug "Processing Course Enrollments Progress: $($Counter)/$($Courses.count) ($($($Counter)/$($Courses.count))) [$($Course.id)] PercentComplete $(($($Counter)/$($Courses.count))*100)"
        $params = @{
            CourseID =  $Course.id
            ExpandUser = $true
        }

        Get-BBCourseMemberships @params -Filter "role=Instructor&availability.available=Yes" |
            ForEach-Object{
                $CourseMemberships.Add($_) | Out-Null
            }
        Get-BBCourseMemberships @params -Filter "role=TeachingAssistant&availability.available=Yes" |
        ForEach-Object{
            $CourseMemberships.Add($_) | Out-Null
        }

    }
    Write-Debug $CourseMemberships.ToString()
    #Determine all unique users
    $UniqueUsers = $CourseMemberships | sort-object -Property {$_.user.userName} -Unique

    Write-Debug $UniqueUsers.ToString()
    If ($UniqueUsers.count -gt 0){
    #Add the columns we need to an array
    foreach ($User in $UniqueUsers) {
        $FeedFileOutput.add([PSCUstomObject]@{
            EmailAddress = $User.user.contact.email
            FirstName = $User.user.name.given
            LastName = $User.user.name.family
        }) | Out-Null
    }

    Write-Debug $FeedFileOutput.ToString()

    #Save the CSV that we need since you can't mail an attachment without it existing on the server.
    $FileName = "$PSScriptRoot\temp\BBFacultListServeList_$($Term.name).txt"
    $FeedFileOutput | Sort-Object -Property EmailAddress | ConvertTo-Csv  -NoTypeInformation -Delimiter "`t"  | foreach-Object { $_ -replace '"', ""} | select-object -Skip 1 |Set-Content -path $FileName

    #Send the mail to whoever needs it.
    $recipients = "Marcus Jackson <jacks3m@cmich.edu>", "Marnie Roestel <roest1m@cmich.edu>"
    $recipients = "Marcus Jackson <jacks3m@cmich.edu>"
    $subject = "BBFacult List Serve List Data"
    $Body = "Attached are $($UniqueUsers.count) unique instructors for enrollments in $($Term)"
    Send-MailMessage -To $recipients -Subject $Subject -Body $Body -SmtpServer 'smtp.cmich.edu' -From 'no-reply@blackboard.apps.cmich.edu' -Attachment $FileName

    #Remove the CSV as it is no longer needed.
    remove-item $FileName
    }

}