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