ESXi Host
param($RoleName="Custom Role ESX")

#Get-VIPrivilege | sort parentgroupid | select parentgroupid,id,description | Export-Csv -NoClobber -NoTypeInformation c:\temp\esxi-privileges.csv

$privileges=@(
"Alarm","Certificate","Cryptographer","Datastore","EAM","Extension"`
,"ExternalStatsProvider","Folder","Global","HealthUpdateProvider"`
,"Host.Cim","Host.Hbr","Host.Inventory","Host.Local"`
,"Network.Assign","Network.Move"`
,"Performance","Profile","Resource","ScheduledTask","Sessions"`
,"StoragePod","System","Task","VApp","VRMPolicy","VirtualMachine")
New-VIRole -Name $RoleName -Privilege (Get-VIPrivilege -id $privileges)

#Remove-VIRole $RoleName -Force -Confirm:$false

<# ESX host 1
$usr = "root"
$pwd = "password"
Connect-VIServer <vCenter_IP> -User $usr -Password $pwd

Disconnect-VIServer <vCenter_IP> -Force -Confirm:$false
#>


vCenter
param($RoleName="Custom Role vCenter")
    
#Get-VIPrivilege | sort parentgroupid | select parentgroupid,id,description | Export-Csv -NoClobber -NoTypeInformation c:\temp\vcenter-privileges.csv

$privileges=@(
"Alarm","Datastore.AllocateSpace","Datastore.Browse"`
,"Datastore.FileManagement","Datastore.DeleteFile"`
,"Datastore.UpdateVirtualMachineFiles","Datastore.UpdateVirtualMachineMetadata"`
,"EAM","Extension","ExternalStatsProvider","Folder"`
,"Global.VCServer","Global.CancelTask","Global.CapacityPlanning"`
,"Global.Diagnostics","Global.DisableMethods","Global.EnableMethods"`
,"Global.GlobalTag","Global.Health","Global.LogEvent"`
,"Global.ManageCustomFields","Global.Proxy","Global.ScriptAction"`
,"Global.ServiceManagers","Global.SetCustomField"`
,"Global.Settings","Global.SystemTag","HealthUpdateProvider"`
,"Host.Cim","Host.Hbr","Host.Local"`
,"Host.Config.AdvancedConfig","Host.Config.AuthenticationStore"`
,"Host.Config.PciPassthru","Host.Config.Snmp","Host.Config.DateTime"`
,"Host.Config.Settings","Host.Config.Connection","Host.Config.Firmware"`
,"Host.Config.HyperThreading","Host.Config.Image","Host.Config.Maintenance"`
,"Host.Config.Memory","Host.Config.Power","Host.Config.Quarantine"`
,"Host.Config.Patch","Host.Config.NetService","Host.Config.Storage"`
,"Host.Config.SystemManagement","Host.Config.Resources","Host.Config.AutoStart"`
,"Host.Inventory.AddHostToCluster","Host.Inventory.AddStandaloneHost"`
,"Host.Inventory.CreateCluster","Host.Inventory.EditCluster"`
,"Host.Inventory.MoveCluster","Host.Inventory.MoveHost"`
,"Host.Inventory.RemoveHostFromCluster","Profile","Network.Assign"`
,"Performance","StorageProfile","Resource","ScheduledTask","Sessions"`
,"StorageViews","Task","TransferService","VcIntegrity.Baseline"`
,"VcIntegrity.FileUpload","VcIntegrity.General","VcIntegrity.Updates"`
,"VRMPolicy","VirtualMachine.Config","VirtualMachine.GuestOperations"`
,"VirtualMachine.Hbr","VirtualMachine.Interact","VirtualMachine.Inventory"`
,"VirtualMachine.Namespace","VirtualMachine.Provisioning"`
,"VirtualMachine.State","vApp","vService","InventoryService.Tagging")
New-VIRole -Name $RoleName -Privilege (Get-VIPrivilege -id $privileges)

#Remove-VIRole $RoleName -Force -Confirm:$false

<# vCenter
$usr = "administrator@vsphere.local"
$pwd = "password"
Connect-VIServer <vCenter_IP> -User $usr -Password $pwd

Disconnect-VIServer <vCenter_IP> -Force -Confirm:$false
#>