Src/Public/Invoke-ASBuiltReport.VMware.Horizon.ps1
function Invoke-AsBuiltReport.VMware.Horizon { <# .SYNOPSIS PowerShell script which documents the configuration of VMware Horizon in Word/HTML/XML/Text formats .DESCRIPTION Documents the configuration of VMware Horizon in Word/HTML/XML/Text formats using PScribo. .NOTES Version: 1.1.4 Author: Chris Hildebrandt, Karl Newick Twitter: @childebrandt42, @karlnewick Editor: Jonathan Colon, @jcolonfzenpr Twitter: @asbuiltreport Github: AsBuiltReport Credits: Iain Brighton (@iainbrighton) - PScribo module .LINK https://github.com/AsBuiltReport/AsBuiltReport.VMware.Horizon #> param ( [String[]] $Target, [PSCredential] $Credential ) if ($psISE) { Write-Error -Message "You cannot run this script inside the PowerShell ISE. Please execute it from the PowerShell Command Window." break } Write-PScriboMessage -Plugin "Module" -IsWarning "Please refer to the AsBuiltReport.VMware.Horizon github website for more detailed information about this project." Write-PScriboMessage -Plugin "Module" -IsWarning "Do not forget to update your report configuration file after each new version release." Write-PScriboMessage -Plugin "Module" -IsWarning "Documentation: https://github.com/AsBuiltReport/AsBuiltReport.VMware.Horizon" Write-PScriboMessage -Plugin "Module" -IsWarning "Issues or bug reporting: https://github.com/AsBuiltReport/AsBuiltReport.VMware.Horizon/issues" Write-PScriboMessage -Plugin "Module" -IsWarning "This project is community maintained and has no sponsorship from VMware/Omnissa, its employees or any of its affiliates." Try { $InstalledVersion = Get-Module -ListAvailable -Name AsBuiltReport.VMware.Horizon -ErrorAction SilentlyContinue | Sort-Object -Property Version -Descending | Select-Object -First 1 -ExpandProperty Version if ($InstalledVersion) { Write-PScriboMessage -IsWarning "AsBuiltReport.VMware.Horizon $($InstalledVersion.ToString()) is currently installed." $LatestVersion = Find-Module -Name AsBuiltReport.VMware.Horizon -Repository PSGallery -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Version if ($LatestVersion -gt $InstalledVersion) { Write-PScriboMessage -IsWarning "AsBuiltReport.VMware.Horizon $($LatestVersion.ToString()) is available." Write-PScriboMessage -IsWarning "Run 'Update-Module -Name AsBuiltReport.VMware.Horizon -Force' to install the latest version." } } } Catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Check if the required version of VMware PowerCLI is installed Get-RequiredModule -Name 'VMware.PowerCLI' -Version '13.2' # Import Report Configuration $Report = $ReportConfig.Report $InfoLevel = $ReportConfig.InfoLevel $Options = $ReportConfig.Options foreach ($HVEnvironment in $Target) { Try { $HvServer = Connect-HVServer -Server $HVEnvironment -Credential $Credential -ErrorAction Stop } Catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Generate report if connection to Horizon Environment Server Connection is successful if ($HvServer) { #Environment Varibles # Assign a variable to obtain the API Extension Data $hzServices = $hvServer.ExtensionData # Define HV Query Services $Queryservice = New-Object vmware.hv.queryserviceservice # Virtual Centers $vCenterServers = try { $hzServices.VirtualCenter.VirtualCenter_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # vCenter Health, ESX Hosts, and DataStores $vCenterHealth = try { $hzServices.VirtualCenterHealth.VirtualCenterHealth_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # ESXHosts #$esxhosts = $vCenterHealth # DataStores #$datastores = $vCenterHealth # Domains $domains = try { $hzServices.ADDomainHealth.ADDomainHealth_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Connection Server Info $connectionservers = try { $hzServices.ConnectionServer.ConnectionServer_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Connection Server Health $ConnectionServersHealth = try { $hzServices.ConnectionServerHealth.ConnectionServerHealth_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # GateWay Server Info $GatewayServers = try { $hzServices.Gateway.Gateway_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Instant Clone Domain Admins $InstantCloneDomainAdmins = try { $hzServices.InstantCloneEngineDomainAdministrator.InstantCloneEngineDomainAdministrator_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # AD Domains $ADDomains = try { $hzServices.ADDomain.ADDomain_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Product Licensing Info $ProductLicenseingInfo = try { $hzServices.License.License_Get() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Product Usage Info $UsageStatisticsInfo = try { $hzServices.UsageStatistics.UsageStatistics_GetLicensingCounters() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Global Settings $GlobalSettings = try { $hzServices.GlobalSettings.GlobalSettings_Get() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Administrators $Administrators = try { $hzServices.AdminUserOrGroup.AdminUserOrGroup_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Cloud Pod Architecture $CloudPodFederation = try { $hzServices.PodFederation.PodFederation_Get() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Sites $CloudPodSites = try { $hzServices.Site.Site_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } $CloudPodLists = try { $hzServices.Pod.Pod_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Event Database Info $EventDataBases = try { $hzServices.EventDatabase.EventDatabase_Get() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Syslog Info $Syslog = try { $hzServices.Syslog.Syslog_Get() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Virtual Centers $vCenterServers = try { $hzServices.VirtualCenter.VirtualCenter_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Global Policies try { $GlobalPoliciesService = New-Object VMware.Hv.PoliciesService $GlobalPolicies = $GlobalPoliciesService.Policies_Get($hvServer.ExtensionData, $null, $null) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Unauthenticated Access $unauthenticatedAccessList = try { $hzServices.UnauthenticatedAccessUser.UnauthenticatedAccessUser_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { $EntitledUserOrGroupLocalMachineQueryDefn = New-Object VMware.Hv.QueryDefinition $EntitledUserOrGroupLocalMachineQueryDefn.queryentitytype = 'EntitledUserOrGroupLocalSummaryView' $EntitledUserOrGroupLocalMachinequeryResults = $Queryservice.QueryService_Create($hzServices, $EntitledUserOrGroupLocalMachineQueryDefn) $EntitledUserOrGroupLocalMachines = foreach ($EntitledUserOrGroupLocalMachineresult in $EntitledUserOrGroupLocalMachinequeryResults.results) { $hzServices.EntitledUserOrGroup.EntitledUserOrGroup_GetLocalSummaryView($EntitledUserOrGroupLocalMachineresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Home Site Info $HomesiteQueryDefn = New-Object VMware.Hv.QueryDefinition $HomesiteQueryDefn.queryentitytype = 'UserHomeSiteInfo' $HomesitequeryResults = $Queryservice.QueryService_Create($hzServices, $HomesiteQueryDefn) $Homesites = foreach ($Homesiteresult in $HomesitequeryResults.results) { $hzServices.UserHomeSite.UserHomeSite_GetInfos($Homesiteresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Pool Info $PoolQueryDefn = New-Object VMware.Hv.QueryDefinition $PoolQueryDefn.queryentitytype = 'DesktopSummaryView' $poolqueryResults = $Queryservice.QueryService_Create($hzServices, $PoolQueryDefn) $Pools = foreach ($poolresult in $poolqueryResults.results) { $hzServices.desktop.desktop_get($poolresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Desktop Assignment Info $DesktopAssignmentViewQueryDefn = New-Object VMware.Hv.QueryDefinition $DesktopAssignmentViewQueryDefn.queryentitytype = 'DesktopAssignmentView' $DesktopAssignmentViewResults = $Queryservice.QueryService_Create($hzServices, $DesktopAssignmentViewQueryDefn) $DesktopAssignmentViewResultsData = $DesktopAssignmentViewResults.results $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Application Pools $AppQueryDefn = New-Object VMware.Hv.QueryDefinition $AppQueryDefn.queryentitytype = 'ApplicationInfo' $AppqueryResults = $Queryservice.QueryService_Create($hzServices, $AppQueryDefn) $Apps = foreach ($Appresult in $AppqueryResults.results) { $hzServices.Application.Application_Get($Appresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Global Entitlements $GlobalEntitlementGroupsQueryDefn = New-Object VMware.Hv.QueryDefinition $GlobalEntitlementGroupsQueryDefn.queryentitytype = 'GlobalEntitlementSummaryView' $GlobalEntitlementGroupsqueryResults = $Queryservice.QueryService_Create($hzServices, $GlobalEntitlementGroupsQueryDefn) $GlobalEntitlements = foreach ($GlobalEntitlementGroupsResult in $GlobalEntitlementGroupsqueryResults.results) { $hzServices.GlobalEntitlement.GlobalEntitlement_Get($GlobalEntitlementGroupsResult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Entitled User Or Group Global $GlobalApplicationEntitlementGroupsQueryDefn = New-Object VMware.Hv.QueryDefinition $GlobalApplicationEntitlementGroupsQueryDefn.queryentitytype = 'GlobalApplicationEntitlementInfo' $GlobalApplicationEntitlementGroupsqueryResults = $Queryservice.QueryService_Create($hzServices, $GlobalApplicationEntitlementGroupsQueryDefn) $GlobalApplicationEntitlementGroups = foreach ($GlobalApplicationEntitlementGroupsResult in $GlobalApplicationEntitlementGroupsqueryResults.results) { $hzServices.GlobalApplicationEntitlement.GlobalApplicationEntitlement_Get($GlobalApplicationEntitlementGroupsResult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # EntitledUserOrGroupGlobalMachine Info $EntitledUserOrGroupGlobalMachineQueryDefn = New-Object VMware.Hv.QueryDefinition $EntitledUserOrGroupGlobalMachineQueryDefn.queryentitytype = 'EntitledUserOrGroupGlobalSummaryView' $EntitledUserOrGroupGlobalMachinequeryResults = $Queryservice.QueryService_Create($hzServices, $EntitledUserOrGroupGlobalMachineQueryDefn) $EntitledUserOrGroupGlobalMachines = foreach ($EntitledUserOrGroupGlobalMachineresult in $EntitledUserOrGroupGlobalMachinequeryResults.results) { $hzServices.EntitledUserOrGroup.EntitledUserOrGroup_GetGlobalSummaryView($EntitledUserOrGroupGlobalMachineresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Entitled Global Users and Groups try { # EntitledUserOrGroupGlobal Info $EntitledUserOrGroupGlobalQueryDefn = New-Object VMware.Hv.QueryDefinition $EntitledUserOrGroupGlobalQueryDefn.queryentitytype = 'EntitledUserOrGroupGlobalSummaryView' $EntitledUserOrGroupGlobalqueryResults = $Queryservice.QueryService_Create($hzServices, $EntitledUserOrGroupGlobalQueryDefn) $EntitledUserOrGroupGlobals = foreach ($EntitledUserOrGroupGlobalresult in $EntitledUserOrGroupGlobalqueryResults.results) { $hzServices.EntitledUserOrGroup.EntitledUserOrGroup_GetGlobalSummaryView($EntitledUserOrGroupGlobalresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Permissions $Permissions = try { $hzServices.Permission.Permission_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Roles $Roles = try { $hzServices.Role.Role_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Access Groups $AccessGroups = $hzServices.AccessGroup.AccessGroup_List() try { # Farm Info $FarmdQueryDefn = New-Object VMware.Hv.QueryDefinition $FarmdQueryDefn.queryentitytype = 'FarmSummaryView' $FarmqueryResults = $Queryservice.QueryService_Create($hzServices, $FarmdQueryDefn) $Farms = foreach ($farmresult in $farmqueryResults.results) { $hzServices.farm.farm_get($farmresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Machines $MachinesQueryDefn = New-Object VMware.Hv.QueryDefinition $MachinesQueryDefn.queryentitytype = 'MachineSummaryView' $MachinesqueryResults = $Queryservice.QueryService_Create($hzServices, $MachinesQueryDefn) $Machines = foreach ($Machinesresult in $MachinesqueryResults.results) { $hzServices.machine.machine_get($Machinesresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # RDS Servers $RDSServerQueryDefn = New-Object VMware.Hv.QueryDefinition $RDSServerQueryDefn.queryentitytype = 'RDSServerSummaryView' $RDSServerqueryResults = $Queryservice.QueryService_Create($hzServices, $RDSServerQueryDefn) $RDSServers = foreach ($RDSServerresult in $RDSServerqueryResults.results) { $hzServices.RDSServer.RDSServer_GetSummaryView($RDSServerresult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Base Images try { $BaseImageVMList = $vCenterServers | ForEach-Object { $hzServices.BaseImageVM.BaseImageVM_List($_.id, $null) } $CompatibleBaseImageVMs = $BaseImageVMList | Where-Object { ($_.IncompatibleReasons.InUseByDesktop -eq $false) -and ($_.IncompatibleReasons.InUseByLinkedCloneDesktop -eq $false) -and ($_.IncompatibleReasons.ViewComposerReplica -eq $false) -and ($_.IncompatibleReasons.UnsupportedOS -eq $false) -and ($_.IncompatibleReasons.NoSnapshots -eq $false) -and (($null -eq $_.IncompatibleReasons.InstantInternal) -or ($_.IncompatibleReasons.InstantInternal -eq $false)) } } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } # Registerd Physical Machines Try { $RegisteredPhysicalMachineInfoQueryDefn = New-Object VMware.Hv.QueryDefinition $RegisteredPhysicalMachineInfoQueryDefn.queryentitytype = 'RegisteredPhysicalMachineInfo' $RegisteredPhysicalMachineResults = $Queryservice.QueryService_Create($hzServices, $RegisteredPhysicalMachineInfoQueryDefn) $RegisteredPhysicalMachines = foreach ($RegisteredPhysicalMachineresult in $RegisteredPhysicalMachineResults.results) { $hzServices.RegisteredPhysicalMachine.RegisteredPhysicalMachine_Get($RegisteredPhysicalMachineResult.id) } $queryservice.QueryService_DeleteAll($hzServices) } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Template Images $TemplateVMList = $vCenterServers | ForEach-Object { $hzServices.VmTemplate.VmTemplate_List($_.id) } $CompatibleTemplateVMs = $TemplateVMList | Where-Object { ($_.IncompatibleReasons.UnsupportedOS -eq $false) } } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # CEIP Info $CEIP = $hzServices.CEIP.CEIP_Get() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Global Access Group Info $GlobalAccessGroups = $hzServices.GlobalAccessGroup.GlobalAccessGroup_List() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } try { # Gateway Certificates $script:GatewayCerts = $hzServices.GlobalSettings.GlobalSettings_ListGatewayCertificates() } catch { Write-PScriboMessage -IsWarning $_.Exception.Message } Section -Style Heading1 "$($HVEnvironment.toUpper())" { Get-AbrHRZInfrastructure } if ($InfoLevel.UsersAndGroups.PSObject.Properties.Value -ne 0) { Section -Style Heading1 'Users and Groups' { Paragraph 'The following section provides information about the permissions that control which remote desktops and applications your users can access.' Get-AbrHRZLocalEntitlement Get-AbrHRZHomeSite Get-AbrHRZUnauthenticatedACL } } if ($InfoLevel.Inventory.PSObject.Properties.Value -ne 0) { Section -Style Heading1 'Inventory' { Paragraph 'The following section provides detailed information about desktop, application, farm pools and global entitlement permissions that control which remote desktops and applications your users can access.' Get-AbrHRZDesktopPool Get-AbrHRZApplicationPool Get-AbrHRZFarm Get-AbrHRZMachine Get-AbrHRZGlobalEntitlement } } Section -Style Heading1 'Settings' { Paragraph 'The following section provides detailed information about the configuration of the components that comprise the Horizon Server infrastructure.' if ($InfoLevel.Settings.Servers.PSObject.Properties.Value -ne 0) { Section -Style Heading2 'Servers' { Get-AbrHRZVcenter Get-AbrHRZDatastore Get-AbrHRZESXi Get-AbrHRZUAG Get-AbrHRZConnectionServer Get-AbrHRZGatewayCert } } #Get-AbrHRZADDomain Get-AbrHRZDomain Get-AbrHRZCertMgmt Get-AbrHRZLicense Get-AbrHRZGlobalSetting Get-AbrHRZRegisteredMachine if ($InfoLevel.Settings.Administrators.PSObject.Properties.Value -ne 0) { Section -Style Heading2 'Administrators' { Get-AbrHRZAdminGroup Get-AbrHRZRolePrivilege Get-AbrHRZRolePermission Get-AbrHRZAccessGroup Get-AbrHRZFederationAccessGroup } } Get-AbrHRZCloudPod Get-AbrHRZSite Get-AbrHRZEventConf Get-AbrHRZGlobalpolicy } } } } |