Voici un petit post pour présenter deux scripts que j’ai trouvé sur le forum VMware provenant des maitres du scripting PowerCLI Virtu-al & LucD, qui permet de ressortir la configuration du SSO, rien que ça…
Le XML intègre les Roles ainsi que leurs Privilèges, mais aussi les Permissions associées au différentes Entités. On a ainsi un bundle de tout notre SSO et il y a même un script d’import, amazing !
Attention toutefois, il vous faut importer auparavant les différents folders ainsi que les utilisateurs et groupes du SSO VMware !
PS : J’ai corrigé et testé le code, si jamais vous avez une erreur vérifiez bien les guillemets …
[pastacode lang= »bash » manual= »%23%20Parameters%0A%24OutputDir%20%3D%20%22C%3A%5CvCenter_SSO.xml%22%0A%0A%23%20Root%20of%20the%20XML%20file%0A%24global%3AvInventory%20%3D%20%5Bxml%5D%22%3CInventory%3E%3C%2FInventory%3E%22%0A%0A%23%20Functions%0Afunction%20New-XmlNode%7B%0A%09param(%24node%2C%20%24nodeName)%0A%0A%09%24tmp%20%3D%20%24global%3AvInventory.CreateElement(%24nodeName)%0A%09%24node.AppendChild(%24tmp)%0A%7D%0A%0Afunction%20Set-XmlAttribute%7B%0A%09param(%24node%2C%20%24name%2C%20%24value)%0A%0A%09%24node.SetAttribute(%24name%2C%20%24value)%0A%7D%0Afunction%20Get-XmlNode%7B%0A%09param%20(%24path)%0A%09%24global%3AvInventory.SelectNodes(%24path)%0A%7D%0A%0Afunction%20Get-Roles%7B%0A%20%20begin%7B%0A%20%20%20%20%24authMgr%20%3D%20Get-View%20AuthorizationManager%0A%20%20%20%20%24report%20%3D%20%40()%0A%20%20%7D%0A%20%20process%7B%0A%20%20%20%20foreach(%24role%20in%20%24authMgr.roleList)%7B%0A%20%20%20%20%20%20%24ret%20%3D%20New-Object%20PSObject%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Name%22%20-Value%20%24role.name%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Label%22%20-Value%20%24role.info.label%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Summary%22%20-Value%20%24role.info.summary%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22RoleId%22%20-Value%20%24role.roleId%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22System%22%20-Value%20%24role.system%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Privilege%22%20-Value%20%24role.privilege%0A%20%20%20%20%20%20%24report%20%2B%3D%20%24ret%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20end%7B%0A%20%20%20%20return%20%24report%0A%20%20%7D%0A%7D%0Afunction%20Get-Permissions%0A%7B%0A%20%20begin%7B%0A%20%20%20%20%24report%20%3D%20%40()%0A%20%20%20%20%24authMgr%20%3D%20Get-View%20AuthorizationManager%0A%20%20%20%20%24roleHash%20%3D%20%40%7B%7D%0A%20%20%20%20%24authMgr.RoleList%20%7C%20%25%7B%0A%20%20%20%20%20%20%24roleHash%5B%24_.RoleId%5D%20%3D%20%24_.Name%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20process%7B%0A%20%20%20%20%24perms%20%3D%20%24authMgr.RetrieveAllPermissions()%0A%20%20%20%20foreach(%24perm%20in%20%24perms)%7B%0A%20%20%20%20%20%20%24ret%20%3D%20New-Object%20PSObject%0A%20%20%20%20%20%20%24entity%20%3D%20Get-View%20%24perm.Entity%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Entity%22%20-Value%20%24entity.Name%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22EntityType%22%20-Value%20%24entity.gettype().Name%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Group%22%20-Value%20%24perm.Group%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Principal%22%20-Value%20%24perm.Principal%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Propagate%22%20-Value%20%24perm.Propagate%0A%20%20%20%20%20%20%24ret%20%7C%20Add-Member%20-Type%20noteproperty%20-Name%20%22Role%22%20-Value%20%24roleHash%5B%24perm.RoleId%5D%0A%20%20%20%20%20%20%24report%20%2B%3D%20%24ret%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20end%7B%0A%20%20%20%20return%20%24report%0A%20%20%7D%0A%7D%0A%24global%3AvInventory%20%3D%20%5Bxml%5D%22%3CInventory%3E%3CRoles%2F%3E%3CPermissions%2F%3E%3C%2FInventory%3E%22%0A%0A%23%20Main%0A%23%20Roles%0A%20%20%24XMLRoles%20%3D%20Get-XmlNode%20%22Inventory%2FRoles%22%0AGet-Roles%20%7C%20where%20%7B-not%20%24_.System%7D%20%7C%20%25%20%7B%0A%20%20%24XMLRole%20%3D%20New-XmlNode%20%24XMLRoles%20%22Role%22%0A%20%20Set-XmlAttribute%20%24XMLRole%20%22Name%22%20%24_.Name%0A%20%20Set-XmlAttribute%20%24XMLRole%20%22Label%22%20%24_.Label%0A%20%20Set-XmlAttribute%20%24XMLRole%20%22Summary%22%20%24_.Summary%0A%20%20%24_.Privilege%20%7C%20%25%20%7B%0A%20%20%20%20%24XMLPrivilege%20%3D%20New-XmlNode%20%24XMLRole%20%22Privilege%22%0A%20%20%20%20Set-XmlAttribute%20%24XMLPrivilege%20%22Name%22%20%24_%0A%20%20%7D%0A%7D%0A%0A%23%20Permissions%0A%24XMLPermissions%20%3D%20Get-XmlNode%20%22Inventory%2FPermissions%22%0AGet-Permissions%20%7C%20%25%20%7B%0A%20%20%24XMLPerm%20%3D%20New-XmlNode%20%24XMLPermissions%20%22Permission%22%0A%20%20Set-XmlAttribute%20%24XMLPerm%20%22Entity%22%20%24_.Entity%0A%20%20Set-XmlAttribute%20%24XMLPerm%20%22EntityType%22%20%24_.EntityType%0A%20%20Set-XmlAttribute%20%24XMLPerm%20%22Group%22%20%24_.Group%0A%20%20Set-XmlAttribute%20%24XMLPerm%20%22Principal%22%20%24_.Principal%0A%20%20Set-XmlAttribute%20%24XMLPerm%20%22Propagate%22%20%24_.Propagate%0A%20%20Set-XmlAttribute%20%24XMLPerm%20%22Role%22%20%24_.Role%0A%7D%0A%0A%23%20Create%20XML%20file%0A%24global%3AvInventory.Save(%24OutputDir) » message= »Export vCenter SSO » highlight= » » provider= »manual »/]
[pastacode lang= »bash » manual= »%23%20Variable%0A%24XMLfile%20%3D%20%22C%3A%5CvCenter_SSO.xml%22%0A%0A%23%20Functions%0Afunction%20New-Role%0A%7B%0A%20%20%20%20param(%24name%2C%20%24privIds)%0A%20%20%20%20Begin%7B%7D%0A%20%20%20%20Process%7B%0A%0A%20%20%20%20%20%20%20%20%24roleId%20%3D%20%24authMgr.AddAuthorizationRole(%24name%2C%24privIds)%0A%20%20%20%20%7D%0A%20%20%20%20End%7B%0A%20%20%20%20%20%20%20%20return%20%24roleId%0A%20%20%20%20%7D%0A%7D%0A%0Afunction%20Set-Permission%0A%7B%0Aparam(%0A%5BVMware.Vim.ManagedEntity%5D%24object%2C%0A%5BVMware.Vim.Permission%5D%24permission%0A)%0ABegin%7B%7D%0AProcess%7B%0A%20%20%20%20%24perms%20%3D%20%24authMgr.SetEntityPermissions(%24object.MoRef%2C%40(%24permission))%0A%7D%0AEnd%7B%0A%20%20%20%20return%0A%7D%0A%7D%0A%0A%23%20Main%0A%23%20Create%20hash%20table%20with%20the%20current%20roles%0A%24authMgr%20%3D%20Get-View%20AuthorizationManager%0A%24roleHash%20%3D%20%40%7B%7D%0A%24authMgr.RoleList%20%7C%20%25%20%7B%0A%20%20%20%20%24roleHash%5B%24_.Name%5D%20%3D%20%24_.RoleId%0A%7D%0A%0A%23%20Read%20XML%20file%0A%24vInventory%20%3D%20%5Bxml%5D%22%3Cdummy%2F%3E%22%0A%24vInventory.Load(%24XMLfile)%0A%0A%23%20Define%20Xpaths%20for%20the%20roles%20and%20the%20permissions%0A%24XpathRoles%20%3D%20%22Inventory%2FRoles%2FRole%22%0A%24XpathPermissions%20%3D%20%22Inventory%2FPermissions%2FPermission%22%0A%0A%23%20Create%20custom%20roles%0A%24vInventory.SelectNodes(%24XpathRoles)%20%7C%20%25%20%7B%0A%20%20%20%20if(-not%20%24roleHash.ContainsKey(%24_.Name))%7B%0A%20%20%20%20%20%20%20%20%24privArray%20%3D%20%40()%0A%20%20%20%20%20%20%20%20%24_.Privilege%20%7C%20%25%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%24privArray%20%2B%3D%20%24_.Name%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%24roleHash%5B%24_.Name%5D%20%3D%20(New-Role%20%24_.Name%20%24privArray)%0A%20%20%20%20%7D%0A%7D%0A%0A%23%20Set%20permissions%0A%24vInventory.SelectNodes(%24XpathPermissions)%20%7C%20%25%20%7B%0A%20%20%20%20%24perm%20%3D%20New-Object%20VMware.Vim.Permission%0A%20%20%20%20%24perm.group%20%3D%20%26%7Bif%20(%24_.Group%20-eq%20%22true%22)%20%7B%24true%7D%20else%20%7B%24false%7D%7D%0A%20%20%20%20%24perm.principal%20%3D%20%24_.Principal%0A%20%20%20%20%24perm.propagate%20%3D%20%26%7Bif(%24_.Propagate%20-eq%20%22true%22)%20%7B%24true%7D%20else%20%7B%24false%7D%7D%0A%20%20%20%20%24perm.roleId%20%3D%20%24roleHash%5B%24_.Role%5D%0A%0A%20%20%20%20%24EntityName%20%3D%20%24_.Entity.Replace(%22(%22%2C%22%5C(%22).Replace(%22)%22%2C%22%5C)%22)%0A%20%20%20%20%24EntityName%20%3D%20%24EntityName.Replace(%22%5B%22%2C%22%5C%5B%22).Replace(%22%5D%22%2C%22%5C%5D%22)%0A%20%20%20%20%24EntityName%20%3D%20%24EntityName.Replace(%22%7B%22%2C%22%5C%7B%22).Replace(%22%7D%22%2C%22%5C%7D%22)%0A%0A%20%20%20%20%24entity%20%3D%20Get-View%20-ViewType%20%24_.EntityType%20-Filter%20%40%7B%22Name%22%3D(%22%5E%22%20%2B%20%24EntityName%20%2B%20%22%24%22)%7D%0A%20%20%20%20Set-Permission%20%24entity%20%24perm%0A%7D » message= »Import vCenter SSO » highlight= » » provider= »manual »/]
Super !!
Merci, marche à merveille.
Très bon blog Mathieu.
Bonjour Mathieu, tout d’abord merci pour tes super script très bon taf ! J’ai réussi à exécuté celui de l’export import des dossiers + vm sans soucis mais celui du SSO bloque… Les rôles ce sont bien créer il à aussi placé les groupes sur les entités mais il n’a pas set les permissions… voilà l’erreur si jamais tu as une idée :
(VCSA 6.5 U1g)
Exception lors de l’appel de « SetEntityPermissions » avec « 2 » argument(s) : «
Required parameter entity is missing
while parsing call information for method SetEntityPermissions
at line 1, column 171
while parsing SOAP body
at line 1, column 64
while parsing SOAP envelope
at line 1, column 0
while parsing HTTP request for method setEntityPermissions
on object of type vim.AuthorizationManager
at line 1, column 0 »
Au caractère C:\export vcenter\import_sso.ps1:26 : 5
+ $perms = $authMgr.SetEntityPermissions($object.MoRef,@($permissio …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : VimException
Un idée?
Merci.
Hello,
Tu as réussi à solutionner le problème depuis ?
Pour l’ajout des permissions il utilise une fonction qui demande deux variables (Set-Permission $entity $perm), apparemment il lui manque « $entity » d’où le problème d’import.
S’il y a bien les variables d’entités dans ton XML, il faut que tu te concentre sur la partie qui ressort cette variable :
$EntityName = $_.Entity.Replace(« (« , »\(« ).Replace(« ) », »\) »)
$EntityName = $EntityName.Replace(« [« , »\[« ).Replace(« ] », »\] »)
$EntityName = $EntityName.Replace(« {« , »\{« ).Replace(« } », »\} »)
$entity = Get-View -ViewType $_.EntityType -Filter @{« Name »=(« ^ » + $EntityName + « $ »)}
salut, tu sais s’il est possible de faire fonctionner le script avec des objets différents mais portant le même nom. J’ai des dizaines de ressource Pool qui portent le même nom et je dois migrer un vcenter 5.5 vers 6.5 en conservant les permissions…
Salut,
J’avoue que je n’ai jamais eu ce cas car je ne met jamais le même nom, c’est donc à essayer en labo mais je ne suis pas sur qu’il va aimer.
Je vais essayer de me trouver un peu de temps pour essayer ceci, dis moi si tu as un retour la dessus.