PROJECT SERVER 2010 & PROJECT SERVER 2013. CREACION AUTOMATICA DE PROYECTOS USANDO POWERSHELL.
Buenas,
En este post queríamos haceros llegar este script de PowerShell para generar proyectos de manera automática en nuestro sitio de Project Web Access (PWA).
El post original, creado por nuestro colega Jim E. Cox, puede encontrarse aquí:
El script como tal está publicado en este enlace:
https://gallery.technet.microsoft.com/office/Create-projects-with-tasks-ae97329e
A continuación os lo ofrecemos, habiendo modificado ligeramente comentarios, para que aparezcan en castellano:
<<<<<<<<<<
<#
Al ejecutarse el script el usuario indica la cantidad de proyectos que se van a crear y el número de tareas.
El script procederá a crear, publicar, generar el equipo, publicar, añadir tareas, publicarse otra vez, y dejar el proyecto protegido.
Debemos estar seguros de haber accedido al sitio PWA, y luego invocar PowerShell, de tal manera que nos aseguremos los servicios web estén inicializados, y no tengamos errores
Make sure you fire up PWA and then fire up PowerShell, this way the web services are initialized and you will not see error creating a project dataset.
#>
cls
# Indicamos las variables
$SessionGuid = [System.Guid]::NewGuid()
$SessionDescr = "Create Projects,Add tasks session"
#$NewJobGuid = [System.Guid]::NewGuid()
$EPMTYGUID = [system.guid]::empty
$PWAUrl = “<https://LOSPER/ENG”>
$ProjCount = Read-host "¿Cuántos proyectos quieres crear?"
$TaskCount = read-host "¿Cuántas tareas añadimos a cada proyecto?"
# Iniciamos los servicios web PSI
#Project Web Service
$ProjSvcURL = $PWAUrl + "/_vti_bin/PSI/Project.asmx?wsdl"
$ProjSvcProxy = New-WebServiceProxy -uri $ProjSvcURL -useDefaultCredential #-credential $Credential
#Resource web service
$ResSvcUrl = $pwaUrl + "/_vti_bin/PSI/Resource.asmx?wsdl"
$ResSvcProxy = New-WebServiceProxy -uri $ResSvcUrl -useDefaultCredential #-credential $Credential
#Queue web service
$QSvcUrl = $pwaUrl + "/_vti_bin/PSI/QueueSystem.asmx?wsdl"
$QSvcProxy = New-WebServiceProxy -uri $QSvcUrl -useDefaultCredential #-credential $Credential
$p = 1
While ($p -le $ProjCount)
{
$NewJobGuid = [System.Guid]::NewGuid()
$ProjGuid = [System.Guid]::NewGuid()
$projDataSet = New-Object Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1_vti_bin_PSI_Project_asmx_wsdl.ProjectDataSet
$projRow = $projDataSet.Project.NewProjectRow()
# set some project level properties
$projRow.PROJ_UID = $ProjGuid
$projRow.PROJ_NAME = "Test Project " + $p + " Proj Guid " + $ProjGuid #$CsvRow.ProjName
$projRow.PROJ_TYPE = 0;
$projDataSet.Project.AddProjectRow($projRow)
$ProjSvcProxy.QueueCreateProject($NewJobGuid, $ProjDataSet, $false);
$ProjSvcProxy.QueuePublish($NewJobGuid, $projRow.PROJ_UID, "true","")
sleep 2
#### En este punto se crea un proyecto vacío, se publica y se protege
# Se crea el equipo y se rellena la hoja de recursos
$dsProjectTeam = $ProjSvcProxy.ReadProjectTeam("$ProjGuid");
$AllResources = $ResSvcProxy.ReadUserList("ALL").Resources | ?{$_.RES_Name -like "Pm*" -or $_.RES_Name -like "tm*"} #| ft RES_UID, RES_Name -hidetableheaders
Foreach ($Resource in $AllResources)
{
$NewResRow = $dsProjectTeam.ProjectTeam.NewProjectTeamRow();
$NewResRow.NEW_RES_UID = $Resource.RES_UID; # GUID del recurso de empresa
$NewResRow.PROJ_UID = $ProjGuid;
$NewResRow.RES_UID = $Resource.RES_UID; #Se requiere el mismo GUID
$NewResRow.RES_IS_ENTERPRISE_RESOURCE = $true;
$dsProjectTeam.ProjectTeam.Rows.Add($NewResRow);
}
$ProjSvcProxy.CheckOutProject("$ProjGuid", $sessionGuid, $SessionDescr);
$ProjSvcProxy.QueueUpdateProjectTeam($NewJobGuid, $sessionGuid, $ProjGuid, $dsProjectTeam);
$ProjSvcProxy.QueuePublish($NewJobGuid, $projRow.PROJ_UID, $true,"")
#sleep 5
# Se añaden las tareas. Indica la cantidad con la variable $TaskCount mencionada anteriormente, el valro por defecto es 10 tareas
$ProjDataset = New-Object Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1_vti_bin_PSI_Project_asmx_wsdl.ProjectDataSet
$i = 1
While ($i -le $TaskCount)
{
$NewTaskGuid = [System.Guid]::NewGuid()
$NewTaskRow1 = $ProjDataSet.Task.NewTaskRow();
$NewTaskRow1.PROJ_UID = $ProjGuid;
$NewTaskRow1.TASK_UID = $NewTaskGuid
$NewTaskRow1.TASK_DUR_FMT = 53;
$NewTaskRow1.TASK_DUR = 4800;
$NewTaskRow1.TASK_NAME = "Task $i";
$NewTaskRow1.TASK_START_DATE = [datetime]::Now;
$ProjDataSet.Task.AddTaskRow($NewTaskRow1);
$i = 1 + $i
}
# Añadimos los valroes de arriba al proyecto, lo publicamos y lo protegemos
$ProjSvcProxy.QueueAddToProject($NewJobGuid, $SessionGUID, $ProjDataSet, $false);
$ProjSvcProxy.QueuePublish($NewJobGuid, $ProjGuid, "true","")
#sleep 5
$ProjSvcProxy.QueueCheckInProject($NewJobGuid, $ProjGuid, $false, $SessionGuid, $SessionDescr);
$p = 1 + $p
}
>>>>>>>>>>>
Hemos estado realizando pruebas con él, y el resultado es realmente prometedor.
Esperamos os resulte de interés, un saludo.
Jorge Puig