function make-ParentFolder { Param ( $inFolderArray ) $parentFolder = get-datacenter $datacenter | get-folder "VM" foreach ($thisSubFolder in $inFolderArray) { if (!($parentFolder | get-folder $thisSubFolder -noRecursion -erroraction silentlycontinue)) { $ParentFolder = $parentFolder | new-folder $thisSubFolder } else { $ParentFolder = $ParentFolder | get-folder $thisSubFolder -noRecursion } } $ParentFolder } $ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" start-transcript -path .\set_dest_permissions_dc1_dc2_transcript.txt $directory = "e:\scripts\vcenter7" $datacenter = "DC1" $directory = $directory.trim("\") #" fix the gistit syntax highlighting $vCenterHost = "servername.domain.net" Connect-VIServer -Server $vCenterHost #Rebuild Permissions $allPermissions = import-clixml $directory\$($datacenter)-permissions.xml $i = 0 foreach ($thisPermission in $allPermissions) { write-progress -Activity "Creating Permissions" -percentComplete ($i / $allPermissions.count * 100) $target = "" Write-Verbose "===============================" -Verbose Write-Verbose "adding permissions $thisPermission" -Verbose Write-Verbose "===============================" -Verbose if ($thisPermission.type -eq "Folder") { #permission is assigned to a folder, use make-folder to get the precise folder $target = make-Parentfolder -inFolderArray $thisPermission.entity } elseif ($thisPermission.type -eq "VirtualMachine") { #permission is assigned to VM $target = get-datacenter $datacenter | get-vm $thisPermission.entity } elseif ($thisPermission.type -eq "Datacenter") { #permission is assigned to Datacenter $target = get-datacenter $thisPermission.entity } elseif ($thisPermission.type -eq "ClusterComputeResource") { #permission is assigned to Cluster $target = get-datacenter $datacenter | get-cluster $thisPermission.entity } elseif ($thisPermission.type -eq "VmwareDistributedVirtualSwitch") { #permission is assigned to vDS $target = get-datacenter $datacenter | get-VDSwitch $thisPermission.entity } elseif ($thisPermission.type -eq "StoragePod") { #permission is assigned to Datastore Cluster $target = get-datacenter $datacenter | get-DatastoreCluster $thisPermission.entity } else { write-error "Unexpected permission target, $($thisPermission.type)" } if ($target) { $target | new-vipermission -role $thisPermission.role -principal $thisPermission.principal -propagate $thisPermission.propagate } else { write-error "Unable to find permission object $($thisPermission.entity)" } $i++ } Disconnect-VIServer $vCenterHost Stop-Transcript