All posts in SharePoint 2013

download Microsoft Ignite New Zealand

New Zealand’s largest, annual tech event returns in its 20th year to SKYCITY and Vector Arena from September 1 – 4. Previously known as TechEd NZ, this gathering of the brightest Kiwi techies has become Ignite NZ. If you couldn’t attend the event, and even if you could, you probably couldn’t attend all the great sessions available. That is why I created this PowerShell Script so everyone can easily download them whether they were present at Ignite or not! Here are the features:

  • Downloads all the Microsoft Ignite New Zealand 2015 Sessions and Slides
  • Groups them by folders
  • Makes sure no errors come up due to Illegal File names.
  • If you stop the script and restart in the middle, it will start where it left off and not from beginning
  • Filter by keywords in the session title!

*Total size of videos will be updated when conference finishes & all sessions will be posted online!

 

 

Download the script from here!  Do not copy paste from source code below!

How to use: 

  • To download all sessions just run the script! EX:

.\IgniteNZ2015VidandSlides.ps1

  • 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:

.\IgniteNZ2015VidandSlides.ps1 -keyword “SharePoint,Azure,System Center”

  • 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!

.\IgniteNZ2015VidandSlides.ps1 -session “M216,M258″

Here is the source code:


#Script written by Vlad Catrinescu
#Visit my site www.absolute-sharepoint.com
#Twitter: @vladcatrinescu
#Originally Posted here: http://absolute-sharepoint.com/2015/05/the-ultimate-script-to-download-microsoft-ignite-videos-and-slides.html
#Contributors: Dan Holme, Jeff Collins, Steve Beaugé 

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:\IgniteNZ2015"
#Ignite 2015 Videos RSS Feed
[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
$rss = (new-object net.webclient)
$video1 = ($rss.downloadstring("http://s.ch9.ms/events/ignite/Microsoft-Ignite-New-Zealand-2015/rss/mp4high"))
$slide1 = ($rss.downloadstring("https://channel9.msdn.com/Events/Ignite/Microsoft-Ignite-New-Zealand-2015/RSS/slides"))

#other qualities for the videos only. Choose the one you want!
# $a = ($rss.downloadstring("http://channel9.msdn.com/events/ignite/2015/rss/mp4"))
# $a = ($rss.downloadstring("http://channel9.msdn.com/events/ignite/2015/rss/mp3")) 

#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() + &quot;<code>r</code>n&quot; + $_.creator + &quot;<code>r</code>n&quot; + $_.summary.trim() + &quot;<code>r</code>n&quot; + &quot;<code>r</code>n&quot; + $Category.Substring(0,$Category.Length -1)
   add-content $OutFile $Content

	}
}

if ($keyword)
{
    $keywords = $keyword.split(&quot;,&quot;)

    foreach ($k in $keywords)
    {
        $k.trim()
        Write-Host &quot;You are now downloading the sessions with the keyword $k&quot;
        DownloadSlides $k $slide1
        DownloadVideos $k $video1
    }
}
elseif ($session)
{
    $sessions = $session.Split(&quot;,&quot;)

    foreach ($s in $sessions)
    {
        $s.trim()
        Write-Host &quot;You are now downloading the session $s&quot;
        DownloadSlides $s $slide1
        DownloadVideos $s $video1
    }

}
else
{
    DownloadSlides &quot; &quot; $slide1
    DownloadVideos &quot; &quot; $video1
}
No ratings yet.

Please rate this

InfoPath, everyone’s favorite forms-creation and data-gathering tool that helps organizations streamline business processes is now available as a standalone download on the Microsoft Download Center.

After it was doomed to be discontinued and replaced by an advanced FoSL solution, InfoPath won the battle and is currently the only out of the box Microsoft product to create and modify custom forms in SharePoint. If you want to read the whole story, check out this blog post: InfoPath is back in SharePoint 2016 & FoSL vNext is dead!

 

InfoPath 2013 Standalone

Since InfoPath 2013 is the last version of InfoPath, it will not be included in the Office 2016 suite as it was previously. So, Microsoft just posted the standalone version of the product on the Microsoft Download Center. One important thing to note is:

“The download and use of InfoPath 2013 software requires an active Office 365 ProPlus subscription.”

So, if you want to use InfoPath 2013 with Office 2016, you will need to have an active ProPlus subscription on Office 365, and not just the Office 2016 license. I did not test to see if this policy is enforced, but if anyone does, please tell me in the comments!

Here is the download link for the InfoPath 2013 for Office 365 ProPlus Subscription standalone client: https://www.microsoft.com/en-us/download/details.aspx?id=48734

Share this blog post with your followers on twitter by clicking the birdie below!

Leave a comment and don’t forget to like the Absolute SharePoint Blog Page   on Facebook and to follow me on Twitter here  for the latest news and technical articles on SharePoint.  I am also a Pluralsight author, and you can view all the courses I created on my author page.

No ratings yet.

Please rate this

If you are using the Yammer app in SharePoint 2013 or SharePoint Online, remember that you have 1 month left before the Yammer App stops working!

Yammer app

This isn’t exactly news, as this was announced in March on the Yammer IT Pro Network, however it’s a good reminder that if you are still using the Yammer App, better switch to Yammer Embed as soon as possible! The Web Part for SharePoint 2010 will also be killed on March 15th 2016, but there will be no replacement for it. Here is the timeline from the Yammer Announcement:

  • The Yammer App for SharePoint 2013 on-premises and SharePoint Online will be discontinued on September 15th, 2015. On this date, the App will stop working completely, and will no longer be supported. Customers on SharePoint 2013 or SharePoint Online must migrate to Yammer Embed, our single solution to embed Yammer feeds going forward, as soon as possible. Please read this step-by-step guide to move to Yammer Embed.
  • The Yammer Web Part for SharePoint 2010 will be discontinued on March 15th, 2016. On this date, the Web Part will stop working completely, and will no longer be supported. Only SharePoint Online, SharePoint Server 2013, or the upcoming SharePoint Server 2016 release will support Yammer Embed from that point on.

This leaves me wondering, what will the integration between Yammer and SharePoint look like in SharePoint 2016? Read my blog post for What you need to know about SharePoint 2016 Preview !

Leave a comment and don’t forget to like the Absolute SharePoint Blog Page  on Facebook and to follow me on Twitter here  for the latest news and technical articles on SharePoint.  Also, don’t forget to check out SharePoint Community.Net for more great SharePoint Content.

No ratings yet.

Please rate this

Harmon.ie just released a comprehensive Industry report on the Microsoft Office 365 Opportunities and Challenges for Microsofrt Partners. I am happy to have been one of the reviews of this report together with other MVP’s and Influencers such as Benjamin Niaulin, Todd Baginski and Patrick Hosch!

Office 365 Opportunities and Challenges

Here are the top-level findings – more than 190 Microsoft partners, including SIs, IT outsourcing services and VARs, shared their take on opportunities and uncertainties they face in Microsoft’s move to the mobile cloud:

  • End-user adoption of the Microsoft cloud is increasing rapidly
  • Email leads the cloud charge, with social and collaboration tools trailing — cloud innovation lags behind cost-cutting for now
  • SharePoint is stuck on-premise, making hybrid expertise crucial
  • Security and migration concerns linger for both partners and their customers
  • Microsoft partners are embracing a best-of-breed, multi-cloud consulting model, indicating the need for new skills and revenue streams in the cloud

 

Download the comprehensive report, which includes detailed analysis, stats and findings, here: https://pages.harmon.ie/Microsoft-Partner-Survey-2015.html

No ratings yet.

Please rate this

I am excited to announce that I have just finished my first PluralSight course on Office Web Apps 2013! Office Web Apps Server is a new Office server product that delivers browser-based versions of Word, PowerPoint, Excel, and OneNote. In this course, you will learn what exactly Office Web Apps 2013 is, how it works and how you can install and connect it with Exchange, Lync, and SharePoint.

This course is aimed at the SharePoint, Exchange, Lync or general SysAdmin who needs to install, configure and maintain Office Web Apps in their organization. However, the first module is for everyone, as it is only an introduction to Office Web Apps and the demo at the end showcases all the features Office Web Apps has to offer.

Why did I choose Office Web Apps? I think it’s a technology that not enough companies implement, and the benefits it has vs the costs are amazing! Last year, I did a presentation at five SharePoint Saturdays about connecting Lync, Exchange, SharePoint and Office Web Apps together. The feedback I got is that no one really knew all the benefits that Office Web Apps added to SharePoint. For example, the ability to preview documents and view complete Office documents directly in the SharePoint Search page!

Deploying Office Web Apps 2013

There are many other features available in SharePoint, as well as amazing features in Exchange and Lync! You can view the course over here: http://www.pluralsight.com/courses/deploying-office-web-apps-2013

Enjoy and for any questions, do not hesitate to use either comments on my blog, discussions on the PluralSight course or send me a tweet @vladcatrinescu

5/5 (22)

Please rate this

The Ultimate script to download Ignite sessions that I posted earlier this week was pretty popular, and some fellow community members asked for the same script for the Microsoft Build Conference earlier this year. That is why I created this PowerShell Script so everyone can easily download them whether they were present at Build or not! Here are the features:download Build Session Videos

  • Downloads all the Microsoft Build Conference Sessions and Slides
  • Groups them by folders
  • Makes sure no errors come up due to Illegal File names.
  • If you stop the script and restart in the middle, it will start where it left off and not from beginning

This is what it will look like at the end:

download Build Session Videos

*I will update total size of downloads in the following week!

Here is the script if you want to see the code, however my WordPress plugin breaks some PowerShell, so DO NOT copy it from my blog, instead download it from Technet galleries here

Make sure you send it out to all your twitter friends by clicking the image below!

Download the script from here!  Do not copy paste from below!

Here is the source code:


[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
$rss = (new-object net.webclient)

# Grab the RSS feed for the MP4 downloads

# SharePoint Conference 2014 Videos
$a = ($rss.downloadstring(&quot;http://s.ch9.ms/events/build/2015/rss/mp4high&quot;))
$b = ($rss.downloadstring(&quot;http://s.ch9.ms/events/build/2015/rss/slides&quot;)) 

#other qualities for the videos only. Choose the one you want!
# $a = ($rss.downloadstring(&quot;http://s.ch9.ms/events/build/2015/rss/mp4&quot;))
#$a = ($rss.downloadstring(&quot;http://s.ch9.ms/events/build/2015/rss/mp3&quot;)) 

#Preferably enter something not too long to not have filename problems! cut and paste them afterwards
$downloadlocation = &quot;C:\Build&quot;

	if (-not (Test-Path $downloadlocation)) {
		Write-Host &quot;Folder $fpath dosen't exist. Creating it...&quot;
		New-Item $downloadlocation -type directory
	}
set-location $downloadlocation

#Download all the slides
try { 

$b.rss.channel.item | foreach{
	$code = $_.comments.split(&quot;/&quot;) | select -last 1	   

	# Grab the URL for the PPTX file
	$urlpptx = New-Object System.Uri($_.enclosure.url)
    $filepptx = $code + &quot;-&quot; + $_.creator + &quot; - &quot; + $_.title.Replace(&quot;:&quot;, &quot;-&quot;).Replace(&quot;?&quot;, &quot;&quot;).Replace(&quot;/&quot;, &quot;-&quot;).Replace(&quot;&lt;&quot;, &quot;&quot;).Replace(&quot;|&quot;, &quot;&quot;).Replace('&quot;',&quot;&quot;).Replace(&quot;*&quot;,&quot;&quot;)
	$filepptx = $filepptx.substring(0, [System.Math]::Min(120, $filepptx.Length))
	$filepptx = $filepptx.trim()
	$filepptx = $filepptx + &quot;.pptx&quot;
	if ($code -ne &quot;&quot;)
	{
		 $folder = $code + &quot; - &quot; + $_.title.Replace(&quot;:&quot;, &quot;-&quot;).Replace(&quot;?&quot;, &quot;&quot;).Replace(&quot;/&quot;, &quot;-&quot;).Replace(&quot;&lt;&quot;, &quot;&quot;).Replace(&quot;|&quot;, &quot;&quot;).Replace('&quot;',&quot;&quot;).Replace(&quot;*&quot;,&quot;&quot;)
		 $folder = $folder.substring(0, [System.Math]::Min(100, $folder.Length))
		 $folder = $folder.trim()
	}
	else
	{
		$folder = &quot;NoCodeSessions&quot;
	}

	if (-not (Test-Path $folder)) {
		Write-Host &quot;Folder $folder dosen't exist. Creating it...&quot;
		New-Item $folder -type directory
	}

	# Make sure the PowerPoint file doesn't already exist
	if (!(test-path &quot;$downloadlocation\$folder\$filepptx&quot;))
	{
		# Echo out the  file that's being downloaded
		$filepptx
		$wc = (New-Object System.Net.WebClient)  

		# Download the MP4 file
		$wc.DownloadFile($urlpptx, &quot;$downloadlocation\$filepptx&quot;)
		mv $filepptx $folder 

	}
	}

}
catch
{
Write-host &quot;Slides are not yet up. Run this script every day to get the latest updates&quot;
}

#download all the mp4

# Walk through each item in the feed
$a.rss.channel.item | foreach{
	$code = $_.comments.split(&quot;/&quot;) | 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 + &quot;-&quot; + $_.creator + &quot;-&quot; + $_.title.Replace(&quot;:&quot;, &quot;-&quot;).Replace(&quot;?&quot;, &quot;&quot;).Replace(&quot;/&quot;, &quot;-&quot;).Replace(&quot;&lt;&quot;, &quot;&quot;).Replace(&quot;|&quot;, &quot;&quot;).Replace('&quot;',&quot;&quot;).Replace(&quot;*&quot;,&quot;&quot;)
	$file = $file.substring(0, [System.Math]::Min(120, $file.Length))
	$file = $file.trim()
	$file = $file + &quot;.mp4&quot;  

	if ($code -ne &quot;&quot;)
	{
		 $folder = $code + &quot; - &quot; + $_.title.Replace(&quot;:&quot;, &quot;-&quot;).Replace(&quot;?&quot;, &quot;&quot;).Replace(&quot;/&quot;, &quot;-&quot;).Replace(&quot;&lt;&quot;, &quot;&quot;).Replace(&quot;|&quot;, &quot;&quot;).Replace('&quot;',&quot;&quot;).Replace(&quot;*&quot;,&quot;&quot;)
		 $folder = $folder.substring(0, [System.Math]::Min(100, $folder.Length))
		 $folder = $folder.trim()
	}
	else
	{
		$folder = &quot;NoCodeSessions&quot;
	}

	if (-not (Test-Path $folder)) {
		Write-Host &quot;Folder $folder) dosen't exist. Creating it...&quot;
		New-Item $folder -type directory
	}

	# Make sure the MP4 file doesn't already exist

	if (!(test-path &quot;$folder\$file&quot;))
	{
		# Echo out the  file that's being downloaded
		$file
		$wc = (New-Object System.Net.WebClient)  

		# Download the MP4 file
		$wc.DownloadFile($url, &quot;$downloadlocation\$file&quot;)
		mv $file $folder
	}

#text description from session
	$OutFile = New-Item -type file &quot;$($downloadlocation)\$($Folder)\$($Code.trim()).txt&quot; -Force
    $Category = &quot;&quot; ; $Content = &quot;&quot;
    $_.category | foreach {$Category += $_ + &quot;,&quot;}
    $Content = $_.title.trim() + &quot;<code>r</code>n&quot; + $_.creator + &quot;<code>r</code>n&quot; + $_.summary.trim() + &quot;<code>r</code>n&quot; + &quot;<code>r</code>n&quot; + $Category.Substring(0,$Category.Length -1)
   add-content $OutFile $Content

	}

Leave a comment and don’t forget to like the Absolute SharePoint Blog Page  on Facebook and to follow me on Twitter here  for the latest news and technical articles on SharePoint.  Also, don’t forget to check out SharePoint Community.Net for more great SharePoint Content.

No ratings yet.

Please rate this

 With the amount of great sessions at Ignite this year, there is no way you could have attended all, and even if they are posted on Channel9, you might want to download them to be able to view them offline! That is why I created this PowerShell Script so everyone can easily download Microsoft Ignite Videos AND slides whether they were present at Ignite or not! Here are the features:

download Microsoft Ignite Videos and Content

  • Downloads all the Microsoft Ignite 2015 Sessions and Slides (Note: Slides are not posted yet, but the script will download them as soon as they are)
  • Groups them by folders
  • Makes sure no errors come up due to Illegal File names.
  • If you stop the script and restart in the middle, it will start where it left off and not from beginning
  • *NEW* (11/05/2015) You can now filter by keywords in the session title!
  • *NEW* (12/05/2015) Channel9 session blocks are limited to 400 sessions, and I changed the script to download the rest! Now all 680 sessions are downloaded!
  • *NEW* (15/05/2015) Changed the WebClient download protocol to Start-Bits in order to show download progress. Added ability to filter by session code. Cleaned up script so the code & output looks better! (Thank you Dan Holme and Steve Beauge) . As a blogger, you can send your readers to download the sessions you recommend. Just tell them to use the script, and the parameter -session “Code1, Code2, Code3”

Sessions and Slides are put into folders

Download Microsoft Ignite Videos

You can now filter downloads by session code!

Download Microsoft Ignite videos PowerShell

Progress Bar

Total size of sessions is about 292GB! But sessions are still being uploaded, so might increase in the future!

 

In this blog you will see the source code of he script, however my WordPress plugin sometimes breaks some PowerShell, so DO NOT copy it from my blog,

Thanks to Jeff Collins for helping me out with the script during Ignite! Make sure you send it out to all your twitter friends by clicking the image below!

 

Download the script from here!  Do not copy paste from below!

How to use: 

  • To download all sessions just run the script! EX:

.\DownloadIgnitevideosandslidesv4.ps1 

  • 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:

.\DownloadIgnitevideosandslidesv4..ps1 -keyword “SharePoint,Azure,System Center

  • 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!

.\downloadignitevideosandslidesv4.ps1 -session “BRK1106,BRK1107,BRK4552”

Here is the source code:

#Script written by Vlad Catrinescu
#Visit my site www.absolute-sharepoint.com
#Twitter: @vladcatrinescu
#Originally Posted here: http://absolute-sharepoint.com/2015/05/the-ultimate-script-to-download-microsoft-ignite-videos-and-slides.html
#Contributors: Dan Holme, Jeff Collins, Steve Beaugé 

Param(
  [string]$keyword,[string]$session
)

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

#Location - Preferably enter something not too long to not have filename problems! cut and paste them afterwards
$downloadlocation = &quot;C:\Ignite&quot;
#Ignite 2015 Videos RSS Feed
[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
$rss = (new-object net.webclient)
$video1 = ($rss.downloadstring(&quot;http://s.ch9.ms/events/ignite/2015/rss/mp4high&quot;))
$video2 = ($rss.downloadstring(&quot;http://s.ch9.ms/events/ignite/2015/rss/mp4high?page=2&quot;))
$slide1 = ($rss.downloadstring(&quot;http://s.ch9.ms/events/ignite/2015/rss/slides&quot;))
$slide2 = ($rss.downloadstring(&quot;http://s.ch9.ms/events/ignite/2015/rss/slides?page=2&quot;))

#other qualities for the videos only. Choose the one you want!
# $a = ($rss.downloadstring(&quot;http://channel9.msdn.com/events/ignite/2015/rss/mp4&quot;))
# $a = ($rss.downloadstring(&quot;http://channel9.msdn.com/events/ignite/2015/rss/mp3&quot;)) 

#SCRIPT/ Functions  Do not touch below this line :)#
if (-not (Test-Path $downloadlocation)) {
		Write-Host &quot;Folder $fpath dosen't exist. Creating it...&quot;
		New-Item $downloadlocation -type directory | Out-Null
	}
set-location $downloadlocation

function CleanFilename($filename)
{
    return $filename.Replace(&quot;:&quot;, &quot;-&quot;).Replace(&quot;?&quot;, &quot;&quot;).Replace(&quot;/&quot;, &quot;-&quot;).Replace(&quot;&lt;&quot;, &quot;&quot;).Replace(&quot;|&quot;, &quot;&quot;).Replace('&quot;',&quot;&quot;).Replace(&quot;*&quot;,&quot;&quot;)
}

function DownloadSlides($filter,$videourl)
{
    try
    {
        $videourl.rss.channel.item | Where{($_.title -like “*$filter*”) -or ($_.link -like &quot;*/$filter&quot;)} |
        foreach {
	        $code = $_.comments.split(&quot;/&quot;) | select -last 1	   

	        # Grab the URL for the PPTX file
	        $urlpptx = New-Object System.Uri($_.enclosure.url)
            $filepptx = $code + &quot;-&quot; + $_.creator + &quot;-&quot; + (CleanFileName($_.title))
	        $filepptx = $filepptx.substring(0, [System.Math]::Min(120, $filepptx.Length))
	        $filepptx = $filepptx.trim()
	        $filepptx = $filepptx + &quot;.pptx&quot;
	        if ($code -ne &quot;&quot;)
	        {
		         $folder = $code + &quot; - &quot; + (CleanFileName($_.title))
		         $folder = $folder.substring(0, [System.Math]::Min(100, $folder.Length))
		         $folder = $folder.trim()
	        }
	        else
	        {
		        $folder = &quot;NoCodeSessions&quot;
	        }

	        if (-not (Test-Path $folder)) {
		        Write-Host &quot;Folder $folder dosen't exist. Creating it...&quot;
		        New-Item $folder -type directory | Out-Null
	        }

	        # Make sure the PowerPoint file doesn't already exist
	        if (!(test-path &quot;$downloadlocation\$folder\$filepptx&quot;))
	        {
		        # Echo out the  file that's being downloaded
		        write-host &quot;Downloading slides: $filepptx&quot;
		        #$wc = (New-Object System.Net.WebClient)  

		        # Download the MP4 file
		        #$wc.DownloadFile($urlpptx, &quot;$downloadlocation\$filepptx&quot;)
                Start-BitsTransfer $urlpptx &quot;$downloadlocation\$filepptx&quot; -DisplayName $filepptx
		        mv $filepptx $folder 

	        }
            else
            {
   		        write-host &quot;Slides exist: $filepptx&quot;
            }
	    }

     }

    catch
    {
        $ErrorMessage = $_.Exception.Message
        Write-host &quot;$ErrorMessage&quot;
    }
}

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 &quot;*/$filter*&quot;)} | foreach{
	$code = $_.comments.split(&quot;/&quot;) | 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 + &quot;-&quot; + $_.creator + &quot;-&quot; + (CleanFileName($_.title))
	$file = $file.substring(0, [System.Math]::Min(120, $file.Length))
	$file = $file.trim()
	$file = $file + &quot;.mp4&quot;  

	if ($code -ne &quot;&quot;)
	{
		 $folder = $code + &quot; - &quot; + (CleanFileName($_.title))
		 $folder = $folder.substring(0, [System.Math]::Min(100, $folder.Length))
		 $folder = $folder.trim()
	}
	else
	{
		$folder = &quot;NoCodeSessions&quot;
	}

	if (-not (Test-Path $folder)) {
		Write-Host &quot;Folder $folder) dosen't exist. Creating it...&quot;
		New-Item $folder -type directory | Out-Null
	}

	# Make sure the MP4 file doesn't already exist

	if (!(test-path &quot;$folder\$file&quot;))
	{
		# Echo out the  file that's being downloaded
		write-host &quot;Downloading video: $file&quot;
		#$wc = (New-Object System.Net.WebClient)  

		# Download the MP4 file
		Start-BitsTransfer $url &quot;$downloadlocation\$file&quot; -DisplayName $file
		mv $file $folder
	}
    else
    {
   		write-host &quot;Video exists: $file&quot;
    }

#text description from session
	$OutFile = New-Item -type file &quot;$($downloadlocation)\$($Folder)\$($Code.trim()).txt&quot; -Force
    $Category = &quot;&quot; ; $Content = &quot;&quot;
    $_.category | foreach {$Category += $_ + &quot;,&quot;}
    $Content = $_.title.trim() + &quot;<code>r</code>n&quot; + $_.creator + &quot;<code>r</code>n&quot; + $_.summary.trim() + &quot;<code>r</code>n&quot; + &quot;<code>r</code>n&quot; + $Category.Substring(0,$Category.Length -1)
   add-content $OutFile $Content

	}
}

if ($keyword)
{
    $keywords = $keyword.split(&quot;,&quot;)

    foreach ($k in $keywords)
    {
        $k.trim()
        Write-Host &quot;You are now downloading the sessions with the keyword $k&quot;
        DownloadSlides $k $slide1
        DownloadSlides $k $slide2
        DownloadVideos $k $video1
        DownloadVideos $k $video2
    }
}
elseif ($session)
{
    $sessions = $session.Split(&quot;,&quot;)

    foreach ($s in $sessions)
    {
        $s.trim()
        Write-Host &quot;You are now downloading the session $s&quot;
        DownloadSlides $s $slide1
        DownloadSlides $s $slide2
        DownloadVideos $s $video1
        DownloadVideos $s $video2
    }

}
else
{
    DownloadSlides &quot; &quot; $slide1
    DownloadSlides &quot; &quot; $slide2
    DownloadVideos &quot; &quot; $video1
    DownloadVideos &quot; &quot; $video2
}

No ratings yet.

Please rate this

While working at a client on a Windows Server 2012R2 environment to create some PowerShell scripts, I had to change the Execution Policy, however running the “Set-ExecutionPolicy Unrestricted” command gave me the following error.

the setting is overridden by a policy defined at a more specific scope

Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type “Get-ExecutionPolicy -List” to view your execution policy settings. For more information please see “Get-Help Set-ExecutionPolicy”.

 

The error can be quite confusing, what I did see first see what are the possible “more specific scopes” I can give to my command. By running the following command:

Get-ExecutionPolicy –List

I was able to see my available scopes.

So now that I have them all, usually to run PowerShell scripts you need to work with the MachinePolicy. So, the command in order to change the MachinePolicy ExecutionPolicy is

Set-ExecutionPolicy -Scope MachinePolicy Unrestricted

However, you might have an error saying it can only be done via Group Policy.

“Set-ExecutionPolicy : Cannot set execution policy. Execution policies at the MachinePolicy or UserPolicy scopes mustbe set through Group Policy.

If you get that error, read the resolution in my blog post: Change the PowerShell MachinePolicy Execution Policy in Windows Server 2012R2.

 

Leave a comment and don’t forget to like the Absolute SharePoint Blog Page  on Facebook and to follow me on Twitter here  for the latest news and technical articles on SharePoint.  Also, don’t forget to check out SharePoint Community.Net for more great SharePoint Content.

No ratings yet.

Please rate this

At a client recently, I was tasked to create an inventory of all the Active Directory Groups that give access to a SharePoint site! I built it mostly from scratch, so here it is as well as some explanations to help you use it:

The Script:

function WriteLogs ($message) {
    $message | Out-File $logfile -append
}

$logfile = "C:\ADGroupInventory\grouplist.txt"
Write-Host "Starting Group Script inventory"
$was = Get-SPWebApplication

foreach ($wa in $was)
 {        
  $webappUrl = $wa.url
  Write-Host "Starting to look in $webappUrl"
  $spWebApp = Get-SPWebApplication $wa.url        
  foreach($site in $spWebApp.Sites)
  {
    $siteurl = $site.url
    Write-Host "Going into SiteCollection $siteurl"
    $group = $site.RootWeb.SiteUsers
    foreach ($grp in $group)
    {
     # Ensure the item is a domain group
     if($grp.IsDomainGroup -eq "True")
     {
      $groupname = $grp.name
      WriteLogs "$groupname"
     }
    }
  }    
 }

 

How to use it.

First of all, change the $logfile variable to a folder that exists to make sure the logs work. Second, in the Central Administration, give yourself "Full Control" in the Web Application User Policy. This will make sure that you won't have any access denied when you go through each and every site collection in your farm. Afterwards, open SharePoint Management Shell as an Administrator, and run the script. Depending of the size of you farm, it shouldn't take too long, and you should see progress of every site being scanned on the screen. At the end, you will have a text file looking like this:

Get all the Active Directory groups in your SharePoint Farm

You will notice in the screenshot that some group names are repeated, as well as some of them are in capital and some of them are lowercase. So, I used NotePad++ to get all the unique group names! First of all, go in Edit > Convert Case to > Upercase!

To get unique lines, you will need the TextFX plugin. This used to be included in older versions of Notepad++, but if you have a newer version, you can add it from the menu by going to Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. In some cases it may also be called TextFX Characters, but this is the same thing.

After the plugin is installed, go in TestFX Tools and check the "sort ascending" and "sort outputs only UNIQUE" lines. Afterwards, click the "Sort lines case insensitive at column". (make sure that you do Ctrl+a in the file to select all the lines before clicking).

 

Now, your Notepad++ will only show the unique group names in your SharePoint Farm!

 

 

Drop a comment if this helped!

Leave a comment and don't forget to like the Absolute SharePoint Blog Page  on Facebook and to follow me on Twitter here  for the latest news and technical articles on SharePoint.  Also, don't forget to check out SharePoint Community.Net for more great SharePoint Content.

4/5 (1)

Please rate this

Easily Compare Office 365 Plans

Categories: SharePoint 2013
Comments: 4

Last week I attended and spoke at an amazing new conference in Toronto called CollabCon. The organizing was great, speakers were amazing and attendees were really fun and engaging & I highly recommend that if you’re from Canada, you should attend the 2016 event. However, this is not what this blog post is aboutJ. While at the conference, Microsoft had a booth and they gave away a small pamphlet in which you could easily compare Office 365 plans. I found the pamphlet a lot easier to read and view the differences between plans than the web version which you can find here.

Here is what the pamphlet contains:

What is Office 365?

Compare Office 365 Plans

Office 365 for Small & Midsize Business

Compare Office 365 Plans

Enterprises & Non Profits

Compare Office 365 Plans

Government and Education

Compare Office 365 Plans

What do you think about this pamphlet? Do you find it more useful than the web version? Do you have a site where it’s easier to compare? Let me know in the comments!

To visit CollabCon click the logo below

To visit the web version of the O365 Plan Compare click the logo below

No ratings yet.

Please rate this