Thursday, September 26, 2013

Simple PowerShell script to CheckIn, Publish and Approve all items in SharePoint


SharePoint 2010
Add-PSSnapin "Microsoft.SharePoint.PowerShell"

### GLOBAL VARS, CHANGE HERE
$listname = "Pages" 
$url = "http://localhost"
 
function approveContent ($w, $listName) {
  $list = $w.Lists |? {$_.Title -eq $listName}
  foreach ($item in $list.Items) 
  {
    if(($item -ne $null) -and ($item.LockId -ne $null)) {
      $item.ReleaseLock($item.LockId)
    }
    if( $item.File -ne $null) { $itemFile = $list.GetItemById($item.ID).File }
    else { $itemFile = $list.GetItemById($item.ID) }
    
    if( $itemFile.CheckOutStatus -ne "None" ) { 
      $itemFile.CheckIn("Automatic CheckIn. (Administrator)")
      if( $item.File -ne $null) { $itemFile = $list.GetItemById($item.ID).File }
      else { $itemFile = $list.GetItemById($item.ID) }
    }
    if( $list.EnableVersioning -and $list.EnableMinorVersions) { 
      $itemFile.Publish("Automatic Publish. (Administrator)")
      if( $item.File -ne $null) { $itemFile = $list.GetItemById($item.ID).File }
      else { $itemFile = $list.GetItemById($item.ID) }
    }
    if( $list.EnableModeration ) { 
      $itemFile.Approve("Automatic Approve. (Administrator)") 
    }
  }
}
 
$site = Get-SPSite $url
foreach ( $web in $site.AllWebs )
{
 approveContent $web $listname
}
Write-Output "OK"

For SharePoint 2007, simply replace the first line: 
Add-PSSnapin "Microsoft.SharePoint.PowerShell"
With:
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

function Get-SPSite([string]$url) {

  New-Object Microsoft.SharePoint.SPSite($url)
}

function Get-SPWeb([string]$url) {

  $SPSite = Get-SPSite $url
  return $SPSite.OpenWeb()
  $SPSite.Dispose()
}

No comments:

Post a Comment