Thanks to my employer Equinox Limited , I was able to attend my 5th Microsoft Ignite 2016 (previously known as Microsoft TechEd) conference up here in Auckland. Every TechEd / Ignite conference that I have attended had some unique flavour it dished out to all of its delegates every year, and this year was no exception, but deep down I felt there was something missing. Don’t get me wrong here, the “missing” part was not a bad thing, it was rather the new focus or vision that Microsoft today wants its consumers, partners to embrace. Let me explain.

Back in the days, TechEd’s were always highlighting new products, new versions of server or a product, but not this year. Yep Windows Server 2016 and System Center 2016 went GA (Generally Available)/RTM (Release to Manufacture) but not with the fanfare that its predecessors have got to enjoy.

Microsoft has this new approach to how products or rather functionality gets introduced to the market place today. Consumers and partners are in the front row of anything new coming out of the Microsoft factory floor and this provides everyone a first-hand experience and ability to provide that perspective and very valuable feedback from a products infancy to RTM or GA phase. Partners such as us and consumers get to plan ahead and truly adopt an agile methodology to our planning and provide solutions that are not only future proofed and able to provide our customers to focus on their Business and consumers and not worry about IT.

Microsoft and its team had the following theme for this year’s Ignite

“The Art of the Possible”

As Microsoft CEO Satya Nadella clearly states “Our Industry does not respect tradition, it only respects innovation” and that was clearly evident from the Keynote and all through the different sessions.

I focused on sessions from the following streams: Azure, Office 365, Identity and DevOps. The speakers were just truly brilliant and even if I knew the technology or reasoning behind some of the sessions I attended, for me there were several takeaways:

  1. How does one of my peers view the same Solutions / Technology that I am involved with.
  2. The “Aha” and the “Gotcha” moments that I had in almost all the sessions I attended.
  3. Ability to connect with some of the experts in the field and get their viewpoint / suggestions on my queries.

That being said if I had to summarise all the sessions that I attended into a few points:

  1. Keynote
  • Xamarin – Cross platform App development made super easy and now baked into Visual Studio
  • Bots – Ability to get tasks done, query in a cognitive manner.
  • Cognitive Services – Machine Learning and Data Services – the demo’s are truly inspiring and innovative.
  • DevOps – by Donovan L Brown
  • Devices – Surface Hub and IoT
  • Message from Dona Sarkar who heads the Windows Insider Programme
  1. Azure, Office 365 and Identity
  • A lot of emphasis on building innovative solutions for transforming your business using these technologies, rather than “Lift and Shift” model which in my opinion only shifts broken technologies from one DC to another.
  • Platform evolution is happening at unprecedented levels both from functionality and fit for consumption perspective that Speakers often joked that their session might be invalid or outdated by next day.
  • Identity, Identity and Identity – the sessions and I couldn’t emphasize enough on why organizations no matter their size should seize the various offerings out of Office 365 with its back end in Azure around Security, Identity Access Management and Device Management.
  • Tools such as ASR and various improvements within SQL migration toolsets help broaden the opportunities for organizations to move their core business applications onto Azure.
  • Common toolsets for both Development and Operations teams help organizations with their DevOps journey. It’s not just a new buzzword. Ex-clients of mine whom I met throughout the conference vouched how they feel energised and seeing changes within their own teams by taking small concrete steps into bringing DevOps methodology and culture internally.
  • Great insights into Collaboration, productivity and security within the Office 365 stack.
  • Enterprise Mobility+ Security made its presence in various sessions.

Dona Sarkar, who leads probably one of the world’s largest community driven programmes, Windows Insider Programme, was one of my favourite speakers and gave us the following to think about innovating yourself to build something:

  1. Make Room (Inside your head, around you)
  2. Stalk the experts
  3. Create the thing!!
  4. Hustle the humans.

As with all Ignites, it was a chance to meet old mates, old clients and share “War” stories. This time around got to meet Seth Juarez , Rick Claus and the Channel 9 team that produces such awesome content from around the world and makes it much easier to get to know what’s happening and what’s coming next. Also check out an old twitter mate of mine (6 odd years and we met for the first time in person) Ken Thompson . If Open Source and Azure comes in the same sentence you want to be talking to this dude. Also thanks to Regan and Microsoft NZ for all their effort towards the 21st Ignite/TechEd Conference. No small feat!

Vlad Catrinescu is a SharePoint and Office 365 MVP and also a Pluralsight Author. You can find him on Twitter and on his Blog . He has written an awesome PowerShell script which has been around for the last few Ignites, wherein which you can download the Sessions, slides and videos from Channel 9 for Offline Browsing. I have used the same script by editing it to download the New Zealand Ignite 2016 Sessions.

Usage:

First, make sure to change the $downloadlocation variable. By default it saves it all in C:\Ignite

  • To download all sessions just run the script!

1
.\ DownloadIgnite2016Content
  • To download sessions based on a keyword use the keyword parameters, and divide keywords by a comma. Make sure to use quotes around the keywords! EX:
1
.\ DownloadIgnite2016Content -keyword "Groups,PowerApps,Flow"
  • To download sessions based on the session code, use the session parameter and divide sessions by a comma. Make sure to use quotes around the session codes!
1
.\DownloadIgnite2016Content -session "BRK3038,BRK3080,BRK1009"

Script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
#Script written by Vlad Catrinescu

#Visit my site www.absolute-sharepoint.com

#Twitter: @vladcatrinescu

#Originally Posted here: https://absolute-sharepoint.com/2016/10/the-ultimate-script-to-download-microsoft-ignite-2016-videos-and-slides

#Edited by Aben Samuel (@neop26) to download the New Zealand Ignite 2016 Content

Param(

[string]$keyword,[string]$session

)

###### Variables #####

#Location - Preferably enter something not too long to not have filename problems! cut and paste them afterwards

$downloadlocation = "C:\Ig"

#Ignite 2016 Videos RSS Feed

[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath

$rss = (new-object net.webclient)

$video1 = ([xml]$rss.downloadstring("http://s.ch9.ms/events/ignite/New-Zealand-2016/rss/mp4high"))

$video2 = ([xml]$rss.downloadstring("http://s.ch9.ms/events/ignite/New-Zealand-2016/rss/mp4high?page=2"))

#other qualities for the videos only. Uncomment below and delete the two previous lines to download Mid Quality videos

#$video1 = ([xml]$rss.downloadstring("http://s.ch9.ms/events/ignite/New-Zealand-2016/rss/mp4"))

#$video2 = ([xml]$rss.downloadstring("http://s.ch9.ms/events/ignite/New-Zealand-2016/rss/mp4?page=2"))

$slide1 = ([xml]$rss.downloadstring("http://s.ch9.ms/events/ignite/New-Zealand-2016/rss/slides"))

$slide2 = ([xml]$rss.downloadstring("http://s.ch9.ms/events/ignite/New-Zealand-2016/rss/slides?page=2"))

#SCRIPT/ Functions Do not touch below this line :)#

if (-not (Test-Path $downloadlocation)) {

Write-Host "Folder $fpath dosen't exist. Creating it..."

New-Item $downloadlocation -type directory | Out-Null

}

set-location $downloadlocation

function CleanFilename($filename)

{

return $filename.Replace(":", "-").Replace("?", "").Replace("/", "-").Replace("<", "").Replace("|", "").Replace('"',"").Replace("*","")

}

function DownloadSlides($filter,$videourl)

{

try

{

$videourl.rss.channel.item | Where{($_.title -like "*$filter*") -or ($_.link -like "*/$filter")} |

foreach {

$code = $_.comments.split("/") | select -last 1

# Grab the URL for the PPTX file

$urlpptx = New-Object System.Uri($_.enclosure.url)

$filepptx = $code + "-" + $_.creator + "-" + (CleanFileName($_.title))

$filepptx = $filepptx.substring(0, [System.Math]::Min(120, $filepptx.Length))

$filepptx = $filepptx.trim()

$filepptx = $filepptx + ".pptx"

if ($code -ne "")

{

$folder = $code + " - " + (CleanFileName($_.title))

$folder = $folder.substring(0, [System.Math]::Min(100, $folder.Length))

$folder = $folder.trim()

}

else

{

$folder = "NoCodeSessions"

}

if (-not (Test-Path $folder)) {

Write-Host "Folder $folder dosen't exist. Creating it..."

New-Item $folder -type directory | Out-Null

}

# Make sure the PowerPoint file doesn't already exist

if (!(test-path "$downloadlocation\$folder\$filepptx"))

{

# Echo out the file that's being downloaded

write-host "Downloading slides: $filepptx"

#$wc = (New-Object System.Net.WebClient)

# Download the MP4 file

#$wc.DownloadFile($urlpptx, "$downloadlocation\$filepptx")

Start-BitsTransfer $urlpptx "$downloadlocation\$filepptx" -DisplayName $filepptx

mv $filepptx $folder

}

else

{

write-host "Slides exist: $filepptx"

}

}

}

catch

{

$ErrorMessage = $_.Exception.Message

Write-host "$ErrorMessage"

}

}

function DownloadVideos($filter,$slideurl)

{

#download all the mp4

# Walk through each item in the feed

$slideurl.rss.channel.item | Where{($_.title -like "*$filter*") -or ($_.link -like "*/$filter*")} | foreach{

$code = $_.comments.split("/") | select -last 1

# Grab the URL for the MP4 file

$url = New-Object System.Uri($_.enclosure.url)

# Create the local file name for the MP4 download

$file = $code + "-" + $_.creator + "-" + (CleanFileName($_.title))

$file = $file.substring(0, [System.Math]::Min(120, $file.Length))

$file = $file.trim()

$file = $file + ".mp4"

if ($code -ne "")

{

$folder = $code + " - " + (CleanFileName($_.title))

$folder = $folder.substring(0, [System.Math]::Min(100, $folder.Length))

$folder = $folder.trim()

}

else

{

$folder = "NoCodeSessions"

}

if (-not (Test-Path $folder)) {

Write-Host "Folder $folder) dosen't exist. Creating it..."

New-Item $folder -type directory | Out-Null

}

# Make sure the MP4 file doesn't already exist

if (!(test-path "$folder\$file"))

{

# Echo out the file that's being downloaded

write-host "Downloading video: $file"

#$wc = (New-Object System.Net.WebClient)

# Download the MP4 file

Start-BitsTransfer $url "$downloadlocation\$file" -DisplayName $file

mv $file $folder

}

else

{

write-host "Video exists: $file"

}

#text description from session

$OutFile = New-Item -type file "$($downloadlocation)\$($Folder)\$($Code.trim()).txt" -Force

$Category = "" ; $Content = ""

$_.category | foreach {$Category += $_ + ","}

$Content = $_.title.trim() + "`r`n" + $_.creator + "`r`n" + $_.summary.trim() + "`r`n" + "`r`n" + $Category.Substring(0,$Category.Length -1)

add-content $OutFile $Content

}

}

if ($keyword)

{

$keywords = $keyword.split(",")

foreach ($k in $keywords)

{

$k.trim()

Write-Host "You are now downloading the sessions with the keyword $k"

DownloadSlides $k $slide1

DownloadSlides $k $slide2

DownloadVideos $k $video1

DownloadVideos $k $video2

}

}

elseif ($session)

{

$sessions = $session.Split(",")

foreach ($s in $sessions)

{

$s.trim()

Write-Host "You are now downloading the session $s"

DownloadSlides $s $slide1

DownloadSlides $s $slide2

DownloadVideos $s $video1

DownloadVideos $s $video2

}

}

else

{

DownloadSlides " " $slide1

DownloadSlides " " $slide2

DownloadVideos " " $video1

DownloadVideos " " $video2

}

Download the PowerShell File downloadnewzealandignite2016content-ps1