Project Server 2010 SP1: échec de génération du cube

Contexte:

  • Project Server 2010 SP1
  • Génération d’un cube OLAP
Problème:
Après avoir pourtant fonctionné, la génération du cube ne se fait plus.
Symptômes:
Depuis l’eventlog
Source:Project Server   Event ID:7704
Erreur PS : GeneralQueueJobFailed (26000)

A queue job has failed. This is a general error logged by the Project Server Queue everytime a job fails – for effective troubleshooting use this error message with other more specific error messages (if any), the Operations guide (which documents more details about queued jobs) and the trace log (which could provide more detailed context). More information about the failed job follows. GUID of the failed job: . Name of the computer that processed this job: MyServer (to debug further, you need to look at the trace log from this computer). Failed job type: CBSRequest. Failed sub-job type: CBSQueueMessage. Failed sub-job ID: 2. Stage where sub-job failed: (this is useful when one sub-job has more than one logical processing stages).

Dans les logs SharePoint (ULS):

Cette méthode peut uniquement convertir les revendications d’identité et uniquement lorsqu’il existe une conversion logique.  Parameter name: encodedClaim
ConvertWindowsClaimToWindowsPrincipalName() encountered error: Some or all identity references could not be translated.

 

Résolution:

Parmi les utilisateurs déclarés dans Project, un ou plusieurs ont disparus d’Active Directory.
Normalement, cela est géré automatiquement si:

  • Le service « user profile Synchronization » fonctionne,
  • Les groupes project sont synchronisés avec des groupes AD
  • Une synchro AD et une synchro des groupes Project ont tourné depuis la suppression.
Si vous n’avez pas de synchro AD ou qu’elle est cassée, vous voici donc ici. Ce message d’erreur ne semble se produire qu’à partir du SP1 et quand on est en mode Claim.
Pour résoudre manuellement, il faut vérifier si chaque user existe toujours dans l’AD.
Voici un script permettant d’automatiser ce dur labeur:

import-module « ActiveDirectory« 
$pwaUrl=« http://myspssite/pwa« 
$svcProjectUrl=$pwaUrl+« /_vti_bin/PSI/Resource.asmx?wsdl« 
$c=Get-Credential
$svcProjectProxy=New-WebServiceProxy -uri $svcProjectUrl -credential $c

$users=$svcProjectProxy.ReadUserList(« Active« ).Resources
foreach ($u in $users)
{
$temp= [regex]::Replace($u.WRES_ACCOUNT, « ^.*\« , «  »);
if ((get-aduser $temp) -eq $false)
{
« missing ad user « +($u.RES_NAME)
}
}