Friday, June 28, 2013

Create SharePoint 2010 Search Scope and Rules using Powershell

For instance, I have 3 site collections and all site collections under same database as shown below.
http://spdev5:8004 (root site colection 1)
http://spdev5:8004/sites/site2   (site collection 2)
http://spdev5:8004/sites/site3  (site collection 3)
By default when I search in the root site collection it displays results from all site collections. For ex if I search something in the root site collection it is showing data of site col2 and site col 3 as well. However if search anything in site col2 or site col3 results are limited to that site collection only. That’s fine.
Below script will create a scope in the central admin and you can see this one in the site collection as well.

In the scope I am including my root level site and excluding site collection2.


$siteURL="rootsitecolurl"
$searchServiceName="Search Service Application"
$scopeName="MyScope"
$docLibraryURL = “sitecoll2url”


 $ssa = Get-SPEnterpriseSearchServiceApplication –Identity $searchServiceName | New-SPEnterpriseSearchQueryScope -Name $scopeName -Description "Include root site collection and Exclude rest of the site collections"  -DisplayInAdminUI $true
$scope = Get-SPEnterpriseSearchQueryScope -SearchApplication $searchServiceName -Identity $scopeName
Write-Host $scope.NAME
$rule1 = New-SPEnterpriseSearchQueryScopeRule -RuleType "Url" -Url $siteURL -MatchingString $siteURL -FilterBehavior "Include" -UrlScopeRuleType "Folder" -scope $scope
$rule2 = New-SPEnterpriseSearchQueryScopeRule -RuleType "Url" -Url $docLibraryURL -MatchingString $docLibraryURL -FilterBehavior "Exclude" -UrlScopeRuleType "Folder" -scope $scope


Write-Host "Scope Created"

#This scope name (MyScope) you have to update in the root site collection search results page #‘OSSSearchResults.aspx’. just look for ‘Scope’ and update as ‘Scope= MyScope

# for more info 

Uncheck SharePoint 2010 Site Column type checkbox using Powershell

$site = New-Object Microsoft.SharePoint.SPSite("yoursiteurl")
$web = $site.openweb("")

$Library = "working documents"$DocLib = $web.lists[$Library]

Write-Host "title"  $DocLib

foreach ($item in $DocLib.items)
{

if($item["ARCHIVED"]) #if it is checked (Archived is a site col)
{
      write-host "Archived:"  $item["ARCHIVED"] $item.title       $item["ARCHIVED"] = "0" #Uncheck the checkbox
      $item.Update()
      write-host "Archived:" $item["ARCHIVED"]
}

}


$web.dispose()
$site.dispose()


Thursday, June 27, 2013

Enable Search for specific sharepoint 2010 list/library using Powershell

$site = New-Object Microsoft.SharePoint.SPSite("yoursiteurl")
$web = $site.openweb("")

$Library = "workingdocuments"
$DocLib = $web.lists[$Library]

Write-Host "title"  $DocLib
Write-Host  "search" $DocLib.NoCrawl
$DocLib.NoCrawl = $false #if it is false search will be enabled
Write-Host  "search enabled:" $DocLib.NoCrawl

$DocLib.update()


$web.dispose()
$site.dispose()


Wednesday, June 19, 2013

SPSecurityTokenService.Issue() failed: System.NullReferenceException: Object reference not set to an instance of an object

Basically it is looking for alternate access mapping. Below steps for creating alternate access mapping

Login to Central Admin.

1.            Go to Application Management.
2.            Under Web Applications click Configure alternate access mappings.
3.            Click on Add Internal URLs link on the tool bar. If you want to configure intranet or internet url’s click on Edit Public URLs
4.            In the URL protocol, host and port text box, type or verify the full URL of your site that is using the FBA Authentication.
5.            Set Zone to Default and save.


Friday, June 14, 2013

Export/Import SharePoint List/Library Powershell

#Export SharePoint List
Export-SPWeb  "http://spdev5:8005" -path "D:\\Development\surya\ResourceLibrary.cmp" -ItemUrl Resource%20Library -IncludeVersions All

#Import SharePoint List

Import-SPWeb -Identity http://spdev5:8003 -path "D:\Development\surya\ResourceLibrary.cmp"

Thursday, June 13, 2013

Configure SharePoint 2010 Service application using Powershell

Below script will create services for office web apps

Word Viewing Service Application
Excel Service Application
PowerPoint Service Application

Save this file as .ps1 in your local server folder.
Open SharePoint 2010 Management Shell> create dir local folder path and run it

$saAppPoolName = "SharePoint Web Services"
$saAppPool = Get-SPServiceApplicationPool -Identity $saAppPoolName -EA 0
if($saAppPool -eq $null)
{
  Write-Host "Creating Service Application Pool..."
 
  $appPoolAccount = Get-SPManagedAccount -Identity $appPoolUserName -EA 0
  if($appPoolAccount -eq $null)
  {
      Write-Host "Please supply the password for the Service Account..."
      $appPoolCred = Get-Credential $appPoolUserName
      $appPoolAccount = New-SPManagedAccount -Credential $appPoolCred -EA 0
  }
 
  $appPoolAccount = Get-SPManagedAccount -Identity $appPoolUserName -EA 0
 
  if($appPoolAccount -eq $null)
  {
    Write-Host "Cannot create or find the managed account $appPoolUserName, please ensure the account exists."
    Exit -1
  }
 
  New-SPServiceApplicationPool -Name $saAppPoolName -Account $appPoolAccount -EA 0 > $null
     
}
 
Write-Host "Creating Service and Proxy..."
$appPool = Get-SPServiceApplicationPool -Identity "SharePoint Web Services"
New-SPWordViewingServiceApplication -Name "Word Viewing Service Application" -ApplicationPool $appPool | New-SPWordViewingServiceApplicationProxy -Name "Word Viewing Service Application"
New-SPPowerPointServiceApplication -Name "PowerPoint Service Application" -ApplicationPool $appPool | New-SPPowerPointServiceApplicationProxy -Name "PowerPoint Service Application" -AddToDefaultGroup
New-SPExcelServiceApplication -Name "Excel Service Application" -ApplicationPool $appPool

Please see below link for more information

System.ArgumentException: Exception of type 'System.ArgumentException' was thrown. Parameter name: encodedValue at Microsoft.SharePoint.Administration.Claims.SPClaimEncodingManager.DecodeClaimFromFormsSuffix(String encodedValue)

When you are working with SharePoint FBA controls like 

<asp:ChangePassword
 <asp:PasswordRecovery

you will get below error.

System.ArgumentException: Exception of type 'System.ArgumentException' was thrown.  Parameter name: encodedValue  
 at Microsoft.SharePoint.Administration.Claims.SPClaimEncodingManager.DecodeClaimFromFormsSuffix(String encodedValue)   
 at Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager.GetProviderUserKey(String encodedSuffix)   
 at Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity(SPSite site, String name, Boolean bNotGlobalAdminCode, String strUrl, Boolean bNotAddToContext, Byte[] UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous)   
 at Microsoft.SharePoint.SPWeb.InitializeSPRequest()   
 at Microsoft.SharePoint.WebControls.SPControl.EnsureSPWebRequest(SPWeb web)   
 at Microsoft.SharePoint.WebControls.SPControl.SPWebEnsureSPControl(HttpContext context)   
 at Microsoft.SharePoint.ApplicationRuntime.BaseApplication.Application_PreRequestHandlerExecute(Object sender, EventArgs e)   
 at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PreRequestExecuteAppHandler(Object oSender, EventArgs ea)   
 at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   
 at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

There are many reasons to get this error.
1)      Make sure all the properties or attributes are correct for the control.
2)      Sometimes if you are working with forgot password or change password you can see the error. Cookies might create a problem as we are not logged in to change password.
3)      Add this attribute in the control MembershipProvider="giveyourmembershipname"
.CS FILE
public partial class ChangePassword : UnsecuredLayoutsPageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected override bool AllowAnonymousAccess
        {
            get
            {
                return true;
            }
        }



        protected void myPasswordChanged(object sender, EventArgs e)
        {
            if (Request.Cookies[".ASPXAUTH"] != null)
            {
                HttpCookie myCookie = new HttpCookie(".ASPXAUTH");
                myCookie.Expires = DateTime.Now.AddDays(-1d);
//myCookie.Path = ApplicationName();
                Response.Cookies.Add(myCookie);
                Response.Write("surya");
            }
        }

        //ContinueDestinationPageUrl="~/_layouts/DAIDS_RSC/SignIn.aspx"
    }

ASPX page
  <asp:ChangePassword ID="ChangePassword1" runat="server" MembershipProvider="RSCMemberProvider" OnChangedPassword="myPasswordChanged"
                 DisplayUserName="true" InstructionText="Enter your username and old password."
                 ContinueDestinationPageUrl="~/_layouts/DAIDS_RSC/SignIn.aspx"
                 CancelDestinationPageUrl="~/_layouts/DAIDS_RSC/SignIn.aspx"
                 >



Followers