Tuesday, November 27, 2012

How to Deploy Multiple Solutions using PowerShell Scropt in SharePoint 2010



$InstallDIR = "D:\CAWSP\Backup\4"
Write-Host "Working, Please wait...."
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue

$Dir = get-childitem $InstallDIR -Recurse
$WSPList = $Dir | where {$_.Name -like "*.wsp*"}
Foreach ($wsp in $WSPList )
{
                $WSPFullFileName = $wsp.FullName
                $WSPFileName = $wsp.Name
                clear
                Write-Host -ForegroundColor White -BackgroundColor Blue "Working on $WSPFileName"

                try
                {
                                Write-Host -ForegroundColor Green "Checking Status of Solution"
                                $output = Get-SPSolution -Identity $WSPFileName -ErrorAction Stop
                }
                Catch
                {
                                $DoesSolutionExists = $_
                }
                If (($DoesSolutionExists -like "*Cannot find an SPSolution*") -and ($output.Name -notlike  "*$WSPFileName*"))
                {
                                Try
                                {
                                                Write-Host -ForegroundColor Green "Adding solution to farm"
                                                Add-SPSolution "$WSPFullFileName" -Confirm:$false -ErrorAction Stop | Out-Null

                                                Write-Host -ForegroundColor Green "Checking Status of Solution"
                                                $output = Get-SPSolution -Identity $WSPFileName -ErrorAction Stop
                                                $gobal = $null
                                                if ($output.Deployed -eq $false)
                                                {
                                                                try
                                                                {
                                                                                Write-Host -ForegroundColor Green "Deploy solution to all Web Apps, will skip if this solution is globally deployed"
                                                                                Install-SPSolution -Identity "$WSPFileName" -GACDeployment -AllWebApplications -Force -Confirm:$false -ErrorAction Stop | Out-Null
                                                                }
                                                                Catch
                                                                {
                                                                                $gobal = $_
                                                                }
                                                                If ($gobal -like "*This solution contains*")
                                                                {
                                                                                Write-Host -ForegroundColor Green "Solution requires global deployment, Deploying now"
                                                                                Install-SPSolution -Identity "$WSPFileName" -GACDeployment -Force -Confirm:$false -ErrorAction Stop | Out-Null
                                                                }
                                                }

                                                Sleep 1
                                                $dpjobs = Get-SPTimerJob | Where { $_.Name -like "*$WSPFileName*" }
                                                If ($dpjobs -eq $null)
                                {
                                Write-Host -ForegroundColor Green "No solution deployment jobs found"
                                }
                                                Else
                                                {
                                                                If ($dpjobs -is [Array])
                                                                {
                                                                                Foreach ($job in $dpjobs)
                                                                                {
                                                                                                $jobName = $job.Name
                                                                                                While ((Get-SPTimerJob $jobName -Debug:$false) -ne $null)
                                                                                                {
                                                                                                                Write-Host -ForegroundColor Yellow -NoNewLine "."  Start-Sleep -Seconds 5
                                                                                                }
                                                                                                Write-Host
                                                                                }

                                                                }
                                                Else
                                                {
                                                                                $jobName = $dpjobs.Name
                                                                                While ((Get-SPTimerJob $jobName -Debug:$false) -ne $null)
                                                                                {
                                                                                                Write-Host -ForegroundColor Yellow -NoNewLine "." Start-Sleep -Seconds 5
                                                                                }
                                                                                Write-Host
                                                }
                                                }
                                }
                                Catch
                                {
                                                Write-Error $_
                                                Write-Host -ForegroundColor Red "Skipping $WSPFileName, Due to an error"
                                                Read-Host
                                }
                }
                Else
                {
                                $skip = $null
                                $tryagain = $null
                                Try
                                {
                                                if ($output.Deployed -eq $true)
                                                {
                                                Write-Host -ForegroundColor Green "Retracting Solution"
                                                Uninstall-SPSolution -AllWebApplications -Identity $WSPFileName -Confirm:$false -ErrorAction Stop
                                                }
                                }
                                Catch
                                {
                                                $tryagain = $_
                                }
                                Try
                                {
                                                if ($tryagain -ne $null)
                                                {
                                                                Uninstall-SPSolution -Identity $WSPFileName -Confirm:$false -ErrorAction Stop
                                                }
                                }
                                Catch
                                {
                                                Write-Host -ForegroundColor Red "Could not Retract Solution"
                                }

                                Sleep 1
                                $dpjobs = Get-SPTimerJob | Where { $_.Name -like "*$WSPFileName*" }
                                If ($dpjobs -eq $null)
                {
                Write-Host -ForegroundColor Green "No solution deployment jobs found"
                }
                                Else
                                {
                                                If ($dpjobs -is [Array])
                                                {
                                                                Foreach ($job in $dpjobs)
                                                                {
                                                                                $jobName = $job.Name
                                                                                While ((Get-SPTimerJob $jobName -Debug:$false) -ne $null)
                                                                                {
                                                                                                Write-Host -ForegroundColor Yellow -NoNewLine "." Start-Sleep -Seconds 5
                                                                                }
                                                                                Write-Host
                                                                }
                                                }
                                Else
                                {
                                                                $jobName = $dpjobs.Name
                                                                While ((Get-SPTimerJob $jobName -Debug:$false) -ne $null)
                                                                {
                                                                                Write-Host -ForegroundColor Yellow -NoNewLine "." Start-Sleep -Seconds 5
                                                                }
                                                                Write-Host
                                }
                                }                             

                                Try
                                {
                                                Write-Host -ForegroundColor Green "Removing Solution from farm"
                                                Remove-SPSolution -Identity $WSPFileName -Confirm:$false -ErrorAction Stop
                                }
                                Catch
                                {
                                                $skip = $_
                                                Write-Host -ForegroundColor Red "Could not Remove Solution"
                                                Read-Host
                                }
                                if ($skip -eq $null)
                                {
                                                Try
                                                {
                                                                Write-Host -ForegroundColor Green "Adding solution to farm"
                                                                Add-SPSolution "$WSPFullFileName" -Confirm:$false -ErrorAction Stop | Out-Null
                                                                $gobal = $null
                                                                try
                                                                {
                                                                                Write-Host -ForegroundColor Green "Deploy solution to all Web Apps, will skip if this solution is globally deployed"
                                                                                Install-SPSolution -Identity "$WSPFileName" -GACDeployment -AllWebApplications -Force -Confirm:$false -ErrorAction Stop | Out-Null
                                                                }
                                                                Catch
                                                                {
                                                                                $gobal = $_
                                                                }
                                                                If ($gobal -like "*This solution contains*")
                                                                {
                                                                                Write-Host -ForegroundColor Green "Solution requires global deployment, Deploying now"
                                                                                Install-SPSolution -Identity "$WSPFileName" -GACDeployment -Force -Confirm:$false -ErrorAction Stop | Out-Null
                                                                }
                                                }
                                                Catch
                                                {
                                                                Write-Error $_
                                                                Write-Host -ForegroundColor Red "Skipping $WSPFileName, Due to an error"
                                                                Read-Host
                                                }

                                                Sleep 1
                                                $dpjobs = Get-SPTimerJob | Where { $_.Name -like "*$WSPFileName*" }
                                                If ($dpjobs -eq $null)
                                {
                                Write-Host -ForegroundColor Green "No solution deployment jobs found"
                                }
                                                Else
                                                {
                                                                If ($dpjobs -is [Array])
                                                                {
                                                                                Foreach ($job in $dpjobs)
                                                                                {
                                                                                                $jobName = $job.Name
                                                                                                While ((Get-SPTimerJob $jobName -Debug:$false) -ne $null)
                                                                                                {
                                                                                                                Write-Host -ForegroundColor Yellow -NoNewLine "." Start-Sleep -Seconds 5
                                                                                                }
                                                                                                Write-Host
                                                                                }
                                                                }
                                                Else
                                                {
                                                                                $jobName = $dpjobs.Name
                                                                                While ((Get-SPTimerJob $jobName -Debug:$false) -ne $null)
                                                                                {

                                                                                                Write-Host -ForegroundColor Yellow -NoNewLine "."  Start-Sleep -Seconds 5
                                                                                }
                                                                                Write-Host
                                                }
                                                }
                }
                Else
                {
                                Write-Host -ForegroundColor Red "Cannot Install $WSPFileName, Please try manually"
                                Read-Host
                }
}
}

How to Create a Site using PowerShell Script


Write-Host
# define variables for script
$SiteTitle = "Lab 1 - Getting Started"
$SiteUrl = "http://ServerName:1234/sites/HR"
$SiteTemplate = "STS#1"
# check to ensure Microsoft.SharePoint.PowerShell is loaded
$snapin = Get-PSSnapin | Where-Object {$_.Name -eq 'Microsoft.SharePoint.Powershell'}
if ($snapin -eq $null) {
Write-Host "Loading SharePoint Powershell Snapin"
Add-PSSnapin "Microsoft.SharePoint.Powershell"
}

# delete any existing site found at target URL
$targetUrl = Get-SPSite | Where-Object {$_.Url -eq $SiteUrl}
if ($targetUrl -ne $null) {
  Write-Host "Deleting existing site at" $SiteUrl
  Remove-SPSite -Identity $SiteUrl -Confirm:$false
}

# create new site at target URL
Write-Host "Creating new site at" $SiteUrl
$NewSite = New-SPSite -URL $SiteUrl -OwnerAlias Administrator -Template $SiteTemplate -Name $SiteTitle
$RootWeb = $NewSite.RootWeb

# display site info
Write-Host
Write-Host "Site created successfully" -foregroundcolor Green
Write-Host "-------------------------------------" -foregroundcolor Green
Write-Host "URL:" $RootWeb.Url -foregroundcolor Yellow
Write-Host "ID:" $RootWeb.Id.ToString() -foregroundcolor Yellow
Write-Host "Title:" $RootWeb.Title -foregroundcolor Yellow
Write-Host "-------------------------------------" -foregroundcolor Green





Hot to get SPUser from sharepoint list item fileld



using (SPSite site = new SPSite(workflowProperties.SiteUrl))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList spList = web.Lists["MySpList"];
SPQuery spQuery = new SPQuery();
                    spQuery.Query = "<Where>--</And></Where>";
                    SPListItemCollection collListItems = spList.GetItems(spQuery);
                    foreach (SPListItem listItem in collListItems)
                    {
string EmpName = GetSPUser(listItem, "UserName");
}
    }
}


public SPUser GetSPUser(SPListItem spListItem, String fieldName)
        {
            SPUser spUser = null;
            try
            {
                if (fieldName != string.Empty)
                {
                    SPFieldUser field = spListItem.Fields[fieldName] as SPFieldUser;
                    if (field != null && spListItem[fieldName] != null)
                    {
                        SPFieldUserValue fieldValue = field.GetFieldValue(spListItem[fieldName].ToString()) as SPFieldUserValue;
                        if (fieldValue != null)
                        {
                            spUser = fieldValue.User;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return spUser;
        }

How to cancel running workflows in a sharepoint list using server code.

SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    web = site.OpenWeb();
                    SPWorkflowManager manager = site.WorkflowManager;
                    SPList list = web.Lists["mySPList"];
                    SPQuery q = new SPQuery();
                    q.Query = "<Where><Eq><FieldRef Name='EmpId'/><Value Type='Number'>" +Convert.ToInt32(lblEmpId.Text) + "</Value></Eq></Where>";
                   SPListItemCollection collection = list.GetItems(q);
                    foreach (SPListItem item in collection)
                    {
      foreach (SPWorkflow workflow in manager.GetItemActiveWorkflows(item))
                        {
                            foreach (SPWorkflowTask t in workflow.Tasks)
                            {
                                t["Status"] = "Canceled";
                                t.Update();
                            }
                            SPWorkflowManager.CancelWorkflow(workflow);
                        }
                        break;
                    }
                });

Saturday, November 17, 2012

How to restrict the '/_layouts/viewlsts.aspx' page from anonymous users in SharePoint 2010

Reference Links:
Locking down Office SharePoint Server sites
C:\inetpub\wwwroot\wss\VirtualDirectories\1234\web.config
<location path="_layouts/viewlsts.aspx">
            <system.web>
                  <authorization>
                       <allow users="domainname\user1,domainname\user2"/>
                        <deny users="?" />
                        <deny users="*" />
                  </authorization>
            </system.web>
      </location>
Inline image 1