As I wrote on Monday, the decision to begin removing already deprecated code-based sandbox solutions on SharePoint Online took many people by surprise. Even though the news about the deprecation has been out there since 2014, the abrupt move – especially during a time when many people are on summer vacation – caused consternation for some. Others welcomed the move, in essence saying “good riddance” to a model that never really reached maturity.
But what if you manage a tenant on Office 365 that might have code-based sandbox solutions? Maybe you’ve used outside vendors to build solutions for you and you’re not sure what techniques they have used. Or maybe your own team built some things a few years back, you’ve had some turnover, and you source control isn’t so great. (Not so unusual, frankly.) How do you know what you have and what to do about it? You certainly don’t want functionality your users actually need to stop working unexpectedly. Some of these solutions could be InfoPath forms with code-behind, for example.
Vesa Juvonen (@vesajuvonen) – one of my true Microsoft heroes for what he has done with the PnP set of tools – has come to the rescue, apparently with some help from Karine Bosch (@kboske). They have released a PowerShell script today that promises to “Generate [sic] list of sandbox solutions from SharePoint Online tenant“. (Far be it from me to correct Vesa’s Finglish!)
Generate list of sandbox solutions from SharePoint Online tenant
This script can be used to generate list of sandbox solutions in SharePoint Online tenant. You will need to use tenant administrator account to connect to SharePoint Online and script will generate a list of sandbox solutions to separate txt file, which can be imported to Excel for further analyses.
Note: This script is relatively simple and does not use multi-threading, so execution in larger tenants might take a while. We are looking for further enhancing the script with multi-threading support, if there’s demand for this. Also community contributions on this side are more than welcome.
Output file has following columns
- URL of the site collection
- Name of the sandbox solution
- Author field from the sandbox solution – who uploaded the file
- Created field from the sandbox solution – when solution was uploaded
- Status field – 1=Activated, 0=Not activated
What seems to be missing here – at least to me – is the “and this one contains ‘code'” indication, but it’s still going to be very useful. Maybe it’s not simple to tell which solutions contain code? If you have ideas about this, it’s an open source project, so head over there and enhance it!
IMPORTANT: Please note that this script lists ALL sandbox solutions. But only code-based sandbox solutions have been deprecated and are being removed from Office 365. So don’t panic when you see all of your no-code solutions and site templates listed. This is a first step in inventorying your solutions.
The script requires – not surprisingly – that you have the SharePoint Online cmdlets installed. My bet is that there are plenty of Office 365 customers that have never really figured out how to download, install, and use PowerShell against Office 365. Many tenants are run by business users rather than technical types, as befits a powerful SaaS offering. In fact, in many cases, IT doesn’t need to be involved at all. That said, one would hope that those tenant administrators would know whether they have sandbox solution installed. However, see my mention of possible situations above, even if IT was in charge.
Here’s a quick tutorial on how to install those cmdlets in case you need it. In writing this section, I’m stealing the TechNet article Connect to Office 365 PowerShell. (I fear this article may not be available to everyone, as TechNet is part of subscriptions? I’m not really sure.) To do this, you have to be a tenant administrator. If you are, you’re probably the one wondering what you have in any case. It’s a pretty painless process, but if you haven’t used PowerShell – think batch files for servers – then it might be intimidating. I’m just copying the instructions from TechNet here, but I’ll add in some graphics and additional comments over the course of the day, so come back if you have questions. If you want to add any tips, please do so in the comments.
As Vesa always says: Sharing is Caring!
- Find and open the Windows Azure Active Directory Module for Windows PowerShell by using one of the following methods based on your version of Windows:
- Start menu On the Start menu, enter Azure in the Search programs and files box.
- No Start menu Search for Azure using any of these methods:
- On the Start screen, click an empty area, and type Azure.
- On the desktop or the Start screen, press the Windows key+Q. In the Search charm, type Azure.
- On the desktop or the Start screen, move your cursor to the upper-right corner, or swipe left from the right edge of the screen to show the charms. Select the Search charm, and enter Azure.
- In the results, select Windows Azure Active Directory Module for Windows PowerShell.
Here’s what it looks like on my laptop running Windows 10
- In the Windows Azure Active Directory Module for Windows PowerShell, run the following command.
$UserCredential = Get-Credential
<a href="http://sympmarc.com/wp-content/uploads/2016/08/2016-08-03_14-23-19.png"><img class="aligncenter size-full wp-image-25423" src="http://sympmarc.com/wp-content/uploads/2016/08/2016-08-03_14-23-19.png" alt="Windows Azure Active Directory Module for Windows PowerShell running..." width="973" height="209" />
</a><a href="http://sympmarc.com/wp-content/uploads/2016/08/2016-08-03_14-24-31.png"><img class="aligncenter size-full wp-image-25424" src="http://sympmarc.com/wp-content/uploads/2016/08/2016-08-03_14-24-31.png" alt="Windows PowerShell Credential Request " width="971" height="362" /></a>
In the Windows PowerShell Credential Request dialog box, type your Office 365 work or school account user name and password, and then click OK.
- Run the following command.
Connect-MsolService -Credential $UserCredential
Connect-MsolService -Credential $UserCredential – Success!
After Step 3, if you don’t receive any errors, you connected successfully. A quick test is to run an Office 365 cmdlet—for example, Get-MsolUser—and see the results.
If the Get-MsolUser cmdlet runs successfully, you’ll see a list of your users
If you receive errors, check the following requirements: