Src/Public/Invoke-AsBuiltReport.DellEMC.VxRail.ps1

function Invoke-AsBuiltReport.DellEMC.VxRail {
    <#
    .SYNOPSIS
        PowerShell script to document the configuration of Dell EMC VxRail Manager in Word/HTML/Text formats
    .DESCRIPTION
        Documents the configuration of Dell EMC VxRail Manager in Word/HTML/Text formats using PScribo.
    .NOTES
        Version: 0.3.0
        Author: Tim Carman
        Twitter: @tpcarman
        Github: tpcarman
        Credits: Iain Brighton (@iainbrighton) - PScribo module
 
    .LINK
        https://github.com/AsBuiltReport/AsBuiltReport.DellEMC.VxRail
    #>


    param (
        [String[]] $Target,
        [PSCredential] $Credential
    )

    # Check if the required version of VMware PowerCLI is installed
    Get-AbrVxRailRequiredModule -Name 'VMware.PowerCLI' -Version '12.3'

    # Import Report Configuration
    $Report = $ReportConfig.Report
    $InfoLevel = $ReportConfig.InfoLevel
    $Options = $ReportConfig.Options

    # General information
    $TextInfo = (Get-Culture).TextInfo

    #region foreach loop
    foreach ($VIServer in $Target) {

        # Get VxRail Manager information
        Get-AbrVxRailManager

        # API Calls
        Write-PScriboMessage "Performing API reference call to path /hosts"
        $VxrHosts = Get-VxRailApi -Version 1 -Uri '/hosts'
        Write-PScriboMessage "Performing API reference call to path /chassis"
        $VxrChassis = Get-VxRailApi -Version 1 -Uri '/chassis'
        Write-PScriboMessage "Performing API reference call to path /system/cluster-hosts"
        $VxrClusterHosts = Get-VxRailApi -Version 1 -Uri '/system/cluster-hosts'

        #region VxRail Section
        Section -Style Heading1 $($VxRailMgrHostName) {
            #region Cluster Section
            Write-PScriboMessage "Cluster InfoLevel set at $($InfoLevel.Cluster)."
            if ($InfoLevel.Cluster -gt 0) {
                Section -Style Heading2 'VxRail Cluster' {
                    # VxRail Cluster
                    Get-AbrVxRailCluster

                    # Cluster Hosts
                    Get-AbrVxRailClusterHost

                    # Available ESXi Hosts
                    Get-AbrVxRailAvailableHost

                    if ($InfoLevel.Cluster -ge 2) {
                        # VxRail VMs
                        Get-AbrVxRailClusterVMs

                        # Cluster Components
                        Get-AbrVxRailClusterComponents
                    }
                }
            }
            #endregion Cluster Section

            #region Appliance Section
            Write-PScriboMessage "Appliance InfoLevel set at $($InfoLevel.Appliance)."
            if ($InfoLevel.Appliance -gt 0) {
                Section -Style Heading2 'VxRail Appliances' {
                    foreach ($VxrHost in ($VxrHosts | Sort-Object hostname)) {
                        $VxrClusterHost = $VxrClusterHosts | Where-Object { $_.host_name -eq $VxrHost.hostname }
                        $VxrHostChassis = $VxrChassis | Where-Object { $_.sn -eq $VxrHost.sn }
                        $VMHost = Get-VMHost -Name $VxrHost.hostname -Server $vCenter
                        $esxcli = Get-EsxCLI -VMHost $VMHost -V2 -Server $vCenter
                        Section -Style Heading3 "$($VxrHost.hostname)" {
                            # Hardware
                            Get-AbrVxRailHostHardware -VxrHost $VxrHost

                            # ESXi
                            Get-AbrVxRailHostEsxi -VxrClusterHost $VxrClusterHost

                            # Firmware
                            Get-AbrVxRailHostFirmware -VxrHost $VxrHost

                            # Components
                            Get-AbrVxRailHostComponent -VxrHost $VxrHost

                            # Boot Devices
                            Get-AbrVxRailHostBootDevice -VxrHost $VxrHost

                            # Disks
                            Get-AbrVxRailHostDisk -VxrHost $VxrHost

                            # NICs
                            Get-AbrVxRailHostNic -VxrHost $VxrHost

                            # Power Supplies
                            Get-AbrVxRailHostPsu -VxrHostChassis $VxrHostChassis

                            #region iDRAC
                            if ($VMHost.ConnectionState -eq 'Connected') {
                                Section -Style Heading4 'iDRAC' {
                                    # iDRAC Network
                                    Get-AbrVxRailHostIdracIpv4 -VxrHost $VxrHost

                                    # iDRAC VLAN
                                    Get-AbrVxRailHostIdracVlan -VxrHost $VxrHost

                                    # iDRAC Users
                                    Get-AbrVxRailHostIdracUser -VxrHost $VxrHost
                                }
                            }
                            #endregion iDRAC
                        }
                    }
                }
            }
            #endregion Appliance Section

            # Cluster Support
            Write-PScriboMessage "Support InfoLevel set at $($InfoLevel.Support)."
            if ($InfoLevel.Support -gt 0) {
                Get-AbrVxRailClusterSupport
            }

            # Networking Section
            Write-PScriboMessage "Network InfoLevel set at $($InfoLevel.Network)."
            if ($InfoLevel.Network -gt 0) {
                Get-AbrVxRailClusterNetwork
            }
        }
        #endregion VxRail Section

        $null = Disconnect-VIServer -Server $VIServer -Confirm:$false -ErrorAction SilentlyContinue
    }
    #endregion foreach loop
}