Saturday, April 27, 2013

Getting Started With Host Named Site Collections - PowerShell Script

Well, it's been a while, but I'm finally getting around to really digging deep into SP2013.  As I go through this I figured I'd start putting together a few helper PowerShell Scripts:

Once you've got a SP2013 developer machine created you may want to stand up additional Host Named Site Collections (If you haven't created one yet, use the Critical Path Training guide at in the Members section).  I've also included the ability to stand up a new ContentDB for your site collection.

Here's a relatively simple Powershell script to help you with this:

$snapin = Get-PSSnapin | Where-Object { $_.Name -eq "Microsoft.SharePoint.Powershell" }
if($snapin -eq $null)
    Write-Host "...loading Microsoft.SharePoint.PowerShell snapin" -ForegroundColor Gray
    Add-PSSnapin Microsoft.SharePoint.PowerShell

function CreateHNSC($name, $url, $template, $contentdatabasename)
    $defaultWebApp = Get-SPWebApplication |
        Where-Object { $_.IisSettings["Default"].ServerBindings[0].Port -eq 80 -and $_.IisSettings["Default"].ServerBindings[0].HostHeader -eq "" }

        $ownerAlias = [Environment]::UserDomainName + "\" + [Environment]::UserName

            Write-Host "Creating new content database '$contentdatabasename'"
            New-SPContentDatabase -Name $contentdatabasename -WebApplication $defaultWebApp
            Write-Host "Creating new Host Named Site Collection '$name' at $url (in '$contentdatabasename' content database)"
            New-SPSite -Name $name -Url $url -HostHeaderWebApplication $defaultWebApp -Template $template -OwnerAlias $ownerAlias -ContentDatabase $contentdatabasename
            Write-Host "Creating new Host Named Site Collection '$name' at $url (in default HNSC content database)"
            New-SPSite -Name $name -Url $url -HostHeaderWebApplication $defaultWebApp -Template $template -OwnerAlias $ownerAlias
        Write-Host "default SP2013 web application was not found" -ForegroundColor Red

#call the function for each host named site colletion you want to create
#with new content db
CreateHNSC  -name "Solutions Site" -url "" -template "DEV#0" -contentdatabasename "WSS_Content_Solutions"

#to default content db
#CreateHNSC -name "Solutions Site 2" -url "" -template "DEV#0"

One thing to remember (and might be worth handling in this script in the future) is that if you're using this to set up HNSCs on a dev machine, you'll need to add the additional hosts to your hosts file or Visual Studio won't recognize your new host.  This appears to be a known bug.

No comments: