1
+ function Get-SQLBitsSchedule {
2
+ [CmdletBinding ()]
3
+ param (
4
+ # [Parameter()]
5
+ # [ValidateSet('All', 'Schedule', 'Sessions', 'Speakers')]
6
+ # $filter = 'Schedule',
7
+ # # How do you want it?
8
+ [Parameter ()]
9
+ [ValidateSet (' Raw' , ' Excel' )]
10
+ $Output = ' Raw'
11
+ )
12
+
13
+ $BaseUri = ' https://sessionize.com/api/v2/u1qovn3p/view'
14
+ $filter = ' Schedule'
15
+ switch ($filter ) {
16
+ ' All' {
17
+ $uri = ' {0}/All' -f $BaseUri
18
+ }
19
+ ' Schedule' {
20
+ $uri = ' {0}/All' -f $BaseUri
21
+ }
22
+ ' Sessions' {
23
+ $uri = ' {0}/sessions' -f $BaseUri
24
+ }
25
+ ' Speakers' {
26
+ $uri = ' {0}/speakers' -f $BaseUri
27
+ }
28
+ Default {
29
+ $uri = ' {0}/All' -f $BaseUri
30
+ }
31
+ }
32
+
33
+ $Data = Invoke-RestMethod - Uri $uri
34
+
35
+ switch ($output ) {
36
+ ' Raw' {
37
+ $Data
38
+ }
39
+ ' Excel' {
40
+ if (Get-Module - Name ImportExcel - ErrorAction SilentlyContinue - ListAvailable) {
41
+ if ($filter -eq ' Schedule' ) {
42
+ $rooms = ($data.rooms | Sort-Object name)
43
+ $Speakers = $data.speakers
44
+ # Thank you Shane - https://nocolumnname.blog/2020/10/29/pivot-in-powershell/
45
+ $props = @ (
46
+ @ { Name = ' Day' ; Expression = { $Psitem.Group [0 ].startsAt.DayOfWeek } }
47
+ @ { Name = ' Date' ; Expression = { $Psitem.Group [0 ].startsAt.tolongdatestring() } }
48
+ @ { Name = ' StartTime' ; Expression = { $Psitem.Group [0 ].startsAt.ToShortTimeString() } }
49
+ @ { Name = ' EndTime' ; Expression = { $Psitem.Group [0 ].EndsAt.ToShortTimeString() } }
50
+ foreach ($room in $rooms ) {
51
+ $rn = $room.Name
52
+ @ {
53
+ Name = $rn
54
+ Expression = {
55
+ ' {0}
56
+ {1}' -f @ (
57
+ ($Psitem.Group | Where-Object { $PSItem.roomID -eq $room.id }).title,
58
+ (($Psitem.Group | Where-Object { $PSItem.roomID -eq $room.id }).Speakers.ForEach{ $Speakers | Where-Object id -eq $_ }.FullName -join ' ' )
59
+ )
60
+
61
+ }.GetNewClosure()
62
+ }
63
+ }
64
+ )
65
+ $Date = Get-Date - Format ' yyyy-MM-dd-HH-mm-ss'
66
+ $FilePath = ' {0}\SQLBitsSchedule{1}_{2}.xlsx' -f $env: TEMP , $filter , $Date
67
+
68
+ $sessions = $Data.sessions | Group-Object - Property StartsAt | Select-Object $props
69
+
70
+ $sessions | Group-Object Day | ForEach-Object {
71
+
72
+ $worksheetName = $_.Name
73
+ $excel = $_.Group | Export-Excel - Path $FilePath - WorksheetName $worksheetName - AutoSize - FreezePane 2 , 5 - PassThru
74
+ 1 .. 15 | ForEach-Object {
75
+ Set-ExcelRow - ExcelPackage $excel - WorksheetName $worksheetName - Row $_ - Height 30 - WrapText
76
+ }
77
+
78
+
79
+ $rulesparam = @ {
80
+ Address = $excel.Workbook.Worksheets [$WorkSheetName ].Dimension.Address
81
+ WorkSheet = $excel.Workbook.Worksheets [$WorkSheetName ]
82
+ RuleType = ' Expression'
83
+ }
84
+
85
+ Add-ConditionalFormatting @rulesparam - ConditionValue ' "Break",$E1)))' - BackgroundColor PaleGreen - StopIfTrue
86
+ Add-ConditionalFormatting @rulesparam - ConditionValue ' NOT(ISERROR(FIND("Keynote",$E1)))' - BackgroundColor BlueViolet - StopIfTrue
87
+ Add-ConditionalFormatting @rulesparam - ConditionValue ' NOT(ISERROR(FIND("Lunch",$E1)))' - BackgroundColor Chocolate
88
+ Add-ConditionalFormatting @rulesparam - ConditionValue ' NOT(ISERROR(FIND("Prize",$E1)))' - BackgroundColor PowderBlue
89
+ Add-ConditionalFormatting @rulesparam - ConditionValue ' NOT(ISERROR(FIND("Free",$E1)))' - BackgroundColor GoldenRod
90
+ Add-ConditionalFormatting @rulesparam - ConditionValue ' NOT(ISERROR(FIND("Registration",$E1)))' - BackgroundColor DarkOrange
91
+
92
+ Close-ExcelPackage $excel
93
+ }
94
+ Invoke-Item $filepath
95
+ }
96
+
97
+ } else {
98
+ Write-Warning ' You need to install ImportExcel to use this option but here is a CSV instead'
99
+ $Data | Export-Csv - Path .\SQLBitsSchedule.csv - NoTypeInformation
100
+ }
101
+
102
+ }
103
+ Default {
104
+
105
+ }
106
+ }
107
+ }
108
+ Get-SQLBitsSchedule - Output Excel
109
+ <#
110
+ foreach ($day in $data[2]){
111
+ $Date = '{0} {1}' -f $day.date.DayOfWeek, $day.date.ToLongDateString()
112
+ $Schedule = ''
113
+
114
+ }
115
+
116
+ ($data.sessions | Group-Object startsat)[0]
117
+ v
118
+
119
+
120
+ $SortedSessions = foreach ($time in ($data.sessions | Group-Object startsat).Group){
121
+ $room = $data.rooms.where{$PsItem.id -eq $time.roomid}.name
122
+ [PSCustomObject]@{
123
+ startsat = $time.startsat
124
+ endsat = $time.endsat
125
+
126
+ $room = $time.title
127
+ }
128
+ }
129
+ $SortedSessions | Export-Excel -Path c:\temp\sess.xlsx -Show
130
+ #>
0 commit comments