VEEAM

HomeLab – Documentación de Veeam VBR utilizando AsBuiltReport

Hola a tod@s!

Como ya bien saben debido al impacto de la pandemia de Covid-19 no he tenido mucho espacio para hacer otra cosa que no sea estar encerrado en mi casa 😒. Más aún cuando tantos de mis familiares han dado positivo al virus. De manera que esta situación ha sido la mejor excusa para ponerme a programar. Recientemente he recibido muchas peticiones de varios usuario y amigos para que desarrolle un reporte que documentación de la aplicación de Backup «Veeam Backup & Replication».

Por esta razón, me di a la tarea de desarrollar otro reporte más, sí otro más  🤣 y está relacionado a documentar las implementaciones de «Veeam Backup & Replication» específicamente para la versión 11. En un futuro evaluaré la posibilidad de añadir soporte a la versiones pre-11. Este reporte utiliza como base el «framework» del proyecto de AsBuildReport creado por «Tim Carman» @tpcarman (Aquí el enlace).

El reporte se encuentra en estado inicial y en constante desarrollo, pero decidí liberarlo públicamente con el objetivo de recibir recomendaciones o más bien para fomentar que otros desarrolladores aporten a mejorar su contenido. El website de desarrollo del reporte se encuentra en Github les dejo el enlace para que puedan ver el alcance y el objetivo del proyecto.

Importante: El reporte se encuentra actualmente disponible en PowerShell Gallery.

Ahora bien, para comenzar necesitamos cumplir con los siguientes requisitos:

  • Plataforma de Windows (Los módulos de Veeam solo corren en Windows)
  • PowerShell v5.1+
  • El módulo de AsBuiltReport.Core >= 1.1.0
  • El módulo de Veeam.Backup.PowerShell >= 1.0
  • El módulo de SQLServer >+ 21.1

Este reporte utiliza la versión de PowerShell 5.+, para validar la versión podemos utilizar la variable «$PSVersionTable» desde la consola de PowerShell:

PS C:\Users\jocolon> $PSVersionTable


Name                           Value
----                           -----
PSVersion                      5.1.19041.1320
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1320
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\Users\jocolon>

Para validar si tenemos los módulos requeridos de Veeam podemos utilizar el comando «Get-Module» según se muestra en el siguiente ejemplo:

PS C:\Users\jocolon> Get-Module -ListAvailable -Name @('Veeam.Backup.PowerShell')

    Directory: C:\Program Files\Veeam\Backup and Replication\Console


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.0        Veeam.Backup.PowerShell             {Get-VBRComputerFileProxyServer, New-VBRSanInt...


PS C:\Users\jocolon> 

Si el comando no produce algún resultado quiere decir que el módulos no están instalados. Ahora bien para instalar los módulos de Veeam.Backup.PowerShell es importante mencionar que estos están disponible en el servidor de Backup de Veeam o en cualquier dispositivo donde la consola de manejo esté instalada. Referencia:

The remote machine from which you run Veeam PowerShell commands must have the Veeam Backup & Replication Console installed. After you install the Veeam Backup & Replication Console, Veeam PowerShell module will be installed by default

Veeam PowerShell Reference

Para instalar el reporte AsBuiltReport.Veeam.VBR desde PowerShell Gallery utilizamos el comando tradicional «Install-Module»:

PS C:\Users\jocolon> Install-Module -Name AsBuiltReport.Veeam.VBR  
                                                                                                                        
Installing package 'AsBuiltReport.Veeam.VBR' [Installing dependent package 'SqlServer']  
  Installing package 'SqlServer' [Downloaded 16.73 MB out of 23.76 MB.]

PS C:\Users\jocolon> 

Para confirmar si se han instalado todas las dependencias puede utilizar el cmdlet «Get-Module».

PS C:\Users\jocolon> Get-Module -ListAvailable -Name @('Veeam.Backup.PowerShell','SQLServer','AsBuiltReport.Veeam.VBR','AsBuiltReport.Core')     
                                                                                                                        

    Directory: C:\Users\jocolon\Documents\WindowsPowerShell\Modules

ModuleType   Version    Name
----------   -------    ----
    Script   1.1.0      AsBuiltReport.Core
    Script   0.3.0      AsBuiltReport.Veeam.VBR
    Script   21.1.18256 SqlServer
    Manifest 1.0        Veeam.Backup.PowerShell  

PS C:\Users\jocolon> 

Si por alguna razón no puedes instalar el informe a través de la «PowerShell Gallery» te dejo aquí el método de instalación manual. Para ver el procedimiento de instalación, simplemente haga clic en el icono «+».

Instalación manual desde Github

Una vez instalamos los prerrequisito podemos continuar con la instalación del módulo principal «AsBuiltReport.Veeam.VBR«. Ya que este reporte todavía no ha sido liberado públicamente en «PowerShell Gallery» realizaré manualmente la instalación. El primer paso es descargar el código desde el portal de Github aquí.

Podemos descargar los archivos utilizando la consola de Powershell:

PS C:\Users\jocolon> $Source = "https://github.com/AsBuiltReport/AsBuiltReport.Veeam.VBR/archive/refs/heads/dev.zip"

PS C:\Users\jocolon> $Destination = '.\AsBuiltReport.Veeam.VBR.zip'

PS C:\Users\jocolon> Invoke-WebRequest -Uri $Source -OutFile $Destination

 Writing web request
    Writing request stream... (Number of bytes written: 51202)

PS C:\Users\jocolon> ls AsBuiltReport.Veeam.VBR.zip

    Directory: C:\Users\jocolon

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----             1/7/2022 1:58 PM         86404 AsBuiltReport.Veeam.VBR.zip

PS C:\Users\jocolon>

Una vez descargamos el código necesitamos descomprimir el archivo, podemos utilizar el comando «Expand-Archive» en la consola de PowerShell.

PS C:\Users\jocolon> Expand-Archive -Path ./AsBuiltReport.Veeam.VBR.zip -DestinationPath .

PS C:\Users\jocolon> Rename-Item -Path .\AsBuiltReport.Veeam.VBR-dev -NewName .\AsBuiltReport.Veeam.VBR

PS C:\Users\jocolon> ls AsBuiltReport.Veeam.VBR

    Directory: C:\Users\jocolon\AsBuiltReport.Veeam.VBR-dev

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          1/7/2022   2:08 PM                .github
d-----          1/7/2022   2:08 PM                .vscode
d-----          1/7/2022   2:08 PM                Src
-a----          1/5/2022  10:52 AM           1191 AsBuiltreport.Veeam.VBR.json
-a----          1/5/2022  10:52 AM           3996 AsBuiltReport.Veeam.VBR.psd1
-a----          1/5/2022  10:52 AM            542 AsBuiltReport.Veeam.VBR.psm1
-a----          1/5/2022  10:52 AM          56642 AsBuiltReport.Veeam.VBR.Style.ps1
-a----          1/5/2022  10:52 AM           1871 CHANGELOG.md
-a----          1/5/2022  10:52 AM           1070 LICENSE
-a----          1/5/2022  10:52 AM          11796 README.md

PS C:\Users\jocolon> 

Luego es necesario copiar la carpeta descomprimida «AsBuiltReport.Veeam.VBR» a una ruta establecida en $env:PSModulePath. Para lograr eso necesitamos identificar la carpeta donde copiaremos el contenido

PS C:\Users\jocolon> $env:PSModulePath

C:\Users\jocolon\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files\Veeam\Backup and Replication\Console\;C:\Program Files\Veeam\Backup and Replication\Explorers\Exchange\;C:\Program Files\Veeam\Backup and Replication\Explorers\SharePoint\;C:\Program Files\Veeam\Backup and Replication\Explorers\SQL\;C:\Program Files\Veeam\Backup and Replication\Explorers\ActiveDirectory\;C:\Program Files\Veeam\Backup and Replicai 
on\Explorers\Oracle\;C:\Program Files\Veeam\Backup and Replication\Explorers\Teams\;c:\Users\jocolon\.vscode\extensions\ms-vscode.powershell-2021.12.0\modules

PS C:\Users\jocolon>

En mi caso la carpeta que utilizaré para copiar los archivos es «C:\Users\jocolon\Documents\WindowsPowerShell\Modules».

PS C:\Users\jocolon> Copy-Item -Path .\AsBuiltReport.Veeam.VBR\ -Destination "C:\Users\jocolon\Documents\WindowsPowerShell\Modules\AsBuiltReport.Veeam.VBR" -PassThru -Recurse

PS C:\Users\jocolon>

El último paso que debemos seguir es abrir una ventana de PowerShell y desbloquear los archivos descargados utilizando el comando «Unblock-File».



PS C:\Users\jocolon> $path = (Get-Module -Name AsBuiltReport.Veeam.VBR -ListAvailable).ModuleBase; Unblock-File -Path $path\*.*

PS C:\Users\jocolon>


PS C:\Users\jocolon> Get-Module -Name AsBuiltReport.Veeam.VBR -ListAvailable


   Directory: C:\Users\jocolon\Documents\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.1.0      AsBuiltReport.Veeam.VBR             {Get-AbrVbrBackupServerCertificat....}


PS C:\Users\jocolon> Import-Module AsBuiltReport.Veeam.VBR -force

Un requisito opcional es generar los archivos de configuración que te permite establecer los parámetros de la organización que son utilizados para generar el reporte. Este proceso genera unos archivos tipo JSON que son utilizados como plantillas “templates” de forma que no tengas que llenar la información repetitiva cuando generes los reportes. Para ver el procedimiento de configuración, basta con hacer clic en el icono “+”.

Archivos de configuración (AsBuiltReport JSON)

El «cmdlet» de powershell New-AsBuiltConfig te permite generar la plantilla que utilizaremos como base del reporte. Esta plantilla establece los parámetros no técnicos del reporte.

PS C:\Users\jocolon>  New-AsBuiltConfig

---------------------------------------------
 <        As Built Report Information      >
---------------------------------------------
Enter the name of the Author for this As Built Report [jocolon]: Jonathan Colon
---------------------------------------------
 <           Company Information           >
---------------------------------------------
Would you like to enter Company information for the As Built Report? (y/n): y
Enter the Full Company Name: Zen PR Solutions
Enter the Company Short Name: ZENPR
Enter the Company Contact: Jonathan Colon
Enter the Company Email Address: jcolonf@zenprsolutions.com
Enter the Company Phone: XXX-XXX-XXXX
Enter the Company Address: Puerto Rico
---------------------------------------------
 <            Email Configuration          >
---------------------------------------------
Would you like to enter SMTP configuration? (y/n): n
----------------------------------------------
 <       As Built Report Configuration      >
----------------------------------------------
Would you like to save the As Built Report configuration file? (y/n): y
Enter a name for the As Built Report configuration file [AsBuiltReport]: HomeLab Veeam Report
Enter the path to save the As Built Report configuration file [C:\Users\jocolon\AsBuiltReport]:

Name                           Value
----                           -----
Email                          {Port, Credentials, Server, To...}
Company                        {FullName, Contact, Phone, Email...}
UserFolder                     {Path}
Report                         {Author}


PS C:\Users\jocolon>

Una vez culminado el proceso se creará un archivo tipo JSON con el siguiente contenido:

{
    "Email":  {
                  "Port":  null,
                  "Credentials":  null,
                  "Server":  null,
                  "To":  null,
                  "From":  null,
                  "UseSSL":  null,
                  "Body":  null
              },
    "Company":  {
                    "FullName":  "Zen PR Solutions",
                    "Contact":  "Jonathan Colon",
                    "Phone":  "787-203-2790",
                    "Email":  "jcolonf@zenprsolutions.com",
                    "ShortName":  "ZENPR",
                    "Address":  "Puerto Rico"
                },
    "UserFolder":  {
                       "Path":  "C:\Users\jocolon\AsBuiltReport"
                   },
    "Report":  {
                   "Author":  "Jonathan Colon"
               }
}

El comando New-AsBuiltReportConfig permite establecer los parámetros técnico del reporte como el nivel y tipo de información «verbose level».

PS C:\Users\jocolon> New-AsBuiltReportConfig Veeam.VBR -FolderPath C:\Users\jocolon\AsBuiltReport\

Una vez culminado el proceso se creará un archivo tipo JSON con el siguiente contenido:

{
    "Report": {
        "Name": "Veeam VBR As Built Report",
        "Version": "1.0",
        "Status": "Released",
        "ShowCoverPageImage": true,
        "ShowTableOfContents": true,
        "ShowHeaderFooter": true,
        "ShowTableCaptions": true
    },
    "Options": {

    },
    "InfoLevel": {
		"_comment_": "Please refer to the AsBuiltReport project contributing guide for information about how to define InfoLevels.",
        "_comment_": "0 = Disabled, 1 = Enabled, 2 = Adv Summary, 3 = Detailed",
        "Infrastructure": {
            "Section": 1,
            "BackupServer": 1,
            "Proxy": 1,
            "Settings": 1,
            "BR": 1,
            "Licenses": 1,
            "SOBR": 1,
            "WANAccel": 1,
            "SureBackup": 1

        },
        "Tape": {
            "Section": 1,
            "Server": 1,
            "Library": 1
        }
    },
    "HealthCheck": {
        "Infrastructure": {
            "Proxy": true,
            "Settings": true,
            "BR": true,
            "SOBR": true,
            "Server": true,
            "Status": true

        },
        "Tape": {
            "Status": true
        }

    }
}

Este archivo de configuración se puede utilizar para especificar el nivel de detalle del reporte como también que sesiones del reporte van a ser habilitadas.

Luego podemos generar el reporte utilizando el comando «New-AsBuiltReport -Report Veeam.VBR -Target Backup_Server_FQDN_or_IP». Es importante recalcar que es requerido utilizar la dirección del servidor de backup de «Veeam» como «Target».

PS C:\Users\jocolon> New-AsBuiltReport -Report Veeam.VBR -Target veeam-vbr.pharmax.local -AsBuiltConfigFilePath AsBuiltReport.json -OutputFolderPath C:\Users\jocolon\AsBuiltReport\ -Credential $cred -Format HTML -ReportConfigFilePath AsBuiltReport.Veeam.VBR.json -EnableHealthCheck -Verbose

VERBOSE: Loading As Built Report configuration from 'C:\Users\jocolon\AsBuiltReport\AsBuiltReport.json'.
VERBOSE: Loading module from path 'C:\Users\jocolon\Documents\WindowsPowerShell\Modules\AsBuiltReport.Veeam.VBR\AsBuiltReport.Veeam.VBR.psm1'.
VERBOSE: Loading AsBuiltReport.Veeam.VBR report configuration file from path 'C:\Users\jocolon\AsBuiltReport\AsBuiltReport.Veeam.VBR.json'.
VERBOSE: Setting report filename to 'Veeam VBR As Built Report'.
VERBOSE: [ 15:04:09:872 ] [ Document ] - Document 'Veeam VBR As Built Report' processing started.
VERBOSE: [ 15:04:10:005 ] [ Document ] - Executing report style script from path 'C:\Users\jocolon\Documents\WindowsPowerShell\Modules\AsBuiltReport.Veeam.VBR\AsBuiltReport.Veeam.VBR.Style.ps1'.
VERBOSE: [ 15:04:10:036 ] [ Document ] - Setting global document options.
VERBOSE: [ 15:04:10:056 ] [ Document ] - Enabling section/heading numbering.
VERBOSE: [ 15:04:10:057 ] [ Document ] - Setting default font(s) to 'Arial'.
VERBOSE: [ 15:04:10:061 ] [ Document ] - Setting page top margin to '25.05'mm.
VERBOSE: [ 15:04:10:067 ] [ Document ] - Setting page right margin to '25.05'mm.
VERBOSE: [ 15:04:10:069 ] [ Document ] - Setting page bottom margin to '25.05'mm.
VERBOSE: [ 15:04:10:070 ] [ Document ] - Setting page left margin to '25.05'mm.
VERBOSE: [ 15:04:10:072 ] [ Document ] - Setting page size to 'A4'.
VERBOSE: [ 15:04:10:074 ] [ Document ] - Setting page orientation to 'Portrait'.
VERBOSE: [ 15:04:10:079 ] [ Document ] - Setting page height to '297'mm.
VERBOSE: [ 15:04:10:081 ] [ Document ] - Setting page width to '210'mm.
VERBOSE: [ 15:04:10:083 ] [ Document ] - Setting document style 'Title'.
VERBOSE: [ 15:04:10:085 ] [ Document ] - Setting document style 'Title2'.
VERBOSE: [ 15:04:10:105 ] [ Document ] - Setting document style 'Title3'.
VERBOSE: [ 15:04:10:110 ] [ Document ] - Setting document style 'Heading1'.
VERBOSE: [ 15:04:10:117 ] [ Document ] - Setting document style 'Heading2'.
VERBOSE: [ 15:04:10:121 ] [ Document ] - Setting document style 'Heading3'.
VERBOSE: [ 15:04:10:126 ] [ Document ] - Setting document style 'Heading4'.
VERBOSE: [ 15:04:10:129 ] [ Document ] - Setting document style 'Heading5'.
VERBOSE: [ 15:04:10:134 ] [ Document ] - Setting document style 'Heading6'.
VERBOSE: [ 15:04:10:136 ] [ Document ] - Setting document style 'Normal'.
VERBOSE: [ 15:04:10:159 ] [ Document ] - Setting document style 'Caption'.
VERBOSE: [ 15:04:10:162 ] [ Document ] - Setting document style 'Header'.
VERBOSE: [ 15:04:10:174 ] [ Document ] - Setting document style 'Footer'.
VERBOSE: [ 15:04:10:176 ] [ Document ] - Setting document style 'TOC'.
VERBOSE: [ 15:04:10:179 ] [ Document ] - Setting document style 'TableDefaultHeading'.
VERBOSE: [ 15:04:10:182 ] [ Document ] - Setting document style 'TableDefaultRow'.
VERBOSE: [ 15:04:10:185 ] [ Document ] - Setting document style 'Critical'.
VERBOSE: [ 15:04:10:192 ] [ Document ] - Setting document style 'Warning'.
VERBOSE: [ 15:04:10:216 ] [ Document ] - Setting document style 'Info'.
VERBOSE: [ 15:04:10:238 ] [ Document ] - Setting document style 'OK'.
VERBOSE: [ 15:04:10:264 ] [ Document ] - Setting table style 'TableDefault'.
VERBOSE: [ 15:04:10:281 ] [ Document ] - Setting table style 'Borderless'.
VERBOSE: [ 15:04:10:285 ] [ Document ] - Processing document header started.
VERBOSE: [ 15:04:10:288 ] [ Document ] - Processing paragraph 'Veeam VBR As Built Report - v1.0'.
VERBOSE: [ 15:04:10:295 ] [ Document ] - Processing document header completed.
VERBOSE: [ 15:04:10:298 ] [ Document ] - Processing document footer started.
VERBOSE: [ 15:04:10:302 ] [ Document ] - Processing paragraph 'Page <!# PageNumber #!>'.
VERBOSE: [ 15:04:10:318 ] [ Document ] - Processing document footer completed.
VERBOSE: [ 15:04:10:320 ] [ Document ] - Processing blank line.
VERBOSE: [ 15:04:10:343 ] [ Document ] - Processing image 'Veeam Logo'.
VERBOSE: [ 15:04:10:394 ] [ Document ] - Processing blank line.
VERBOSE: [ 15:04:10:396 ] [ Document ] - Processing paragraph 'Veeam VBR As Built Report'.
VERBOSE: [ 15:04:10:400 ] [ Document ] - Processing blank line.
VERBOSE: [ 15:04:10:419 ] [ Document ] - Processing paragraph 'Zen Pr Solutions'.
VERBOSE: [ 15:04:10:421 ] [ Document ] - Processing blank line.
VERBOSE: [ 15:04:10:423 ] [ Document ] - Processing table 'Cover Page'.
VERBOSE: [ 15:04:10:449 ] [ Document ] - Processing page break.
VERBOSE: [ 15:04:10:453 ] [ Document ] - Processing table of contents 'Table of Contents'.
VERBOSE: [ 15:04:10:465 ] [ Document ] - Processing page break.
VERBOSE: [ 15:04:10:742 ] [ Document ] - Trying to import Veeam B&R modules.
VERBOSE: [ 15:04:10:993 ] [ Document ] - Identifying Veeam Powershell module version.
VERBOSE: [ 15:04:10:995 ] [ Document ] - Using Veeam Powershell module version 11.
VERBOSE: [ 15:04:11:231 ] [ Document ] - Establishing the initial connection to the Backup Server: veeam-vbr.pharmax.local.
VERBOSE: [ 15:04:11:233 ] [ Document ] - Looking for veeam existing server connection.
VERBOSE: [ 15:04:11:335 ] [ Document ] - Existing veeam server connection found
VERBOSE: [ 15:04:11:337 ] [ Document ] - Validating connection to veeam-vbr.pharmax.local
VERBOSE: [ 15:04:11:460 ] [ Document ] - Successfully connected to veeam-vbr.pharmax.local VBR Server.
VERBOSE: [ 15:04:11:462 ] [ Document ] - Processing section 'Implementation Report' started.
VERBOSE: [ 15:04:11:464 ] [ Document ] - Processing paragraph 'The following section provides a sum[..]'.
VERBOSE: [ 15:04:11:471 ] [ Document ] - Processing blank line.
VERBOSE: [ 15:04:11:486 ] [ Document ] - Backup Infrastructure InfoLevel set at 2.
VERBOSE: [ 15:04:11:488 ] [ Document ] - Processing section 'Backup Infrastructure Summary' started.
VERBOSE: [ 15:04:11:508 ] [ Document ] - Discovering Veeam VBR Infrastructure Summary from veeam-vbr.pharmax.local.
Output Truncated!
VERBOSE: [ 15:06:02:777 ] [ Document ] - Discovered Pharmax - Veeam Tape Vault Type Vault.
VERBOSE: [ 15:06:02:979 ] [ Document ] - Processing table 'Tape Vault - VEEAM-VBR'.
VERBOSE: [ 15:06:02:986 ] [ Document ] - Processing section 'Tape Vault Summary' completed.
VERBOSE: [ 15:06:02:989 ] [ Document ] - Processing section 'Tape Infrastructure Summary' completed.
VERBOSE: [ 15:06:02:991 ] [ Document ] - Processing section 'Implementation Report' completed.
VERBOSE: [ 15:06:03:130 ] [ Document ] - Document 'Veeam VBR As Built Report' processing completed.
VERBOSE: [ 15:06:03:141 ] [ Document ] - Total processing time '1.89' minutes.
Veeam VBR As Built Report 'Veeam VBR As Built Report' has been saved to 'C:\Users\jocolon\AsBuiltReport\'.
PS C:\Users\jocolon> 

Aquí les dejo el ejemplo del reporte generado.

Adicionalmente les incluyo varias opciones de cómo invocar el reporte.

# Generate a Veeam VBR As Built Report for Backup Server '192.168.7.60' using specified credentials. Export report to HTML & DOCX formats. Use default report style. Append timestamp to report filename. Save reports to 'C:\Users\Jon\Documents'

PS C:\> New-AsBuiltReport -Report Veeam.VBR -Target 192.168.7.60 -Username 'Domain\veeam_admin' -Password 'P@ssw0rd' -Format Html,Word -OutputFolderPath 'C:\Users\Jon\Documents' -Timestamp

# Generate a Veeam VBR As Built Report for Backup Server 192.168.7.60 using specified credentials and report configuration file. Export report to Text, HTML & DOCX formats. Use default report style. Save reports to 'C:\Users\Jon\Documents'. Display verbose messages to the console.

PS C:\> New-AsBuiltReport -Report Veeam.VBR -Target 192.168.7.60 -Username 'Domain\veeam_admin' -Password 'P@ssw0rd' -Format Text,Html,Word -OutputFolderPath 'C:\Users\Jon\Documents' -ReportConfigFilePath 'C:\Users\Jon\AsBuiltReport\AsBuiltReport.Veeam.VBR.json' -Verbose

# Generate a Veeam VBR As Built Report for Backup Server 192.168.7.60 using stored credentials. Export report to HTML & Text formats. Use default report style. Highlight environment issues within the report. Save reports to 'C:\Users\Jon\Documents'.

PS C:\> $Creds = Get-Credential
PS C:\> New-AsBuiltReport -Report Veeam.VBR -Target 192.168.7.60 -Credential $Creds -Format Html,Text -OutputFolderPath 'C:\Users\Jon\Documents' -EnableHealthCheck

# Generate a Veeam VBR As Built Report for Backup Server 192.168.7.60 using stored credentials. Export report to HTML & DOCX formats. Use default report style. Reports are saved to the user profile folder by default. Attach and send reports via e-mail.

PS C:\> New-AsBuiltReport -Report Veeam.VBR -Target 192.168.7.60 -Username 'Domain\veeam_admin' -Password 'P@ssw0rd' -Format Html,Word -OutputFolderPath 'C:\Users\Jon\Documents' -SendEmail

Hasta Luego Amigos!

Veeam – Obtener información de los repositorios utilizando Powershell

Hola a todos,

Estos últimos días he estado realizando varios servicios de soportes relacionados a Veeam Backup & Replication donde he tenido la oportunidad de utilizar más los módulos de Powershell de Veeam. De manera que en esta oportunidad les estare mostrando de forma básica como obtener información relacionada a los repositorios conectados al servidor de Backup. Como siempre es necesario establecer conexión con el servidor de Backup utilizando el comando «Connect-VBRServer».

PS C:\Users\jocolon> Connect-VBRServer -Server veeam-vbr.pharmax.local -Credential (Get-Credential)

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
User: pharmax\administrator
Password for user pharmax\administrator: ********

PS C:\Users\jocolon> 

Luego de conectarnos al servidor podemos utilizar el comando «Get-VBRBackupRepository» para identificar los repositorio conectados al servidor de Backup.

PS C:\Users\jocolon> Get-VBRBackupRepository                                           

Name                      Type         Host            FriendlyPath    Description
----                      ----         ----            ------------    -----------
VEEAM-DD                  DDBoost      VEEAM-VBR.ph... ddboost://VE... Created by PHARMAX\administrator
ONTAP Snapshot            SanSnapsh... VEEAM-VBR.ph... ONTAP Storage   Primary storage snapshot only
VEEAM-HPE-StoreOnce-VSA   HPStoreOn... VEEAM-VBR.ph... storeonce://... Created by PHARMAX\administrator
Linux - Hardened Repos... LinuxLocal   veeam-lnx-px... /backup_data... Created by PHARMAX\jocolon

PS C:\Users\jocolon>

Como pueden ver el resultado del cmdlet suena un tanto incompleto ya que no muestra cierta información importante como el espacio utilizado. Par lograr obtener esta información les comparto un ejemplo básico que permite obtener información más relevante.

$OutObj = @()
if ((Get-VBRServerSession).Server) {
    try {
        [Array]$BackupRepos = Get-VBRBackupRepository | Where-Object {$_.Type -ne "SanSnapshotOnly"}
        [Array]$ScaleOuts = Get-VBRBackupRepository -ScaleOut
        if ($ScaleOuts) {
            foreach ($ScaleOut in $ScaleOuts) {
                $Extents = Get-VBRRepositoryExtent -Repository $ScaleOut
                foreach ($Extent in $Extents) {
                    $BackupRepos = $BackupRepos + $Extent.repository
                }
            }
        }
        foreach ($BackupRepo in $BackupRepos) {
            $PercentFree = 0
            if (@($($BackupRepo.GetContainer().CachedTotalSpace.InGigabytes),$($BackupRepo.GetContainer().CachedFreeSpace.InGigabytes)) -ne 0) {
                $UsedSpace = ($($BackupRepo.GetContainer().CachedTotalSpace.InGigabytes-$($BackupRepo.GetContainer().CachedFreeSpace.InGigabytes)))
                if ($UsedSpace -ne 0) {
                    $PercentFree = ($UsedSpace/$($BackupRepo.GetContainer().CachedTotalSpace.InGigabytes)).tostring("P")
                }
            }
            $inObj = [ordered] @{
                'Name' = $BackupRepo.Name
                'Total Space' = "$($BackupRepo.GetContainer().CachedTotalSpace.InGigabytes)Gb"
                'Free Space' = "$($BackupRepo.GetContainer().CachedFreeSpace.InGigabytes)Gb"
                'Percent Used' = $PercentFree
                'Status' = Switch ($BackupRepo.IsUnavailable) {
                    'False' {'Available'}
                    'True' {'Unavailable'}
                    default {$BackupRepo.IsUnavailable}
                }
            }
            $OutObj += [pscustomobject]$inobj
        }
        $OutObj | Format-Table -Wrap -AutoSize
    }
    catch {
        Write-Output $_.Exception.Message
    }
}

En el siguiente ejemplo les muestro el resultado del código para obtener la información sobre los repositorios conectados a nuestro servidor de Backup de Veeam.

Name                                  Total Space Free Space Percent Used Status     
----                                  ----------- ---------- ------------ ------
VEEAM-DD                              351Gb       292Gb      16.81%       Available
VEEAM-HPE-StoreOnce-VSA               0Gb         0Gb        0            Unavailable
Linux - Hardened Repository           199Gb       198Gb      0.50%        Available
E - Backup Repository                 499Gb       461Gb      7.62%        Available
F - Backup Repository                 99Gb        99Gb       0            Available
E - Backup Repository - VEEAM-VBR-02V 99Gb        5Gb        94.95%       Available
F - Backup Repository - VEEAM-VBR-02V 99Gb        98Gb       1.01%        Available

Espero que este post les haya gustado y les sea de utilizad en su jornada profesional.

Hasta Luego Amigos!

Veeam – Obtener información de los Backup Proxy desde Powershell

Hola a todos,

En esta oportunidad les estare mostrando como obtener desde powershell la información relacionada a los Backup Proxy en una infraestructura de Veeam Backup & Replication. Para comenzar es necesario establecer la conexión inicial al Backup Server utilizando el comando «Connect-VBRServer». En mi caso el FQDN de mi Servidor de Backup es el «veeam-vbr.pharmax.local».

PS C:\Users\jocolon> Connect-VBRServer -Server veeam-vbr.pharmax.local -Credential (Get-Credential)

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
User: pharmax\administrator
Password for user pharmax\administrator: ********
PS C:\Users\jocolon> 

Luego de conectarnos al servidor podemos utilizar el cmdlet «Get-VBRViProxy» para identificar cuales son los servidores Backup Proxy en nuestra infraestructura.

PS C:\Users\jocolon> Get-VBRViProxy | Format-Table -Wrap -AutoSize


Name                        Type Host                        IsDisabled Description
----                        ---- ----                        ---------- -----------
veeam-lnx-px.pharmax.local  Vi   veeam-lnx-px.pharmax.local  False      Created by PHARMAX\jocolon...
VMware Backup Proxy         Vi   VEEAM-VBR.pharmax.local     False      Created by Veeam Backu...
VEEAM-VBR-02V.pharmax.local Vi   VEEAM-VBR-02V.pharmax.local False      Created by PHARMAX\jocolon ...


PS C:\Users\jocolon>

Como pueden ver este comando muestra información básica sobre los Backup Proxy pero si desean ver el contenido completo se puede intercambiar el comando de «Format-Table» por «Format-list».

PS C:\Users\jocolon> Get-VBRViProxy | Format-List                 

Id                : ae2cd836-9e0a-440c-9b51-089e71c16ac6
Name              : veeam-lnx-px.pharmax.local
Description       : Created by PHARMAX\jocolon at 12/28/2021 1:24 PM.
Info              : Veeam.Backup.Model.CBackupProxyInfo
HostId            : cd06c723-875d-4da3-a633-ccac571ee296 
Host              : Veeam.Backup.Core.Common.CHost       
Type              : Vi
IsDisabled        : False
Options           : Veeam.Backup.Model.CDomViProxyOptions
MaxTasksCount     : 2
UseSsl            : False
FailoverToNetwork : True
TransportMode     : Auto
ChosenVm          : 
ChassisType       : ViVirtual

Id                : 18b661c1-d9dc-4233-90a0-7e7b10dc2d09
Name              : VMware Backup Proxy
Description       : Created by Veeam Backup & Replication
Info              : Veeam.Backup.Model.CBackupProxyInfo
HostId            : 6745a759-2205-4cd2-b172-8ec8f7e60ef8
Host              : Veeam.Backup.Core.Common.CHost
Type              : Vi
IsDisabled        : False
Options           : Veeam.Backup.Model.CDomViProxyOptions
MaxTasksCount     : 2
UseSsl            : False
FailoverToNetwork : True
TransportMode     : Auto
ChosenVm          :
ChassisType       : ViVirtual

Id                : 07c6322d-8e42-4929-8015-87c002ec0838
Name              : VEEAM-VBR-02V.pharmax.local
Description       : Created by PHARMAX\jocolon at 12/22/2021 8:46 PM.
Info              : Veeam.Backup.Model.CBackupProxyInfo
HostId            : 8452413e-92ee-4461-951d-516c7cf27cec
Host              : Veeam.Backup.Core.Common.CHost
Type              : Vi
IsDisabled        : False
Options           : Veeam.Backup.Model.CDomViProxyOptions
MaxTasksCount     : 2
UseSsl            : False
FailoverToNetwork : True
TransportMode     : Auto
ChosenVm          :
ChassisType       : ViVirtual


PS C:\Users\jocolon> 

Para culminar les dejo un pequeño código para ver mejor el contenido sobre los Backup Proxy de Veeam:

$BackupProxies = Get-VBRViProxy
$Outobj = @()
foreach ($BackupProxy in $BackupProxies) {
    $inObj = [ordered] @{
        'Name' = $BackupProxy.Name
        'Host Name' = $BackupProxy.Host.Name
        'Disabled' = $BackupProxy.IsDisabled
        'Max Tasks Count' = $BackupProxy.MaxTasksCount
        'Use Ssl' = $BackupProxy.UseSsl
        'Failover To Network' = $BackupProxy.FailoverToNetwork
        'Transport Mode' = $BackupProxy.TransportMode
        'Chassis Type' = $BackupProxy.ChassisType
        'OS Type' = $BackupProxy.Host.Type
        'Services Credential' = $BackupProxy.Host.ProxyServicesCreds.Name
        'Status' = Switch (($BackupProxy.Host).IsUnavailable) {
            'False' {'Available'}
            'True' {'Unavailable'}
            default {($BackupProxy.Host).IsUnavailable}
        }
    }
    $OutObj += [pscustomobject]$inobj
}
$OutObj | Format-Table -Wrap -AutoSize

Aqui les dejo el resultado del código.

Hasta Luego Amigos!

Veeam – Módulo de Powershell Introducción

Hola a todos,

En esta ocasión estaré mostrando una introducción del módulo de Powershell de Veeam y cómo realizar la conexión inicial al servidor de backup. En la version de 11 de Veeam Backup & Replication fue introducido un nuevo módulo de powershell llamado «Veeam.Backup.PowerShell». Según el portal de documentación de Veeam existen dos formas para poder utilizar este modulo de Powershell:

  1. Accediendo Powershell desde la consola de Veeam Backup & Replication.
  1. Cargando el módulo desde una consola de Powershell.
PS C:\Users\jocolon> Import-Module -Name Veeam.Backup.PowerShell

WARNING: The names of some imported commands from the module 'Veeam.Backup.PowerShell' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.
PS C:\Users\jocolon> 

Es importante mencionar que este módulo de Powershell está disponible en el servidor de Backup de Veeam o en cualquier dispositivo donde la consola de manejo esté instalada. Referencia:

The remote machine from which you run Veeam PowerShell commands must have the Veeam Backup & Replication Console installed. After you install the Veeam Backup & Replication Console, Veeam PowerShell module will be installed by default

Veeam PowerShell Reference

Para validar si el módulo fue cargado exitosamente pueden utilizar el comando «Get-Module». Como pueden ver en el ejemplo la versión 1.0 de «Veeam.Backup.PowerShell» está cargada en el sistema.

PS C:\Users\jocolon> Get-Module -ListAvailable -Name Veeam.Backup.PowerShell



    Directory: C:\Program Files\Veeam\Backup and Replication\Console


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.0        Veeam.Backup.PowerShell             {Get-VBRComputerFileProxyServer, New-VBRSanI


PS C:\Users\jocolon>

Hablando un poco de historia la forma tradicional de cargar el módulo de Powershell en las versiones pre-v11 era utilizando el siguiente comando:

 Add-PSSnapin -Name VeeamPSSnapIn #Veeam Powershell Pre11

Ahora en la versión 11 de Veeam VBR se utiliza el comando tradicional «Import-Module» como cualquier otro módulo de Powershell. En el caso de Veeam 11 se utiliza el comando haciendo referencia al módulo llamado «Veeam.Backup.PowerShell». Una vez es cargado el módulo podemos verificar que cmdlets están disponible utilizando el comando «Get-Command».

PS C:\Users\jocolon> Get-Command -Module Veeam.Backup.PowerShell


CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Add-VBRCloudTenantToTapeJob                        1.0        Veeam.Backup.PowerShell
Alias           Add-VBRHPSnapshot                                  1.0        Veeam.Backup.PowerShell
Alias           Add-VBRHPStorage                                   1.0        Veeam.Backup.PowerShell
Alias           Clone-VBRJob                                       1.0        Veeam.Backup.PowerShell
Alias           Get-VBRHPCluster                                   1.0        Veeam.Backup.PowerShell
Alias           Get-VBRHPSnapshot                                  1.0        Veeam.Backup.PowerShell
Alias           Get-VBRHPStorage                                   1.0        Veeam.Backup.PowerShell
Alias           Get-VBRHPVolume                                    1.0        Veeam.Backup.PowerShell
Alias           Remove-VBRHPSnapshot                               1.0        Veeam.Backup.PowerShell
Alias           Remove-VBRHPStorage                                1.0        Veeam.Backup.PowerShell
Alias           Set-VBRCloudTenantToTapeJob                        1.0        Veeam.Backup.PowerShell
Truncated.......
PS C:\Users\jocolon>

Ahora que tenemos todo listo podemos establecer la conexión inicial hacia nuestro servidor de Backup. Para lograr este proceso utilizaremos el comando «Connect-VBRServer». En este ejemplo se utiliza la opción para solicitar las credenciales pero los módulos de Veeam aceptan los métodos tradicionales para proveer las credenciales en Powershell (Referencias).

PS C:\Users\jocolon> Connect-VBRServer -Server veeam-vbr.pharmax.local -Credential (Get-Credential)

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
User: pharmax\veeam_admin
Password for user pharmax\veeam_admin: ********
PS C:\Users\jocolon> 

En este ejemplo nos conectamos al servidor con el nombre de «veeam-vbr.pharmax.local» utilizando el nombre de usuario «pharmax\veeam_admin». Es importante mencionar que solo los usuario con el rol de «Veeam Backup Administrator» pueden establecer conexión a través de powershell. So tratamos con una cuenta que no tenga ese nivel de privilegio nos presentara el siguiente error (Referencias):

PS C:\Users\jocolon> Connect-VBRServer -Server veeam-vbr.pharmax.local -Credential (Get-Credential)

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
User: pharmax\vrauser
Password for user pharmax\vrauser: ********
Connect-VBRServer : Only users with Veeam Backup Administrator role assigned can use Veeam Backup PowerShell Snap-in
At line:1 char:1
+ Connect-VBRServer -Server veeam-vbr.pharmax.local -Credential (Get-Cr ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Connect-VBRServer], Exception
    + FullyQualifiedErrorId : AccessCheckerErrorId,Veeam.Backup.PowerShell.Cmdlets.ConnectVBRServer

PS C:\Users\jocolon> 

Podemos validar con el comando «Get-VBRServerSession» la secciones existentes. En el siguiente ejemplo se muestra la conexión al servidor «veeam-vbr» utilizando el usuario «veeam_admin».

PS C:\Users\jocolon> Get-VBRServerSession                 


User        Server                  Port
----        ------                  ----
veeam_admin veeam-vbr.pharmax.local 9392


PS C:\Users\jocolon>

Una vez conectados al servidor de Veeam podemos ejecutar cualquier cmdlet para extraer la información requerida. Como ejemplo les mostraré las tareas de resguardo que se encuentran creadas en mi servidor de prueba de Veeam.

PS C:\Users\jocolon> Get-VBRJob

WARNING: This cmdlet is no longer supported for computer backup jobs. Use "Get-VBRComputerBackupJob" instead.

Job Name                  Type            State      Last Result  Description
--------                  ----            -----      -----------  -----------
Server With Netapp LUN... Windows Agen... Stopped    None         Created by PHARMAX\administrator
HyperV-Backup-Job         Hyper-V Backup  Stopped    None         Created by PHARMAX\administrator 
WIN HyperV VM Backup      Hyper-V Backup  Stopped    Success      Created by PHARMAX\jocolon
PHARMAX-HQ-SVR            VMware Backup   Stopped    None         Created by PHARMAX\administrator
SOBR - TEST               VMware Backup   Stopped    None         Created by PHARMAX\administrator
COMP-CLUSTER-NFS          VMware Backup   Stopped    None         Created by PHARMAX\administrator 
HPE-StoreOnce-Copy-Job    VMware Backu... Stopped    Success      Created by PHARMAX\administrator
VM - Test - AWS           VMware Backup   Stopped    Failed       Created by PHARMAX\jocolon

PS C:\Users\jocolon> 

Espero esta información les sirva de ayuda. Si tienes dudas o alguna pregunta sobre este laboratorio, déjalo en los comentarios. Hasta Luego Amigos!

Instalando Minio en Centos Linux 8

El Problema

En estos últimos meses he estado estudiando para la certificación de «VEEAM VMCE Arquitect» y uno de los requisitos es implementar la opción de «Scale Out Backup Repository». Una forma sencilla de lograr esto es utilizando el servicio de Minio.

Sobre Minio

Minio es un servicio de almacenamiento de objetos de código abierto compatible con el servicio de almacenamiento en la nube de Amazon S3. Las aplicaciones que se han configurado para comunicarse con Amazon S3 también se pueden configurar para comunicarse con Minio, lo que permite que Minio sea una alternativa viable a S3.

Instalación

[Añadiendo el usuario de minio]

[root@VEEAM-MINIO ~]# useradd -r minio-user -s /sbin/nologin

[Creando el archivo de configuración]

[root@VEEAM-MINIO ~]# cat <<EOT >> /etc/default/minio

# Volume to be used for MinIO server.

MINIO_VOLUMES="/usr/local/share/minio/"

# Use if you want to run MinIO on a custom port.

MINIO_OPTS="-C /etc/minio --address <your_server_ip>:9000"

# User for the server.

MINIO_ACCESS_KEY="<change me>"

# Password for the server

MINIO_SECRET_KEY="<change me>"

# Root user for the server. 

MINIO_ROOT_USER="<change me>"

# Root secret for the server. 

MINIO_ROOT_PASSWORD="<change me>"

EOT

[Descargando la aplicación]

[root@VEEAM-MINIO ~]# wget https://dl.min.io/server/minio/release/linux-amd64/minio

[root@VEEAM-MINIO ~]# chmod +x minio #asignando privilegios de ejecutar

[root@VEEAM-MINIO ~]# mv minio /usr/local/bin #moviendo ejecutable al directorio

[root@VEEAM-MINIO ~]# chown minio-user:minio-user /usr/local/bin/minio #asignado permisos

[Creando directorios y asignando permisos]

[root@VEEAM-MINIO ~]# mkdir /usr/local/share/minio

[root@VEEAM-MINIO ~]# chmod 755 /usr/local/share/minio

[root@VEEAM-MINIO ~]# chown minio-user:minio-user /usr/local/share/minio

[root@VEEAM-MINIO ~]# mkdir /etc/minio

[root@VEEAM-MINIO ~]# chown minio-user:minio-user /etc/minio

[Descargando y activando servicio de Minio]

[root@VEEAM-MINIO ~]# wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service -O /etc/systemd/system/minio.service

[root@VEEAM-MINIO ~]# systemctl daemon-reload

[root@VEEAM-MINIO ~]# systemctl enable minio

[Inicializando y verificando el servicio]

[root@VEEAM-MINIO ~]# systemctl start minio

[root@VEEAM-MINIO ~]# systemctl status minio

[Permitiendo tráfico en el «firewall» local]

[root@VEEAM-MINIO ~]# firewall-cmd --zone=public --add-port=9000/tcp --permanent

[root@VEEAM-MINIO ~]# firewall-cmd --reload