Créer UN package de déploiement MDS c’est facile et expliqué ici => http://msdn.microsoft.com/fr-fr/library/hh479639.aspx mais comment diantre créer tous les packages de déploiement sans taper toutes les commandes à la main !
La solution propre serait d’utiliser l’API WCF de MDS pour récupérer les modèles mais cela nécessite le déploiement d’un code compilé sur les différents serveurs, ce qui ne me convient pas.
J’ai donc fait un script Powershell qui tape directement dans la base MDS, pas très élégant mais cela fonctionne.
Le script :
#Parameters #MDS Database $MDSdb="MDS" #Serveur Name, with named instance if required $MDSServeur = "." $MDSPath = "C:\Program Files\Microsoft SQL Server\110\Master Data Services\Configuration" #Your MDS Service name, you can fin the name with this command : MDSModelDeploy listservices $MDSServiceName = "MDS1" $CurrentPath = $(get-location) #The destination Path where .pkg files will be created, absolute or relative $DestPath = ".\Packages\" cd $MDSPath # Create SqlConnection object and define connection string $con = New-Object System.Data.SqlClient.SqlConnection $con.ConnectionString = "Server=$MDSServeur; Database=$MDSdb; Integrated Security=true" $con.open() # Create SqlCommand object, define command text, and set the connection $cmd = New-Object System.Data.SqlClient.SqlCommand $cmd.CommandText = "SELECT DISTINCT TM.[Name] AS ModelName ,MAX(MV.Name) AS VersionName FROM [MDS].[mdm].[tblModel] TM INNER JOIN MDS.mdm.tblModelVersion MV ON MV.Model_ID=TM.ID WHERE [IsSystem] = 0 GROUP BY TM.[Name]" $cmd.Connection = $con # Create SqlDataReader $dr = $cmd.ExecuteReader() If ($dr.HasRows) { Write-Host Number of Models: $dr.FieldCount Write-Host While ($dr.Read()) { $packageName=$DestPath+$dr['ModelName']+".pkg" if(Test-Path $packageName) { rm $packageName } if(!(Test-Path $DestPath)) { md -Path $DestPath } Write-Host Génération du package pour le model : $dr["ModelName"] Version: $dr["VersionName"] ./MDSModelDeploy.exe createpackage -model $dr['ModelName'] -version $dr['VersionName'] -service $MDSServiceName -package $packageName -includedata } } Else { Write-Host No models } cd $CurrentPath
Le fichier est disponible au téléchargement ici => MDSDeploy
******* Update du 22/04/2013 ********
Suite au commentaire de Roman, voici un script basé sur les commandes mdsmodeldeploy.exe listmodels et listversion. Ce n’est clairement pas plus simple (car bricolage de chaîne de caractère) mais plus dans la bonne pratique car on ne tape pas directement dans la base SQL de MDS.
#Parameters #MDS Database $MDSdb="MDS" #Serveur Name, with named instance if required $MDSServeur = "." $MDSPath = "C:\Program Files\Microsoft SQL Server\110\Master Data Services\Configuration" #Your MDS Service name, you can fin the name with this command : MDSModelDeploy listservices $MDSServiceName = "MDS1" $CurrentPath = $(get-location) #The destination Path where .pkg files will be created, absolute or relative $DestPath = ".\Packages\" cd $MDSPath $i = 0 $output = ./MDSModelDeploy.exe listmodels -service MDS1 foreach($lineOutput in $output) { if($i -ne 0 -and $i -lt ($output.count - 2)) { $packageName=$DestPath+$lineOutput+".pkg" if(Test-Path $packageName) { rm $packageName } if(!(Test-Path $DestPath)) { md -Path $DestPath } Write-Host Génération du package pour le model : $lineOutput $outputVersion = ./MDSModelDeploy.exe listversions -service $MDSServiceName -model $lineOutput $j=0 foreach($lineOutputVersion in $outputVersion) { if($j -eq ($outputVersion.count - 3)) { ./MDSModelDeploy.exe createpackage -model $lineOutput -service $MDSServiceName -package $packageName -includedata -version $lineOutputVersion } $j++ } } $i++ }
4 Comments
[…] ← Previous […]
Bonjour Charles-Henri,
Bon script et bon blog! Normalement tu n’as pas besoin de passer par la base de données car l’outil MDSModelDeploy.exe permet de lister en passant les paramètres listservices / listmodels / listversions.
Roman
Hello Roman,
Merci pour tes retours, en effet il sera pas plus mal d’utiliser MDSModelDeploy.exe listmodels -service MDS1 et je n’avais pas trouvé cette commande sur MSDN ! (MDS est pourtant si bien documenté ! ) Je fais une version du script utilisant MDSDeploy pour lister les entités 🙂
Voilà j’ai ajouté un script en version mdsmodeldeploy.exe