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 http://www.criticalpathtraining.com 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 "" }

    if($defaultWebApp){
        $ownerAlias = [Environment]::UserDomainName + "\" + [Environment]::UserName

        if($contentdatabasename)
        {
            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
        }
        else
        {
            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
        }
    }
    else{
        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 "http://solutions.mydomain.com" -template "DEV#0" -contentdatabasename "WSS_Content_Solutions"

#to default content db
#CreateHNSC -name "Solutions Site 2" -url "http://solutions2.mydomain.com" -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: