Powershell: Project Server Set-SPProjectWebInstance & miroir SQL

Si vous devez mettre en mirroir SQL les bases project, vous trouverez sur le net 2 choses à faire parmi pas mal:

  • Set-SPProjectWebInstance en précisant PrimaryDBMirrorServer et ReportingDBMirrorServer
  • AddFailoverServiceInstance
D’après mes essais, la seconde ne suffit pas à elle seule. Et là commence la joie des cmdlet pas tout à fait finie…Je m’explique: Cette commande permet bien de configurer un serveur SQL miroir, mais son équivalent en Get- ne permet pas de voir ces valeurs!

Donc pas moyen de savoir si quelqu’un l’a fait avant vous, ou si les paramètres sont les bons..
D’autre part, quand on a beaucoup d’instance, il est intéressant d’utiliser son homologue Get-SPProjectWebInstance pour faire une boucle. Sauf que ce dernier n’est pas ergonomique en plus de ne pas donner toutes les propriétés. Voici un script qui:

  • Récupère la liste de toutes url PWA via l’application de service (non non ils ne pouvaient pas le programmer par défaut)
  • Enlève le « / » à la fin de l’url (sinon le Set- plante !)
  • Repositionne tous les paramètres à l’identique (sisi il faut) et ajoute l’instance miroir (ouf).

 

$work=Get-SPServiceApplication | ?{$_.DisplayName -match"Project"} | Get-SPProjectWebInstance 
foreach ($item in $work) 
{ 
Write-Output"doing $($item.url)"
$mirror=$item.PrimaryServer -replace ("sqlone","sqltwo") 
Set-SPProjectWebInstance -Url ($item.Url).ToString().TrimEnd('/') ` 
-AdminAccount $item.AdminAccount ` 
-PrimaryDbserver $item.PrimaryServer ` 
-ArchiveDbname $item.ArchiveDatabase ` 
-DraftDbname $item.DraftDatabase ` 
-PublishedDbname $item.PublishedDatabase ` 
-ReportingDbServer $item.ReportingServer ` 
-ReportingDbname $item.ReportingDatabase ` 
-PrimaryDBMirrorServer $mirror` 
-ReportingDBMirrorServer $mirror 
}