Src/Private/Get-AbrAPPVolApplication.ps1
function Get-AbrAPPVolApplication { <# .SYNOPSIS Used by As Built Report to retrieve VMware APPVolume Product information. .DESCRIPTION Documents the configuration of VMware APPVolume in Word/HTML/Text formats using PScribo. .NOTES Version: 1.1.0 Author: Chris Hildebrandt, @childebrandt42 Editor: Jonathan Colon, @jcolonfzenpr Twitter: @asbuiltreport Github: AsBuiltReport Credits: Iain Brighton (@iainbrighton) - PScribo module .LINK https://github.com/AsBuiltReport/AsBuiltReport.VMware.AppVolumes #> [CmdletBinding()] param ( ) begin { Write-PScriboMessage "Products InfoLevel set at $($InfoLevel.AppVolumes.Products)." Write-PscriboMessage "Collecting Products information." } process { if ($InfoLevel.AppVolumes.Products -ge 1) { try { if ($PSVersionTable.PSEdition -eq 'Core') { $Products = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products" } else {$Products = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products"} if ($Products.data) { section -Style Heading3 'Application Summary' { Paragraph "The following section provide a summary of the applications captured on $($AppVolServer.split('.')[0])." Blankline $OutObj = @() foreach ($Product in $Products.data) { try { $ProductID = $Product.id if ($PSVersionTable.PSEdition -eq 'Core') { $ProductIDSource = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products/$ProductID/app_packages?include=app_markers" } else {$ProductIDSource = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products/$ProductID/app_packages?include=app_markers"} $ProductPackage = $ProductIDSource.data | Where-Object {$_.app_markers.name -eq 'CURRENT'} $inObj = [ordered] @{ 'Name' = $Product.Name 'Status' = $Product.Status 'Created' = $Product.created_At_Human 'Template Version' = $ProductPackage.template_version 'Agent Version' = $ProductPackage.agent_version 'Applications Count' = $ProductPackage.programs_count } $OutObj += [pscustomobject](ConvertTo-HashToYN $inObj) } catch { Write-PscriboMessage -IsWarning $_.Exception.Message } } $TableParams = @{ Name = "Application Summary - $($AppVolServer)" List = $false ColumnWidths = 25, 15, 15, 15, 15, 15 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $OutObj | Sort-Object -Property Name | Table @TableParams if ($InfoLevel.AppVolumes.Products -ge 2) { section -Style Heading4 "Applications Details" { foreach ($Product in $Products.data | Sort-Object -Property Name) { try { $ProductID = $Product.id if ($PSVersionTable.PSEdition -eq 'Core') { $ProductIDSource = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products/$ProductID/app_packages?include=app_markers" } else {$ProductIDSource = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products/$ProductID/app_packages?include=app_markers"} if ($PSVersionTable.PSEdition -eq 'Core') { $ActiveDirectoryUsers = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -Uri "https://$AppVolServer/cv_api/users" } else {$ActiveDirectoryUsers = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -Uri "https://$AppVolServer/cv_api/users"} foreach ($ActiveDirectoryUser in $ActiveDirectoryUsers) { if($ActiveDirectoryUser){ if ($PSVersionTable.PSEdition -eq 'Core') { $UserDetails = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -Uri "https://$AppVolServer/cv_api/users/$($ActiveDirectoryUser.id)" } else {$UserDetails = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -Uri "https://$AppVolServer/cv_api/users/$($ActiveDirectoryUser.id)"} if($UserDetails.object_guid -like $Product.Owner_Guid){ $OwnerName = $UserDetails.upn Break } } } $ProductPackage = $ProductIDSource.data | Where-Object {$_.app_markers.name -eq 'CURRENT'} if ($Product) { section -Style Heading5 "Application Details - $($Product.Name)" { $OutObj = @() $inObj = [ordered] @{ 'Name' = $Product.Name 'Status' = $Product.Status 'Owner' = $OwnerName 'Total Assignments' = $Product.assignment_count 'Created' = $Product.created_At_Human 'Modified' = $Product.updated_at_human 'Description' = $Product.description 'RDS Package Attachment' = $Product.allow_multiple_package_attachment 'Last Synchronized' = $Product.synced_at_human 'Sync Status' = $Product.sync_status } $OutObj = [pscustomobject](ConvertTo-HashToYN $inObj) $TableParams = @{ Name = "Application Details - $($Product.Name)" List = $true ColumnWidths = 50, 50 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $OutObj | Table @TableParams try { $ProductPackages = $ProductIDSource.data if ($ProductPackage) { section -ExcludeFromTOC -Style NOTOCHeading6 "Application Packages" { $OutObj = @() foreach ($Package in $ProductPackages) { $inObj = [ordered] @{ 'Name' = $Package.Name 'Version' = $Package.Version 'Created' = Switch ($Package.created_at) { $Null {'--'} default {([DateTime]$Package.created_at).ToShortDateString()} } 'Mounted' = Switch ($Package.mounted_at) { $Null {'--'} default {([DateTime]$Package.mounted_at).ToShortDateString()} } 'Size' = $Package.size_human 'Current' = Switch ($Package.app_markers.name) { $null {'No'} 'CURRENT' {'Yes'} default {'--'} } } $OutObj += [pscustomobject](ConvertTo-HashToYN $inObj) } $TableParams = @{ Name = "Application Packages - $($Product.Name)" List = $false ColumnWidths = 25, 15, 15, 15, 15, 15 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $OutObj | Sort-Object -Property 'Version' -Descending | Table @TableParams try { $ProductPackage = ($ProductIDSource.data | Where-Object {$_.app_markers.name -eq 'CURRENT'}).id if ($PSVersionTable.PSEdition -eq 'Core') { $ProductPrograms = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_packages/$ProductPackage/programs" } else {$ProductPrograms = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_packages/$ProductPackage/programs"} if ($ProductPrograms.data) { section -ExcludeFromTOC -Style NOTOCHeading6 "Application Programs" { $OutObj = @() foreach ($Program in $ProductPrograms.data) { $inObj = [ordered] @{ 'Name' = $Program.Name 'Version' = $Program.Version 'Created' = $Program.created_At_Human } $OutObj += [pscustomobject](ConvertTo-HashToYN $inObj) } $TableParams = @{ Name = "Application Programs - $($Product.Name)" List = $false ColumnWidths = 50, 30, 20 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $OutObj | Sort-Object -Property 'Name' | Table @TableParams } } } catch { Write-PscriboMessage -IsWarning $_.Exception.Message } } } } catch { Write-PscriboMessage -IsWarning $_.Exception.Message } try { $ProductID = $Product.id if ($PSVersionTable.PSEdition -eq 'Core') { $ProductAssignments = Invoke-RestMethod -SkipCertificateCheck -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products/$ProductID/assignments?include=entities" } else {$ProductAssignments = Invoke-RestMethod -WebSession $SourceServerSession -Method Get -ContentType 'application/json' -Uri "https://$AppVolServer/app_volumes/app_products/$ProductID/assignments?include=entities"} if ($ProductAssignments.data) { section -ExcludeFromTOC -Style NOTOCHeading6 "Application Assignment" { $OutObj = @() foreach ($ProductAssignment in $ProductAssignments.data) { try { $inObj = [ordered] @{ 'Name' = $ProductAssignment.entities.upn 'Type' = $ProductAssignment.entities.entity_type } $OutObj += [pscustomobject](ConvertTo-HashToYN $inObj) } catch { Write-PscriboMessage -IsWarning $_.Exception.Message } } $TableParams = @{ Name = "Application Assignment - $($Product.Name)" List = $false ColumnWidths = 50, 50 } if ($Report.ShowTableCaptions) { $TableParams['Caption'] = "- $($TableParams.Name)" } $OutObj | Sort-Object -Property 'Name' | Table @TableParams } } } catch { Write-PscriboMessage -IsWarning $_.Exception.Message } } } }catch { Write-PscriboMessage -IsWarning $_.Exception.Message } } } } } } } catch { Write-PscriboMessage -IsWarning $_.Exception.Message } } } end {} } |