Dans l’article précédent, je vous ai montré Dans l’article précédent, je vous ai montré par l’interface graphique. Maintenant je passe à la vitesse supérieure en vous montrant comment industrialiser cela en PowerShell.

Configurer le service de métadonnées gérées et le concentrateur de type de contenu

$MmsName = "Managed Metadata Service"
$HubUrl = "http://contenttypehub.contoso.com"
# set or change HubUri on the given Managed Metadata Service
# activate the Content Type Hub Syndication feature on the site collection (9a447926-5937-44cb-857a-d3829301c73b)
Get-SPServiceApplication -Name $MmsName | Set-SPMetadataServiceApplication -HubURI $HubUrl -Confirm:$false
    
# Enable content type syndication and content type Pushdown in Menaged Metadata Service
Get-SPMetadataServiceApplicationProxy -Identity $MmsName | Set-SPMetadataServiceApplicationProxy -ContentTypeSyndicationEnabled -ContentTypePushdownEnabled -Confirm:$false
Astuce:
Par la centrale d’administration, il est impossible de modifier l’URL du CTH après l’avoir renseignée au niveau du MMS. Au besoin vous pouvez le faire avec la commande PowerShell Set-SPMetadataServiceApplication.

Créer des types de contenu

Je vais juste montrer l’association du modèle de document au type de contenu.

Function AddTemplateToCT($ContentType, $TemplateName, $TemplatePath)
{
   $fileMode = [System.IO.FileMode]::Open
   try
   {
      #upload template
      $fileStream = New-Object "System.IO.FileStream" -ArgumentList $TemplatePath, $fileMode
      $ContentType.ResourceFolder.Files.Add($TemplateName, $fileStream, $true) | Out-Null
      $fileStream.Close()

      #set the current document template file to be the document template
      $ContentType.DocumentTemplate = $docTemp.TargetName
      #update the content type
      $ContentType.Update($true)
   }
   finally
   {
      $fileStream.Close()
   }
}

Publier (ou republier) les types de contenu

$CTPublish = New-Object Microsoft.SharePoint.Taxonomy.ContentTypeSync.ContentTypePublisher ($HubUrl)
$spWeb = Get-SPWeb $HubUrl
# $ctToPublish contains the name of every content type to be published
foreach($ct in $ctToPublish)
{
   $SPCT = $spweb.ContentTypes[$ct]
   if($SPCT -ne $null)
   {
      $CTPublish.Publish($SPCT)
   }
}

$spWeb.Dispose()

Exécuter les timer job

#Run the Content Type Hub timer job</pre>
$ContentTypeHubTimerJob = Get-SPTimerJob "MetadataHubTimerJob"
$ContentTypeHubTimerJob.RunNow()

#Run the Content Type Subscriber timer job for a specific Web Application
$ContentTypeSubscriberTimerJob = Get-SPTimerJob "MetadataSubscriberTimerJob" -WebApplication $webappUrl
$ContentTypeSubscriberTimerJob.RunNow()

Avec ces quelques lignes pour initier le mouvement, qu’est ce qui vous empêche encore de mettre en place un content type hub ?