16 de noviembre de 2015

Project Server: Eliminar Proyectos con PowerShell de forma masiva

Recientemente tuve la necesidad de eliminar de forma masiva una serie de proyectos desde una instancia de Project Server. El cliente en cuestión estaba enfrascado en un proceso de limpieza, quería eliminar de la instancia de Project Server actual, todos aquellos proyectos que consideraban obsoletos (eliminar todos los proyectos que cumplieran una determinada condición)

Con este escenario teníamos 2 opciones:

  1. Eliminar los proyectos mediante la interface de usuario, esta eliminación sería uno por uno.
  2. Realizar un Script PowerShell que eliminara los proyectos de forma automática.

Dado que la cantidad de proyectos a eliminar eran más de 500, nos decidimos por la segunda opción, aquí os dejo el script PowerShell:

# Establecer la conexión a la BBDD

$connection = new-object system.data.sqlclient.sqlconnection

$connection.ConnectionString = "Data Source=MiSqlServer;Initial Catalog=ProjectServer_Reporting;User ID=MiLoginUser;Password=MiLoginPassword;MultipleActiveResultSets=True"

$connection.open()

 

# Obtener la lista de proyectos a eliminar 

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = "SELECT ProjectUID, ProjectName FROM dbo.MSP_EpmProject_UserView WHERE Year < 2014 ORDER BY ProjectName " 

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$SqlCmd.Connection = $connection 

$DataSet = New-Object System.Data.DataSet 

$SqlAdapter.Fill($DataSet)

 

# Eliminar los proyectos y los sitios de proyectos asociados

$svcPSProxy = New-WebServiceProxy -uri "http://MiServidorProjectServer/PWA/_vti_bin/PSI/Project.asmx?wsdl" -UseDefaultCredential

foreach ($row in $DataSet.Tables[0])

{ 

    if ($row.ItemArray.Count -gt 0)

    {

        Write-Host "Deleting project" $row[1] 

        $projId = [System.Guid]$row[0]

        $svcPSProxy.QueueDeleteProjects([System.Guid]::NewGuid() , "true", $projId, "true")

    }

}

 

$connection.Close()

 

Notas:

  • En el script PowerShell hemos cambiado los datos que son propios del cliente (url de la instancia de Project Server, datos de conexión a la BBDD, condición para eliminar el proyecto)
  • El script funcionó en Project Server 2010, debería funcionar también en Project Server 2013.

1 comentario:

  1. Hola, tienes desarrollado un ejemplo sobre:
    jqGrid con ASP.NET y AJAX, al final del articulo pones un enlace para descargar el ejemplo, pero lamentablemente este falla:

    http://demos.esasp.net/rar/jQuery/JQGrid_SolucionASP.NET.rar
    Me interesa bastante este ejemplo, es lo que estoy buscando, te agradecería si pudieses enviármelo a mí mail walmanren@yahoo.es o en todo caso corregir el link para poder bajarlo.
    Disculpa que trate esto en este tema, pero no encontraba la manera de comunicarte al respecto de este inconveniente, desde ya muchas gracias.

    ResponderEliminar