Home Contact

The Frog Pond of Technology

Ripples of Knowledge for SharePoint and Other .Net Technologies

Slides and Scripts from SharePoint Cincy 2015

   This is my fourth year presenting at the SharePoint Cincy conference.  As usual the crew that organizes has put on a great conference and the attendees were very engaged.  Below are my slides and demo scripts for my “Running Your Dev / Test VMs in Azure for Cheap” session.  Thanks for all who attended and hope that you got something useful out of it.


Demo PowerShell Scripts

Download link



Slide Deck

Download link


      -Frog Out

Default Search Index File Location for SharePoint 2013

    Blogging this as a simple reminder to myself on the default (out of the box) value of the Search Service Application index location in SharePoint 2013.  Invariably I have to look this up every couple of months when supporting customers and only ever find the PowerShell commands to retrieve it.  Putting both on here.  Hopefully this saves someone else a few minutes of their day as well.


PowerShell Commands

$ssi = Get-SPEnterpriseSearchServiceInstance
$ssi.Components | Select-Object IndexLocation


Default Value

C:\Program Files\Microsoft Office Servers\15.0\Data\Office Server\Applications



      -Frog Out

Slides and Scripts from DogFood Conference 2014

   I was pleased to once again speak at the Dog Food Conference here in Columbus, OH.  I believe this is the 3rd year that I have spoken and the 4th or 5th year that I have attended.  The venue has moved to a more spacious location which definitely helped with giving attendees, speakers, and vendors more room to spread out,  I was especially happy to meet up with dozens of previous customers and co-workers at the conference.  This really is a great mix of audiences (developers, IT pros, and business users), customer segments, and topics (SharePoint, .Net, PowerShell, BI, ALM, and more).

   Thanks to everyone who attended my session at the very end of the last day of the conference.  We had a number of good side discussions and questions throughout the presentation.  Below are my slides and scripts.


Demo PowerShell Scripts




      -Frog Out

How I Use Azure IaaS for Lab VMs

   Many years ago I posted How I Blog walking through my blogging process.  Over the past few months many of my coworkers and customers have been talking or asking about how to use Azure IaaS for dev / test environments (especially for SharePoint).  In this post I’ll walk through the configurations I use, tools that have helped me, and other tips.

Note: This is not meant to be a post on best practices for rolling out your Azure IaaS infrastructure to support SharePoint.  This is just my current setup as an reference example for others to learn from.  For some best practices please read Wictor Wilen’s post on Microsoft Azure IAAS and SharePoint 2013 tips and tricks and listen to the Microsoft Cloud Show podcast interview  Episode 040 - Talking to Wictor Wilen about Hosting SharePoint VMs in IaaS he participated in.



   For over 6 months now I have been running my primary set of lab VMs in Azure Infrastructure as a Service (IaaS) VMs.  Prior to using Azure VMs I had been using Hyper-V on my laptop (either dual booting into a server OS or the latest iteration on Windows 8 / 8.1) but was always limited by machine resources.  Even with a secondary (or tertiary) solid state hybrid drive (this is a newer version than what I currently have in my laptop), 24GB of RAM, and quad core i7 it seemed like I was always juggling disk space for my VHDs or CPUs / RAM for my VMs.  Battery life in a hulking laptop like I had is very short and the weight can easily cause strain on your back when carried in a backpack.  Nowadays I carry a Lenovo T430s which cut the weight down to almost 1/3 of my old W520.



   I host 4 SharePoint farms (along with a few one-off VMs) in Azure IaaS using my MSDN benefits.  My MSDN benefits include $150 Azure credit per month, 10 free Azure websites, and a host of other freebies.  My farms includes a SharePoint 2007 farm, a 2010 farm, and two 2013 farms.  I tried to make the configuration between farms as consistent as possible.  As such I have a single Windows Server 2012 domain controller that also hosts DNS for all of my VMs and a similar 2 server topology for SQL Server and a SharePoint App / WFE server in each farm.

Note: The names and sizes for Azure IaaS VMs have changed since I first rolled them out (remember the days of small / medium / large / extra large for you early adopters?).  The Azure folks seem to have standardized on a naming schema of “A” followed by a number now which I appreciate but there is always a chance that things could change again in the future.  As such the names and sizes I list will be what is currently offered.



  • Domain Controller – I use an A0 instance (shared core, 768 MB) running Server 2012 with a (mostly) scripted out configuration.  This includes all of the SharePoint service accounts, OUs, and test accounts that I use.  If something were to happen to my domain controller I could easily spin up a new one very quickly.  I have talked with a few coworkers who host their AD infrastructure in a Windows Azure Active Directory instance.  I am not as familiar with AD in general so I stick with what I know and get by with the PowerShell commandlets I need to spin up my domain controller.
  • SQL Server – I typically use an A2 instance (2 cores, 3.5 GB) running SQL Server 2012 (except for SharePoint 2007 which runs SQL Server 2008 R2).  If I am trying to roll out business intelligence features like SSIS, SSAS, etc. I will increase the VM up to an A3 (4 cores, 7 GB).  I also have a SQL Server 2014 VM for my secondary SharePoint 2013 farm which is running the latest and greatest of everything (OS, SQL, patch level, etc.).
  • SharePoint Server – I run both SharePoint WFE and APP roles off a single A3 instance (4 cores, 7GB) running Server 2012 during normal operation.  Similar to my SQL limitation on the SharePoint 2007 farm I am running Server 2008 R2 for that farm.  For my 2013 farm this machine also hosts Workflow Manager 1.0 and Visual Studio 2013.  If I need extra horsepower or am running all SharePoint services (or even just SharePoint search) I will increase this to an A4 (8 cores, 14GB).  I also have (almost) the entire SharePoint install and configuration scripted out.
  • Office Web Apps – While it is technically not supported to run Office Web Apps Server 2013 in Azure I do have a working scenario for one of my SharePoint 2013 farms.  This VM is an A2 instance (2 cores, 3.5 GB) running Server 2012.


Virtual Network

  • I originally created a separate network for each farm, but after deciding to utilize a single shared domain controller for all environments I instead switched over to just a single virtual network.  This happened before the announcement of being able to create connections between virtual networks and I haven’t revisited this item.
  • Special tip on virtual networks.  When I first configured a virtual network in my environment I removed the Microsoft DNS IP address that was automatically assigned and instead put the “local” IP address for my domain controller.  This resulted in losing outgoing internet connectivity for all of my VMs.  I had to delete and recreate my virtual network with a working scenario (see below) of the default Microsoft DNS and then my domain controller IP to handle intra-VM communication.




  • Azure portal - https://portal.azure.com/.  This is the new Azure portal design that presents a customizable view into your Azure components.  Not all of the features are currently supported but Azure web sites, IaaS VMs, and a few others are accessible.  For the older “full” portal site check out https://manage.windowsazure.com.
  • Azure Commander – This is a universal app for Windows 8.x and Windows Phone 8.x from Wictor Wilen.  This app costs a few bucks but is absolutely worth it in my experience.  You can import your subscription file and then be able to stop, start, and view your VM instances (along with a few other Azure resources) on either your phone or PC.  I find this very helpful when I am presenting at a customer or conference using my Azure VMs and then need to pack up quickly and head out the door or to my next session.  I can quickly and easily stop my VMs from my phone as I head on my way.

Website: http://www.azurecommander.com/

Windows Store: http://apps.microsoft.com/windows/app/azure-commander/9833284f-a80c-45ec-8710-a5863ec44ae4

Windows Phone Store: http://windowsphone.com/s?appId=39393973-0b68-4201-8ca1-a67af69f5fca



  • Portability – As mentioned previously I no longer need to lug around a laptop + power adapter that are 10+ pounds.  Instead my new laptop and power adapter are closer to 4 pounds.  I can also launch my VMs, kick off some processes, and then shut my laptop and go to another conference room or head home.  When I get there to my destination I pop up my laptop and my VMs are still running and ready for me to resume work quickly.
  • Flexibility – When I need to tear down and rebuild farms / servers I don’t have to worry about storage or other resources.  Previously when I wanted to rebuild a farm I would have to move VHDs or delete old ones in order to make space for the new set before I could delete the old set.
  • Connection speed – The primary source of software and applications on my VMs comes from the MSDN subscriber downloads.  There must be a mirror of all the products sitting in the rack next to my VMs because on average I get download speeds of 10-50MB/s (yes that is megabytes not megabits).  Download a copy of the SQL Server 2014 ISO takes minutes instead of hours now.
  • Cost – As mentioned above my MSDN benefits include $150 per month to use as I see fit on Azure.  On average I run my VMs for 5-8hrs a day for 5-10 days  in a month.  Overall with storage, bandwidth, compute, and other costs I rarely spend more than $50 of that $150 credit.  Compared with the electricity costs that I could be incurring from running local VMs in Hyper-V I’ll take my “free” MSDN VMs any day.



  • Lack of snapshots – Currently there is no concept of taking a snapshot of a running VM in Azure.  You can shut down a VM and copy the VHD blob to another storage account or download a local copy (quite a hefty download) but these don’t work as well when you need to set up a demo and capture it at a specific point so that you can roll back if needed.  With the pace of how quickly the Azure team is rolling out features and new innovations who knows if this might make it into a future release.
  • Require internet connection – Despite being in the age of fairly ubiquitous broadband and 4G signal there are still times that I am without a good internet connection.  As a backup plan when I don’t have an internet connection or good 4G signal on my MiFi device I do have Hyper-V with a local set of VMs on my laptop.  I use them maybe once a month if that.
  • Limit of cores (for MSDN subscribers) – This is not a limitation for me but it is worth mentioning since some of my fellow PFE coworkers have brought it up.  If you are using your MSDN Azure benefits you are limited to a total of 20 cores allocated to your VMs at one time.  The most I use at any time is 14 and that is when I have increased the size of SQL and SharePoint and have Office Web Apps running which is rare.  For some of my coworkers though they need to run lab environments with a dozen or more VMs to replicate deployments of Lync, Exchange, AD, SharePoint, and more and can easily use upwards of 80 cores.  For them their MSDN benefits are not sufficient to run their lab environments.



   I was hesitant about using Azure VMs due to fears about racking up costs that I (not my employer) would have to pay along with having to learn a new platform and set of tools.  Now I couldn’t imagine having to go back to running my lab environments locally full time.  Hopefully some of the tips and processes I covered in this post will encourage you to check out Azure as a replacement for your on-prem dev / test lab environment.  You can even get a 1 month Azure trial to try out $200 worth of services.


      -Frog Out

I Contributed to the Office App Model Samples Project


<Update 2014-08-18> The Office App Model Samples project has been transitioned over to the Office 365 Developer Patterns & Practices GitHub repo.  Please use that location going forward for any references.</Update 2014-08-18>


  During the SharePoint Conference 2014 I had the pleasure of meeting Vesa Juvonen (@vesajuvonen) and Steve Walker (Linked In) after their session “Real-world examples of FTC to CAM transformations” (video).  This was a very valuable session to attend discussing examples of full trust code (FTC) solutions that were re-implemented / re-imagined as app model apps.  They also mentioned a new CodePlex project gathering community app model samples called Office App Model Samples (Office AMS).


   Over the past few years I’ve been toying around with various PowerShell scripts to enumerate permissions in an on-premise SharePoint farm (Enumerate SharePoint 2010/2013 Permissions, Enumerate SharePoint 2007 Permissions).  I was curious to see if it was possible to enumerate permissions in a SharePoint Online tenant as well.  I had tried using the official SharePoint Online Management Shell commandlets, Gary LaPointe’s custom SharePoint Online commandlets, and my own client side object model (CSOM) PowerShell queries with no luck.  Looking through Gary’s source code though I found a way to get the permission information I needed via C# code and CSOM.  This felt like a great idea to submit to the OfficeAMS project.


   I’m happy to announce that my submission Core.PermissionListing is now published in the OfficeAMS project.  Keep in mind this is a rough proof of concept.  The sample iterates through all non-My Site site collections (something I borrowed from another OfficeAMS solution) in a SharePoint Online tenant and lists out the permissions assigned to groups or users and specifies the permission assigned.  The output could definitely be cleaned up but that will be an effort for a later date.  Hopefully you will find this and other app model samples useful.  If you’d like to contribute or improve upon a solution you find please contact Vesa, Steve, or myself.


      -Frog Out

Slides and Scripts from SharePoint Cincy 2014

   I was pleased to present at SharePoint Cincy again for the third year.  Geoff and all the organizers do a great job.  My presentation this year was “PowerShell for Your SharePoint Tool Belt”.  Below are my slides and demo scripts.  Thanks for all who attended, I hope you found something that will be useful for you in your work.


Demo PowerShell Scripts





      -Frog Out

PowerShell Script To Determine If SharePoint List Uses InfoPath Forms

   Recently I had a request from a customer to find which SharePoint 2010 / 2013 lists are using InfoPath forms for their data entry (also known as enterprise forms for a SharePoint list).  In this post I will show you a PowerShell script to determine if a SharePoint list is using InfoPath forms.



  As you may have heard, InfoPath as a product will not be receiving any future releases (see InfoPath roadmap update blog post).  Being able to find SharePoint lists using InfoPath forms may be useful to you now.



   Special thanks goes out to Joe Rodgers (fellow PFE at Microsoft) who helped me narrow down the specific properties to look at.  The property that we want is not at the base of the SPList properties nor on the SPList.Forms properties like I had hoped.  Instead you will need to dig a few levels down.  I found the property at SPList.ContentTypes[0].ResourceFolder.Properties[“_ipfs_infopathenabled”].  If this setting is true then your list is using InfoPath forms for data entry.  If it is false then it is using out of the box SharePoint forms.



Add-PSSnapin microsoft.sharepoint.powershell
$webURL = <Your Site URL>
$documentLibraryName = <name of document library>

$web = Get-SPWeb
$list = $web.Lists["$documentLibraryName"]
$isUsingInfoPath = $list.ContentTypes[0].ResourceFolder.Properties["_ipfs_infopathenabled"]
Write-Output $isUsingInfoPath



   This script will determine if a single SharePoint list is using InfoPath forms or not.  You could easily expand this to work with multiple lists or sites (similar to my PowerShell Script to Determine Number of Files in SharePoint 2010 or 2013 Document Libraries).  Feel free to adapt the above snippet in this post to your needs but please attribute rights if you republish.


      -Frog Out

PowerShell Script to Limit SharePoint Site Templates Available

   I had a customer request recently to limit the which site templates were available to end users to create subsites.  Below is a short PowerShell script to do just that.



   If you are using a Publishing Site you can restrict the available site templates by going to Site Settings –> Look & Feel and clicking on Page Layouts and Site Templates (see following screenshot).  If you are not on a Publishing Site then there is not an easy (supported) way to accomplish this through out of the box means.




   The SPWeb class has methods GetAvailableWebTemplates and SetAvailableWebTemplates that can be used in conjunction with each other to get the current list of templates and then filter down to only the desired templates.  The filtered down results can then be set and updated on the SPWeb.  A version of this script can be downloaded from the TechNet Script Repository: Limit available web templates for a SharePoint site.

Note:  Be sure to modify the “<URL of site>” to your site’s URL and also change which templates to keep (line 2).



# array of template names (not titles) to keep
$templateNamesToKeep = "STS#0","PROJECTSITE#0","BLOG#0"

Start-SPAssignment -Global
$web = Get-SPWeb <URL of site>

# get the existing web templates from the site that will be filtered down
# 1033 is the locale id for English US (en-us), be sure to change to your locale

$existingWebTemplates = $web.GetAvailableWebTemplates(1033)
$newWebTemplates = New-Object "System.Collections.ObjectModel.Collection[Microsoft.SharePoint.SPWebTemplate]"

# filter existing web templates and only keep if in the list of template names to keep
$newWebTemplates = $existingWebTemplates | Where-Object {$_.name -in $templateNamesToKeep}
$web.SetAvailableWebTemplates($newWebTemplates, 1033)



   Before you run the script you will see the original list of available web templates when creating a subsite.



   After you run the script you will now see only the templates which you listed in the templates to keep.



   If you need to reset the list of available web templates you can execute the AllowAllWebTemplates method on the SPWeb object.



   I had run across a few other samples for limiting web templates that involved modifying out of the box SharePoint files (changes which may be overwritten by future updates or patches, and thus not recommended).  This process of using the SetAvailableWebTemplates() method appears to be a bit more safe and supported.


      -Frog Out

Goals for 2014

   This is getting published a little bit late (month and a half into 2014 already) but I still wanted to get this posted.  Once again I’m setting some goals for myself for the year and posting them here publicly.  You can read my past years goals (2010, 2011, 2012, 2013) and retrospectives (2010, 2011, 2012, 2013) as well.  So with that let’s dive in.



  • Blogging – I’m coming up on 5 years of blogging in a few months.  Hard to believe it has been that long but as long as I have things to share I’ll continue blogging.  It is great when I meet people in person that have been helped by tips, scripts, or other content I have blogged about.  This year I know will be busy with a number of work projects but I plan to post at least one post of substance each month.
  • Publish a productivity tool – When I started blogging back in 2009 the second blog post I ever posted was about how to enumerate SharePoint permissions from SharePoint 2007 with PowerShell.  Last year in 2013 I posted an update for enumerating SharePoint 2010 or 2013 permissions with PowerShell.  I would like to take the updated script and turn it into a tool that works for SharePoint Online as well since I see this as a gap area in tools / reports currently available for SharePoint Online.



  • Continue taking annual vacations – This may seem like an odd goal, but taking some time off and disconnecting from work for a few days away from home is good at least once or twice a year.  I also try to disconnect from technology while I’m away so minimal or no email, TV, video games, computers, etc.  The next two goals help with sticking to that.
  • Running – In 2013 my wife (then fiancé) and I ran our first 5K.  You can read the backstory on why that was such a big deal for me.  This year I plan to run a quarter marathon (6.55 miles) and at least one other race (length undetermined).  I’m already signed up to run a quarter marathon in May and I”d like to do one other race, perhaps something like Warrior Dash.
  • Read books – As I mentioned in my 2013 retrospective I’ve really gotten into reading (physical, not just digital) books lately.  I plan to read at least 3-4 books, many which I got as Christmas presents last year (see below).  I’m really loving science fiction books (especially Isaac Asimov) lately and looking forward to finishing up the Foundation series.


  • Buy a house – My wife and I are looking to move into something a little larger so we have room to expand our family in the coming years.  We’re also preparing our condo for selling it by completing some home projects.  Will be fun to break out some power tools.



   As I said with last year’s goals I like publicly posting my goals to hold myself more accountable but also to help inspire others to also create / post their own goals.  If you decide to post your own goals feel free to send me a link as I would love to read.  Here’s to a good 2014 year!


      -Frog Out

Goals for 2013 Retrospective

   This is my fourth year of setting goals publicly on my blog (2010, 2011, 2012, 2013) and going through a retrospective at the end of the year (2010, 2011, 2012).  So without further ado here is my recap of 2013 goals.


Year in Review

   2013 will probably be the biggest year in my life as it is the year I got married to my wonderful wife Sarah.  Other notable events include getting promoted to Senior Premier Field Engineer at Microsoft, two of my sister-in-laws having babies, and helping out with some local conferences (including the return of SharePoint Saturday Columbus).


Professional Goals

  • Work local more – For the majority of 203 I was still on the road for a good portion of it.  Thankfully towards the end of the year (just before my wedding) I was able to work out arrangements to do more local and remote work.  I now have a few dedicated customers that are local or I work with remotely.  That fills over half my schedule while the other portion of my time is doing a mix of remote and traveling engagements.  Overall I’m (and my wife is) much happier with me being able to be home more.
  • Mentor / Mentee – I started out the year with 2 unofficial mentees at work.  Over the course of the year they have dropped off and we don’t meet regularly anymore.  I still talk with one on an infrequent basis when questions arise.  I’m ok with where things are at on this topic as a mentor / mentee relationship is only beneficial while both sides are willing to put something into it and also get something out of it.  In these cases both are now moving along from the hurdles they originally faced.
  • Blogging – I planned to blog at least 20 posts last year.   Unfortunately I only wrote 18 posts.  Part of this is due to my daily schedule changing quite a bit between work and personal life and part of it is due to not keeping a regular rhythm of writing down blog ideas that I flesh out.  Currently I have a number of topics that I “haven’t had time” to write out.  What that really means is I haven’t made the time for it.  Something to work on for next year.

Personal Goals

  • Get married – As I mentioned above this was the big year I tied the knot with Sarah.  Three months in and married life is great.  We are both growing into our new relationship with each other and with God.
  • Stay Fit – In 2012 I was able to lose and keep off 10+ pounds.  In 2013 with the help of my FitBit One, going to the gym with my wife, practicing portion control during meals, and getting into running I took off another 5 pounds.  I would’ve liked to lose a few more pounds but I’m finding that I’m adding muscle weight which I’m ok with.
  • Read Books – 2013 was the year that I discovered science fiction books.  I had listened to some audio books (most of the Robot series) by Isaac Asimov a few years ago.  This year I found the first five books of the Foundation series at a local used book store.  I’ve already read through the first 4 and have books 5-7 lined up to be read.  I also read The Gods themselves by Asimov, Daemon and FreedomTM by Daniel Suarez, and Dance with Dragons by George R. R. Martin.  That is more books / pages than I read when I was back in school.  I asked for (and got as presents) a number of other science fiction and technology thriller books for Christmas so my reading list for 2014 is already stocked.  I’m finding that I really like owning physical books rather than digital lately, similar to my new fascination with board / card / dice games (I’ll talk more about in my goals for 2014).



   I changed the focus of many of my goals for 2013 compared to 2012.  I’m happy with the change in focus to more family and personal health type goals.  I was able to meet and exceed most goals with only a few that were not met completely.  After reflecting back on this past year I’ve already brainstormed some goals for 2014.

   I hope you had a good 2013 and that you set and stuck to some goals.  If you’d like to share any feel free to put them in the comments below.  Here’s to the start of a great 2014!