N'oubliez pas qu'il faut activer l'exécution de scripts powershell non signés avec la commande Set-ExecutionPolicy Unrestricted;

En s'aidant de quelques exemples et de la documentation d'AMO, voilà ce que donne le script CreateRole.PS1 :

# Charger les assembly nécessaires
[System.reflection.Assembly]::LoadWithPartialName(“Microsoft.AnalysisServices”)
[System.reflection.Assembly]::LoadWithPartialName(“System.IO”)
# Connexion à la base SSAS
$svr = new-Object Microsoft.AnalysisServices.Server
$svr.Connect(“MyServer”)
$dbname = “MyDatamart”
$db = $svr.Databases.item($dbname)
# Print nom de la base
“Ajouter les rôles à la base: ” + $db.Name
# lecture du fichier
$roleLines = Get-Content “E:\agences.txt”

# pour chaque ligne du fichier
foreach ($roleName in $roleLines)
{
“Traitement du rôle pour agence: ” + $roleName
$agencerolename = "Agence_"+$roleName
$groupname = “DOMAIN_NAME\GG_AG_” + $roleName

#Suppression si existence
$roleToDelete = $db.Roles.FindByName($agencerolename)
if ($roleToDelete)
{
“Rôle trouvé, suppression!”
$roleToDelete.Drop(“AlterOrDeleteDependents”)

$error.clear()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Erreur de suppression : ” + $error[0])
}
}
else
{
#Création du rôle et ajouter groupe AD
[Microsoft.AnalysisServices.Role] $roleToCreate = new-Object([Microsoft.AnalysisServices.Role])($agencerolename)
$roleToCreate.Members.Add($groupname)
“… ‘” + $roleToCreate.Name + “‘ ajout à la base”
$db.Roles.Add($roleToCreate)
$error.clear()
$roleToCreate.Update()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Error Adding to DB: ” + $error[0])
}
else
{
#Création des permissions de db
“… ‘” + $roleToCreate.Name + “‘ mise à jour des permissions de base”
$dbperm = $db.DatabasePermissions.Add($roleToCreate.ID)
$dbperm.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
$error.clear()
$dbperm.Update()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Erreur mise à jour DB Perms: ” + $error[0])
}
else
{
# Permissions pour le cube
$cubename = "MyCube"
$cube=$svr.Databases.Item($dbname).Cubes.FindByName($cubename)
#Permission de lecture sur le cube
“… ‘” + $roleToCreate.Name + “‘ ajout permissions dans : ‘” + $cube.Name + “‘ cube”
$cubeperm = $cube.CubePermissions.Add($roleToCreate.ID)
$cubePerm.Read = [Microsoft.AnalysisServices.ReadAccess]::Allowed
$error.clear()
$cubeperm.Update()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Error mise à jour Cube Perms: ” + $error[0])
}
# Ajouter les interdictions sur les mesures
“… ‘” + $roleToCreate.Name + “‘ Ajouter interdiction sur les mesures”
$cube.CubePermissions.FindByRole($roletocreate.ID).DimensionPermissions.Add("Measures").AttributePermissions.Add("Measures").DeniedSet="{[Measures].[Salaire], [Measures].[Charges Patronales]}"
$error.clear()
$cube.CubePermissions.FindByRole($roletocreate.ID).Update()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Erreur interdiction mesures: ” + $error[0])
}
# Ajouter les permissions sur les dimensions de cube
“… ‘” + $roleToCreate.Name + “‘ Ajouter autorisation sur le référentiel”
$cube.CubePermissions.FindByRole($roletocreate.ID).DimensionPermissions.Add("Dim Referentiel").AttributePermissions.Add("Agence").AllowedSet="{[Référentiel Organisationnel].[Agence].["+$roleName+"]}"
$cube.CubePermissions.FindByRole($roletocreate.ID).DimensionPermissions.Find("Dim Referentiel").AttributePermissions.Find("Agence").VisualTotals=1
$error.clear()
$cube.CubePermissions.FindByRole($roletocreate.ID).Update()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Erreur permissions référentiel: ” + $error[0])
}
# Ajouter le visualtotal sur les dimensions de cube
“… ‘” + $roleToCreate.Name + “‘ Ajouter autorisation sur le référentiel”
$cube.CubePermissions.FindByRole($roletocreate.ID).DimensionPermissions.Find("Dim Referentiel").AttributePermissions.Find("Agence").VisualTotals=1
$error.clear()
$cube.CubePermissions.FindByRole($roletocreate.ID).Update()
if ($error[0])
{
$sw.WriteLine($agencerolename + “: Erreur visualtotal référentiel: ” + $error[0])
}
}
}
}
}
#cleanup
$sw.close()
$svr.Disconnect()