Run Warmup Script on Startup

Recently ran across a SharePoint install that had links to all the web apps in the Startup folder on the WFE box.  First thought was, PowerShell that mess!

First you will need to create a batch file to call the PowerShell warmup script.  The batch file will need to live in your Startup folder. By doing this, the script will run on server startup.

*update*  what if you want to pause / delay the batch file? Simply add a “timeout /t 5″ after the @echo off statement.  *remove the quotes and 5 is measured in seconds.*

@echo off
timeout /t 5
powershell.exe d:\PowerShellScripts\warmup.ps1

The PowerShell warmup script:


Add-PSSnapin Microsoft.SharePoint.PowerShell;

function Get-WebPage([string]$url)
{
 $wc = new-object net.webclient;
 $wc.credentials = [System.Net.CredentialCache]::DefaultCredentials;
 $pageContents = $wc.DownloadString($url);
 $wc.Dispose();
 return $pageContents;
}

Get-SPAlternateUrl -Zone Default | foreach-object {
 write-host $_.IncomingUrl;
 $html = Get-WebPage -url $_.IncomingUrl;
}

warmup script was created by Jon Badgett

http://www.jonthenerd.com/2011/04/19/easy-sharepoint-2010-warmup-script-using-powershell/

You are not allowed to respond again to this survey

Error: You are not allowed to respond again to this survey.

Either the user has already taken the survey or they started taking the survey and never finished.

You can try going in and deleting what they have already done.  Or allow users to take the survey more than once.

How to allow users to take survey again:

Your Survey –>  Survey Settings –> General Settings

Survey Option –> Allow multiple responses –> Yes

Then click save.

 

PowerShell Get a List of Site Templates

If you need to script out a list of available site templates, here is the answer.


Add-PSSnapin Microsoft.SharePoint.PowerShell –erroraction SilentlyContinue
$site = Get-SPSite "http://www.sharepointed.com/tacoSiteCollection"
$web = $site.RootWeb
$listTemplates = $site.GetCustomListTemplates($web)

foreach($xx in $listTemplates)
 {
 Write-Host $xx.FeatureId
 }

$site.Dispose()

PowerShell Calculated Column Create and Edit

How do you create a calculated column using PowerShell?  In my example, I’m creating a new field called Calculated Date Field, setting the formula, then setting the output type to DateTime.

How do I build the formula?  Go into your list, add a new calculated column, create your formula, test the formula.  If it works, copy the formula and delete the column.


$site = Get-SPweb "http://sharepointed.com/site/salsa/"

$mList=$site.Lists["Nacho"]

 $mList.Fields.Add("Calculated Date Field", "Calculated", 0)
 $SPField = $mList.Fields.GetField("Calculated Date Field")
 $SPField.Formula="=DATE(YEAR([Document Date])+7,MONTH([Document Date])+0,DAY([Document Date])+0)"
 $SPField.OutputType="DateTime"
 $SPField.Update()

$site.Dispose()

PowerShell Get SharePoint Page Layouts

I was having an issue with a script and needed to find my available page layouts. Below is the script you will need to run to find the available page layouts for a given site.

$web = Get-SPweb "http://sharepointed.com/sites/taco"

		$pubWeb =[Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
		$pl = $pubWeb.GetAvailablePageLayouts()
		foreach($p in $pl)
		{
			Write-Host $p.Name
		}
$site.Dispose()

PowerShell Get Sub Sites of a Site

If you are looking for a way to get all of the subsites for a given site, PowerShell can help.

Add-PSSnapin Microsoft.SharePoint.PowerShell –erroraction SilentlyContinue

$spWeb = Get-SPweb "http://sharepointed.com/sites/taco"

	foreach($subSite in $spWeb.Webs)
		{
			$subSite.Title
			$subSite.Dispose()
		}

$spWeb.Dispose()

1. add the SharePoint Snapin
2. get the site that we want to dig into.
3. loop on each subsite
3.1. display the site title
3.2. close the connection to the subsite.
4. close the connection to the site we dug into.

Get-SPWeb Cannot access the local farm

Get-SPWeb : Cannot access the local farm. Verify that the local farm is properly configured, currently available, an
d that you have the appropriate permissions to access the database before trying again.

I was using one of the farm service accounts to run my PowerShell scripts, not good.
The service account was locked and caused the above error.

One or more field types are not installed properly

Here is the error:
The following exception was thrown when trying to enumerate the collection: “One or more field types are not installed properly. Go to the list settings page to delete these fields.”.
At C:\Users\me\AppData\Local\Temp\2\bca6fde0-a91f-427a-ad21-4794d47cebfc.ps1:24 char:17
+ $spList.GetItems <<<< ($spQuery)
+ CategoryInfo : NotSpecified: (:) [], ExtendedTypeSystemException
+ FullyQualifiedErrorId : ExceptionInGetEnumerator

Why?
Using PowerShell, I was trying to query a list. In my Where statement, I was calling a field by its display name, and not its INTERNAL name.

Bad code:

$web = Get-SPWeb "http://sharepointed.com/sites/taco"

$spList = $web.Lists["Taco History"]
$field = $spList.Fields["Taco Name"]
$value = "Grande Taco"

# Create Query based on field and value
$camlQuery =
'' +
$value +
'';
# SPQuery object
$spQuery = New-Object Microsoft.SharePoint.SPQuery
# Add query
$spQuery.Query = $camlQuery;
$spList.GetItems($spQuery)

This code will toss you the One or more field types are not installed properly….. error.

Using the friendly U2U Caml query tool, I rewrote my PowerShell Caml query. Doing this I noticed my field name issue. My fields display name is Taco Name but its internal name is Taco_x0020_Name. Doh!!!

Rewrite the PowerShell script and life is good!
Notice the new $field = $field.InternalName line in the script.

$web = Get-SPWeb "http://sharepointed.com/sites/taco"

$spList = $web.Lists["Taco History"]
$field = $spList.Fields["Taco Name"]
$field = $field.InternalName
$value = "Grande Taco"

# Create Query based on field and value
$camlQuery =
'' +
$value +
'';
# SPQuery object
$spQuery = New-Object Microsoft.SharePoint.SPQuery
# Add query
$spQuery.Query = $camlQuery;
$spList.GetItems($spQuery)