VMware PowerCLI – Export / Import SSO Roles & Permissions vCenter

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 »/]


Mathieu

Je suis actuellement ingénieur spécialisé dans le design d'environnements cloud virtualisés. Adepte des technologies de VMware, Nutanix, Citrix et Microsoft je propose à travers ce blog diverses astuces de troubleshooting.

S’abonner
Notification pour
guest

5 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Igor Zecevic
6 années il y a

Super !!
Merci, marche à merveille.

Très bon blog Mathieu.

masterlyar
masterlyar
6 années il y a

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.

benjamin
benjamin
6 années il y a

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…