Src/Public/Invoke-AsBuiltReport.VMware.AppVolumes.ps1

function Invoke-AsBuiltReport.VMware.AppVolumes {
    <#
    .SYNOPSIS
        PowerShell script which documents the configuration of VMware AppVolumes in Word/HTML/XML/Text formats
    .DESCRIPTION
        Documents the configuration of VMware AppVolumes in Word/HTML/XML/Text formats using PScribo.
    .NOTES
        Version: 1.2.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 (
        [String[]] $Target,
        [PSCredential] $Credential,
        [String] $StylePath
    )

    if ($psISE) {
        Write-Error -Message "You cannot run this script inside the PowerShell ISE. Please execute it from the PowerShell Command Window."
        break
    }

    if ($PSVersionTable.PSEdition -ne 'Core') {

        Add-Type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@

        [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

    }


    [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12

    Write-PScriboMessage -Plugin "Module" -IsWarning "Please refer to the AsBuiltReport.VMware.AppVolumes 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.AppVolumes"
    Write-PScriboMessage -Plugin "Module" -IsWarning "Issues or bug reporting: https://github.com/AsBuiltReport/AsBuiltReport.VMware.AppVolumes/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."

    # Check the current AsBuiltReport.VMware.AppVolumes installed module
    Try {
        $InstalledVersion = Get-Module -ListAvailable -Name AsBuiltReport.VMware.AppVolumes -ErrorAction SilentlyContinue | Sort-Object -Property Version -Descending | Select-Object -First 1 -ExpandProperty Version

        if ($InstalledVersion) {
            Write-PScriboMessage -IsWarning "AsBuiltReport.VMware.AppVolumes $($InstalledVersion.ToString()) is currently installed."
            $LatestVersion = Find-Module -Name AsBuiltReport.Veeam.VBR -Repository PSGallery -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Version
            if ($LatestVersion -gt $InstalledVersion) {
                Write-PScriboMessage -IsWarning "AsBuiltReport.VMware.AppVolumes $($LatestVersion.ToString()) is available."
                Write-PScriboMessage -IsWarning "Run 'Update-Module -Name AsBuiltReport.VMware.AppVolumes -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 '12.7'

    # Import JSON Configuration for Options and InfoLevel
    $Report = $ReportConfig.Report
    $InfoLevel = $ReportConfig.InfoLevel
    $Options = $ReportConfig.Options

    $RESTAPIUser = $Credential.UserName
    $RESTAPIPassword = $Credential.GetNetworkCredential().password

    $AppVolRestCreds = @{
        username = $RESTAPIUser
        password = $RESTAPIPassword
    }

    foreach ($AppVolServer in $Target) {

        Try {
            if ($PSVersionTable.PSEdition -eq 'Core') {
                $AppVolServerRest = Invoke-RestMethod -SkipCertificateCheck -SessionVariable SourceServerSession -Method Post -Uri "https://$AppVolServer/cv_api/sessions" -Body $AppVolRestCreds
            } else { $AppVolServerRest = Invoke-RestMethod -SessionVariable SourceServerSession -Method Post -Uri "https://$AppVolServer/cv_api/sessions" -Body $AppVolRestCreds }
        } Catch {
            Write-Error $_
        }

        # Generate report if connection to AppVolumes Server Connection is successful
        if ($AppVolServerRest.success -eq 'Ok') {
            # Generate report if connection to AppVolumes Manager General Information is successful
            if ($InfoLevel.AppVolumes.General -ge 1) {
                Section -Style Heading1 $($AppVolServer) {
                    Paragraph "The following section provides a summary of the implemented components on the VMware App Volumes infrastructure."
                    Get-AbrAPPVolGeneral
                    Section -Style Heading2 "Inventory" {
                        Get-AbrAPPVolApplication
                        Get-AbrAppVolPackage
                        Get-AbrAppVolProgram
                        Get-AbrAppVolAssignment
                        Get-AbrAppVolWritable
                        #Get-AbrAppVolAppstack
                    }
                    Section -Style Heading2 "Directory" {
                        Get-AbrAppVolADUser
                        Get-AbrAppVolComputer
                        Get-AbrAppVolADGroup
                        Get-AbrAppVolADOU
                    }
                    Section -Style Heading2 "Infrastructure" {
                        Get-AbrAppVolMachine
                        Get-AbrAppVolStorage
                        Get-AbrAppVolStorageGroup
                        Get-AbrAppVolInstance
                    }
                    Section -Style Heading2 "Activity" {
                        Get-AbrAppVolJob
                        Get-AbrAppVolTSArchive
                    }
                    Section -Style Heading2 "Configuration" {
                        Get-AbrAppVolLicense
                        Get-AbrAppVolADDomain
                        Get-AbrAppVolAdminRole
                        Get-AbrAppVolMachineManager
                        Get-AbrAppVolDatastore
                        Get-AbrAPPVolManager
                        Get-AbrAppVolSetting
                    }
                }
            }
        }
    }
}