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.
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.
Comments