Showing posts with label Publish and Approve all items in SharePoint. Show all posts
Showing posts with label Publish and Approve all items in SharePoint. Show all posts

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()
}