Get-SQLBitsSchedule.ps1
<# .SYNOPSIS Gets the SQLBits Schedule from the Sessionize API .DESCRIPTION Gets the SQLBits Schedule from the Sessionize API and outputs to json, excel, psobject, html or csv .PARAMETER Output The type of output required. Valid values are json, excel, psobject, html or csv .PARAMETER fileDirectory The directory to save the output file to - defaults to Env:Temp .PARAMETER Show Whether to open the output file after it has been created .EXAMPLE Get-SQLBitsSchedule -Output Excel -Show Gets the SQLBits Schedule from the Sessionize API and outputs to excel, opens the file and saves it to the default temp directory .EXAMPLE Get-SQLBitsSchedule -Output Raw Gets the SQLBits Schedule from the Sessionize API and outputs as json on the screen .EXAMPLE Get-SQLBitsSchedule -Output csv -Show Gets the SQLBits Schedule from the Sessionize API and outputs to csv, opens the file and saves it to the default temp directory .EXAMPLE Get-SQLBitsSchedule -Output object Gets the SQLBits Schedule from the Sessionize API and outputs as a psobject on the screen .EXAMPLE Get-SQLBitsSchedule -Output html -Show Gets the SQLBits Schedule from the Sessionize API and outputs to html, opens the file and saves it to the default temp directory .NOTES Author: Rob Sewell December 2022 #> function Get-SQLBitsSchedule { [CmdletBinding()] param ( [Parameter()] [ValidateSet('raw', 'excel', 'object', 'csv', 'html')] $Output = 'excel', [string] $fileDirectory = $env:TEMP, [switch] $Show ) $BaseUri = 'https://sessionize.com/api/v2/u1qovn3p/view' $Date = Get-Date -Format 'yyyy-MM-dd-HH-mm-ss' #TODO Add other opttions $filter = 'Schedule' switch ($filter) { 'All' { $uri = '{0}/All' -f $BaseUri } 'Schedule' { $uri = '{0}/All' -f $BaseUri } 'Sessions' { $uri = '{0}/sessions' -f $BaseUri } 'Speakers' { $uri = '{0}/speakers' -f $BaseUri } Default { $uri = '{0}/All' -f $BaseUri } } $Data = Invoke-RestMethod -Uri $uri $rooms = ($data.rooms | Sort-Object name) $Speakers = $data.speakers # Thank you Shane - https://nocolumnname.blog/2020/10/29/pivot-in-powershell/ $props = @( @{ Name = 'Day' ; Expression = { $Psitem.Group[0].startsAt.DayOfWeek } } @{ Name = 'Date' ; Expression = { $Psitem.Group[0].startsAt.tolongdatestring() } } @{ Name = 'StartTime' ; Expression = { $Psitem.Group[0].startsAt.ToShortTimeString() } } @{ Name = 'EndTime' ; Expression = { $Psitem.Group[0].EndsAt.ToShortTimeString() } } foreach ($room in $rooms) { $rn = $room.Name @{ Name = $rn Expression = { '{0} {1}' -f @( ($Psitem.Group | Where-Object { $PSItem.roomID -eq $room.id }).title, (($Psitem.Group | Where-Object { $PSItem.roomID -eq $room.id }).Speakers.ForEach{ $Speakers | Where-Object id -EQ $_ }.FullName -join ' ') ) }.GetNewClosure() } } ) $sessions = $Data.sessions | Group-Object -Property StartsAt | Select-Object $props switch ($output) { 'Raw' { $Data } 'object' { $sessions } 'Excel' { if (Get-Module -Name ImportExcel -ErrorAction SilentlyContinue -ListAvailable) { if ($filter -eq 'Schedule') { $FilePath = '{0}\SQLBitsSchedule{1}_{2}.xlsx' -f $fileDirectory, $filter, $Date $sessions | Group-Object Day | ForEach-Object { $worksheetName = $_.Name $excel = $_.Group | Export-Excel -Path $FilePath -WorksheetName $worksheetName -AutoSize -FreezePane 2, 5 -PassThru 1..15 | ForEach-Object { Set-ExcelRow -ExcelPackage $excel -WorksheetName $worksheetName -Row $_ -Height 30 -WrapText } $rulesparam = @{ Address = $excel.Workbook.Worksheets[$WorkSheetName].Dimension.Address WorkSheet = $excel.Workbook.Worksheets[$WorkSheetName] } Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Coffee Break",$E1)))' -BackgroundColor GoldenRod -ForegroundColor White -StopIfTrue Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Quick Break",$E1)))' -BackgroundColor GoldenRod -ForegroundColor White -StopIfTrue Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Keynote",$E1)))' -BackgroundColor BlueViolet -ForegroundColor White -StopIfTrue Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Lunch",$E1)))' -BackgroundColor Chocolate -ForegroundColor White -StopIfTrue Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Prize",$E1)))' -BackgroundColor PowderBlue -ForegroundColor White -StopIfTrue Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Free Time",$E1)))' -BackgroundColor GoldenRod -ForegroundColor White -StopIfTrue Add-ConditionalFormatting @rulesparam -RuleType 'Expression' -ConditionValue 'NOT(ISERROR(FIND("Registration",$E1)))' -BackgroundColor DarkOrange -ForegroundColor White -StopIfTrue Close-ExcelPackage $excel } if ($Show) { Invoke-Item $filepath } } } else { Write-Warning 'You need to install ImportExcel to use this option but here is a CSV instead' $FilePath = '{0}\SQLBits_{1}_{2}.csv' -f $fileDirectory, $filter, $Date $sessions | Sort-Object Day, StartsAt | Export-Csv -Path $FilePath -NoTypeInformation if ($Show) { Invoke-Item $filepath } } } 'CSv' { $FilePath = '{0}\SQLBits_{1}_{2}.csv' -f $fileDirectory, $filter, $Date $sessions | Sort-Object Day, StartsAt | Export-Csv -Path $FilePath -NoTypeInformation if ($Show) { Invoke-Item $filepath } } 'html' { $FilePath = '{0}\SQLBits_{1}_{2}.html' -f $fileDirectory, $filter, $Date $sessions | ConvertTo-Html | out-file $FilePath if ($Show) { Invoke-Item $filepath } } Default { } } } # Get-SQLBitsSchedule -Output Excel -Show # Get-SQLBitsSchedule -Output Raw # Get-SQLBitsSchedule -Output csv -Show # Get-SQLBitsSchedule -Output object # Get-SQLBitsSchedule -Output html -Show <#PSScriptInfo .VERSION 1.0 .GUID e62af2ed-ff2b-4094-8c3f-9a1e6b4fde1b .AUTHOR Rob Sewell blog.robsewell.com .COMPANYNAME Sewells Consulting .COPYRIGHT .TAGS SQLBits, SChedule, Data Platform .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .PRIVATEDATA .DESCRIPTION Gets the SQLBits Schedule from the Sessionize API and outputs to json, excel, psobject, html or csv #> |