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 } } |