In this step I want to start filling out the Portal with some business areas from a list that has been defined for us
We're going to use a CSV file in the same way as we did for the users. The start of the file looks like this
AreaURL, AreaName, AreaTitle, AreaDescription, AreaTemplate"Divisions","Divisions","Divisions Home Page", "This area includes links to content based on divisions in the company.", "BLANKINTERNET#2""Divisions/Sales","Sales","Sales Home Page", "This area includes information related to sales.", "BLANKINTERNET#2""Divisions/Support","Support","Support Home Page", "This area includes information related to support.", "BLANKINTERNET#2""Divisions/HumanResources","Human Resources","Human Resources Home Page", "This area includes information related to human resources.", "BLANKINTERNET#2""Divisions/Marketing","Marketing","Marketing Home Page", "This area includes information related to marketing.", "BLANKINTERNET#2"
We have a AreaURL column which is the URL relative to the site collection root and we also have the Area Name, Title and description. The AreaTemplate field in this example is BLANKINTERNET#2 (format is WebTemplate#Configuration). Now I know this is the Publishing Site template under the Publishing tab but we could just as easily create a team site, subsites of blogs or WIKI's etc.The easist way to find out what template and configuration to use is to create a site of the type you want through the UI and use powershell to find out what template is used
Run these commands to get a list of the Templates in use on the portal
$sp=new-object microsoft.sharepoint.spsite("http://sps:2828")$sp.allwebs | select serverrelativeurl, webtemplate, configuration
also checkout Dan Winter's list of the MOSS 2007 templates on his blog http://blogs.msdn.com/dwinter/archive/2006/07/07/659613.aspx
Now to the PowerShell functions First a simple wrapper to add a new site to the Site Collection: add-spweb
# Function: add-spweb# Description: Create a new Web # Parameters: SiteCollectionURL URL for the root of the Site Collection# WebUrl relative URl of the sub site# Title Title string# Description Description string # Template Template to use#function add-spweb([string]$SiteCollectionUrl, [string]$WebUrl, [string]$Title, [string]$Description, [string]$Template) { # Create our SPSite object $spsite=new-object Microsoft.SharePoint.SPSite $SiteCollectionUrl # Add a site $spsite.Allwebs.Add($WebUrl, $Title, $Description ,[int]1033, $Template, $false, $false) # Note: The new SPWeb will be returned from this call}
And then a function that will import the CSV file, create a set of objects for each Area line in the CSV file and pipe the list to add-spweb to add a new site.
# Function: Import-Sites# Description: Create a set of subwebs as listed in the import CSV file# Parameters: CSVFile Location of the CSV file containing the list of webs# SiteCollectionURL URL for the root of the Site Collection # function Import-Sites([string]$CSVFile, [string]$SiteCollectionURL){ Import-Csv $CSVFile | foreach-object { add-spweb $SiteCollectionURL $_.AreaURL $_.AreaName $_.AreaDescription $_.AreaTemplate } | foreach-object {$_.Navigation.UseShared=$true; $_.Update() }}
I'm also setting UseShared to true which tells the subareas to use the main portal navigation elements.
Use it like this
import-sites "ContosoAreas.CSV" http://sps:2828
The next step will be to import some content into our Publishing Areas...
Powered by: newtelligence dasBlog 2.0.7226.0
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2010, Colin Byrne
E-mail