Section One (Set up)
#get the site url to deploy
workflow to
param($siteUrl=$(read-host "Please
provide web app url of the list to be delete (EG:'http://Wingtip'):"))
#ensure that user provided site
url parameter
if($siteUrl -eq $null -or $siteUrl -eq '')
{
    throw "You must specify your server
name. Value provided was null/empty."
}
#function to load SharePoint
Powershell snap in
function LoadSharePointPowerShellEnviroment
{
 #clear the screen of pevious output
Clear-Host
 write-host "Setting
up Powershell enviroment for Sharepoint" -foregroundcolor Blue
 Add-PSSnapin "Microsoft.Sharepoint.PowerShell" -ErrorAction SilentlyContinue
 Write-host "Sharepoint
PowerShell Snapin loaded." -foregroundcolor Green
}
#call sharepoint plugin function
LoadSharePointPowerShellEnviroment
Section Two(Declare constants)
#get site using parameter
$site = Get-SPSite($siteUrl)
#Name of task list to delete
$listName = "Approval
Tasks"
#approval workflow ID, specified
in elements file of workflow
$APPROVALWORKFLOWID =
[GUID]("64f076cb-a5f8-4ee7-9ef4-54820d291886");
Section Three(remove workflow function)
#remove workflow function
function RemoveAssociation($web, $listName)
{
      #library the
workflow is runnion on
      $listInstance = $web.Lists.TryGetList($listName)
      #make sure the
library exists
      if($listInstance -ne $null)
      {     
            #get the number
of workflows running on library
            $i = $listInstance.WorkflowAssociations.Count
- 1
            While($i -gt -1)
            {
                  #if workflow is
ours, and it has 0 running then remove it.
                  if($listInstance.WorkflowAssociations[$i].BaseTemplate.Id.Equals($APPROVALWORKFLOWID) -and
                     $listInstance.WorkflowAssociations[$i].RunningInstances
-eq 0)
                  {
                        Write-Host "Removing
Workflow " $listInstance.WorkflowAssociations[$i].Name "From" $listName -ForegroundColor DarkGreen
                        $listInstance.WorkflowAssociations.Remove($listInstance.WorkflowAssociations[$i])                     
                  }
                  $i--
            }
      }     
      $listInstance = $null
      $web.Dispose()
}
Section Three(traverse all webs and remove list)
#itterate through all subsites
foreach ($web in $site.AllWebs) 
{
      #get the list
you whish to delete
      $listToDelete = $web.Lists.TryGetList($listName)
      #if the list
exists delete it
      if($listToDelete -ne $null)
    {
            Write-Host $listToDelete.RootFolder $listName " has been
deleted" -ForegroundColor Green
        $web.Lists.Delete($listToDelete.ID)
            $web.Update()
    }
      #remove the
workflow from libraries
      RemoveAssociation $web "Pages"
      RemoveAssociation $web "Images"
      RemoveAssociation $web "Documents"
    $web.Dispose()
}
$site.Dispose()
Write-Host
"Script Complete" -ForegroundColor
Blue
