Skip to main content

Diagramming the Veeam Backup & Replication Infrastructure

  • September 10, 2024
  • 61 comments
  • 1678 views

Hello,

 

As you may know I have been working for some time with several tools to document or diagram the Veeam Backup & Replica Infrastructure.

 

In the latest version of Veeam.Diagrammer the ability to generate a diagram of the infrastructure has been added.

 

Here is the link:

https://techmyth.blog/posts/veeam-diagraming-infra/

 

Greetings from the Caribbean :)

 

61 comments

Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

This is awesome Jonathan.  I have been watching and testing this project.  I will try the newest one as getting diagrams of the Veeam environment will be very beneficial for me in my role.  😎


Dynamic
Forum|alt.badge.img+13
  • Veeam Vanguard
  • September 10, 2024

Wow! @jcolonfzenpr this is so nice and usefull! Thank you for this. Another great tool for documentation.
I did a quick check and compared it to your video…

 

The -DiagramType 'Backup-Infrastructure' seems to not working for me, as the result will still show the last used value. For example, the result for Backup-to-Repository… every single String is working, except Backup-Infrastructure.

I will also check it on another environment, thanks again - love it :)

 

 

Update: did a check on another environment, also the string Backup-Infrastructure is only displaying the last used String…
In this environment, i have also an attached SMB Repository, two different Hardened Repositories and the listet Object Storage. But only this one Object Storage is shown. 

If i can provide you with more details to troubleshoot, just ping me. Maybe i’m the only one with this issue, but anyway, no stress - take your time. I appreciate it. 

 

 

 

Update#2:
enjoy your Ko-fi :-)

 
 

 

 


  • Author
  • September 10, 2024

Hi,

 

What do you mean here: Update: did a check on another environment, also the string Backup-Infrastructure is only displaying the last used String…

 

Can you share the installed modules?

 

Get-Module -ListAvailable @("Veeam.Diagrammer";"Diagrammer.core") 

Example:

PS C:\Users\jocolon\> Get-Module -ListAvailable @("Veeam.Diagrammer";"Diagrammer.core") 


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


ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 0.2.4 Diagrammer.Core {Convert-DiaTableToHTML, Get-DiaHtmlLabel, Get-DiaHtmlNodeTable, Get-DiaHtmlTable...}
Script 0.6.4 Veeam.Diagrammer New-VeeamDiagram


PS C:\Users\jocolon\>

Thanks for the kofi contribution :)


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

Seeing this issue @jcolonfzenpr when using Backup-Infrastructure diagram type.

 


  • Author
  • September 10, 2024

Hi @Chris.Childerhose ,

The Get-VBRServerSession cmdlet is part of the veeam powershell modules.

PS C:\Users\jocolon\> Get-Command -Name Get-VBRServerSession

CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-VBRServerSession 12.2.0.334 Veeam.Backup.PowerShell


PS C:\Users\jocolon\>

Can you check if the Veeam Powershell module are installed?

Get-Module -ListAvailable Veeam*

Best regards,


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

Hi ,

The Get-VBRServerSession cmdlet is part of the veeam powershell modules.

PS C:\Users\jocolon\> Get-Command -Name Get-VBRServerSession

CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-VBRServerSession 12.2.0.334 Veeam.Backup.PowerShell


PS C:\Users\jocolon\>

Can you check if the Veeam Powershell module are installed?

Get-Module -ListAvailable Veeam*

Best regards,

I figured it out - I was using Powershell 7 environment which is not supported.  I changed my terminal in Windows to use PS5 and now it works.  Sorry about that.  LOL


  • Author
  • September 10, 2024

Hi ,

The Get-VBRServerSession cmdlet is part of the veeam powershell modules.

PS C:\Users\jocolon\> Get-Command -Name Get-VBRServerSession

CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-VBRServerSession 12.2.0.334 Veeam.Backup.PowerShell


PS C:\Users\jocolon\>

Can you check if the Veeam Powershell module are installed?

Get-Module -ListAvailable Veeam*

Best regards,

I figured it out - I was using Powershell 7 environment which is not supported.  I changed my terminal in Windows to use PS5 and now it works.  Sorry about that.  LOL

I'm glad you were able to run the script. Any bugs or improvements you can recommend feel free to let me know.

I will add code to verify the Powershell version!


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

@jcolonfzenpr -- issue now after changing to PS5 when running.  See errors below.

Graph : You cannot call a method on a null-valued expression.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:398 char:29
+ ... cript:Graph = Graph -Name VeeamVBR -Attributes $MainGraphAttributes {
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Graph], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull,Graph

Get-ChildItem : Cannot find path 'E:\Diagrams\Output.pdf' because it does not exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (E:\Diagrams\Output.pdf:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ChildItem : Cannot find path 'C:\Users\administrator.HOME\AppData\Local\Temp\8\TempOutPut.png' because it does not
exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\admini...\TempOutPut.png:String) [Get-ChildItem], ItemNotFound
   Exception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Export-Diagrammer : Cannot bind argument to parameter 'Path' because it is null.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:507 char:30
+ ... utDiagram = Export-Diagrammer -GraphObj ($Graph | Select-String -Patt ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Export-Diagrammer


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

It seems to be this diagram option - Backup-Infrastructure

I have tried some others and they work fine.

 
 
 

  • Author
  • September 10, 2024

@jcolonfzenpr -- issue now after changing to PS5 when running.  See errors below.

Graph : You cannot call a method on a null-valued expression.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:398 char:29
+ ... cript:Graph = Graph -Name VeeamVBR -Attributes $MainGraphAttributes {
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Graph], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull,Graph

Get-ChildItem : Cannot find path 'E:\Diagrams\Output.pdf' because it does not exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (E:\Diagrams\Output.pdf:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ChildItem : Cannot find path 'C:\Users\administrator.HOME\AppData\Local\Temp\8\TempOutPut.png' because it does not
exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\admini...\TempOutPut.png:String) [Get-ChildItem], ItemNotFound
   Exception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Export-Diagrammer : Cannot bind argument to parameter 'Path' because it is null.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:507 char:30
+ ... utDiagram = Export-Diagrammer -GraphObj ($Graph | Select-String -Patt ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Export-Diagrammer

 

I think the error is permission related, change the --OutputFolderPath to something inside your user profile path Ex : C:\Users\administrator.HOME\ and let me know.


coolsport00
Forum|alt.badge.img+21
  • Veeam Legend
  • September 10, 2024

Looking forward to testing this out @jcolonfzenpr ...after I resolve my performance issue 😁

Thanks for sharing. Will let you know if I run into any issues.


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

@jcolonfzenpr -- issue now after changing to PS5 when running.  See errors below.

Graph : You cannot call a method on a null-valued expression.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:398 char:29
+ ... cript:Graph = Graph -Name VeeamVBR -Attributes $MainGraphAttributes {
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Graph], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull,Graph

Get-ChildItem : Cannot find path 'E:\Diagrams\Output.pdf' because it does not exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (E:\Diagrams\Output.pdf:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ChildItem : Cannot find path 'C:\Users\administrator.HOME\AppData\Local\Temp\8\TempOutPut.png' because it does not
exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\admini...\TempOutPut.png:String) [Get-ChildItem], ItemNotFound
   Exception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Export-Diagrammer : Cannot bind argument to parameter 'Path' because it is null.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:507 char:30
+ ... utDiagram = Export-Diagrammer -GraphObj ($Graph | Select-String -Patt ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Export-Diagrammer

 

I think the error is permission related, change the --OutputFolderPath to something inside your user profile path Ex : C:\Users\administrator.HOME\ and let me know.

Sounds good.  I will report back.

Also how do you use the -Filename parameter to specify a filename?  Do you have an example?  I tried to use it but probably not doing it right.  LOL


  • Author
  • September 10, 2024

@jcolonfzenpr -- issue now after changing to PS5 when running.  See errors below.

Graph : You cannot call a method on a null-valued expression.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:398 char:29
+ ... cript:Graph = Graph -Name VeeamVBR -Attributes $MainGraphAttributes {
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Graph], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull,Graph

Get-ChildItem : Cannot find path 'E:\Diagrams\Output.pdf' because it does not exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (E:\Diagrams\Output.pdf:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Get-ChildItem : Cannot find path 'C:\Users\administrator.HOME\AppData\Local\Temp\8\TempOutPut.png' because it does not
exist.
At C:\Program Files\WindowsPowerShell\Modules\PSGraph\2.1.38.27\PSGraph.psm1:917 char:17
+                 Get-ChildItem $PSBoundParameters["DestinationPath"]
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\admini...\TempOutPut.png:String) [Get-ChildItem], ItemNotFound
   Exception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Export-Diagrammer : Cannot bind argument to parameter 'Path' because it is null.
At C:\Program Files\WindowsPowerShell\Modules\Veeam.Diagrammer\0.6.4\Src\Public\New-VeeamDiagram.ps1:507 char:30
+ ... utDiagram = Export-Diagrammer -GraphObj ($Graph | Select-String -Patt ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Export-Diagrammer

 

I think the error is permission related, change the --OutputFolderPath to something inside your user profile path Ex : C:\Users\administrator.HOME\ and let me know.

Sounds good.  I will report back.

Also how do you use the -Filename parameter to specify a filename?  Do you have an example?  I tried to use it but probably not doing it right.  LOL

This is the way it is used, if you have any error let me know

 


Dynamic
Forum|alt.badge.img+13
  • Veeam Vanguard
  • September 10, 2024

Hi,

 

What do you mean here: Update: did a check on another environment, also the string Backup-Infrastructure is only displaying the last used String…

 

Can you share the installed modules?

 

Get-Module -ListAvailable @("Veeam.Diagrammer";"Diagrammer.core") 

Example:

PS C:\Users\jocolon\> Get-Module -ListAvailable @("Veeam.Diagrammer";"Diagrammer.core") 


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


ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 0.2.4 Diagrammer.Core {Convert-DiaTableToHTML, Get-DiaHtmlLabel, Get-DiaHtmlNodeTable, Get-DiaHtmlTable...}
Script 0.6.4 Veeam.Diagrammer New-VeeamDiagram


PS C:\Users\jocolon\>

Thanks for the kofi contribution :)

I mean, for example, when used backup-to-sobr as diagramtype, it’s working… when then use backup-infrastructure as diagramtype, the result will in my case be the same result as used before (so on this example, backup-to-sobr). 
i had also checked if I’m running on version 5, which is on both environments the case.

 

But as seen by Chris, I think he is running in the same behavior reagarding the backup-infrastructure diagramtype  

 

Can’t currently provide more information, as I’m sitting with mobile next to my sleeping toddler 😅


  • Author
  • September 10, 2024

If any of you could send me the log I could identify where the bug is.

To do this it is required to run the script with the debug option turned on in powershell using the following commands:

Enable powershell debugging:

$global:VerbosePreference = 'Continue'
$global:DebugPreference = 'Continue'
Start-Transcript -Path .\Output.log
New-VeeamDiagram -Target <-- change this part -->
Stop-Transcript

The commands generate the Output.log file which you can send to me at:

jcolonf@zenprsolutions.com

After saving the log, reset powershell to default settings:

$global:VerbosePreference = 'SilentlyContinue'
$global:DebugPreference = 'SilentlyContinue'

 


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 10, 2024

@jcolonfzenpr -- sent you the log output from my homelab VBK server.  Hopefully it helps fix the issue.


Dynamic
Forum|alt.badge.img+13
  • Veeam Vanguard
  • September 10, 2024

@jcolonfzenpr let me know if you also need a second log, wouldn’t be a problem 😊


  • Author
  • September 10, 2024

@jcolonfzenpr let me know if you also need a second log, wouldn’t be a problem 😊

If you can send me the log it would be a great help.


Dynamic
Forum|alt.badge.img+13
  • Veeam Vanguard
  • September 11, 2024

Hi Jonathan, reports have been sent to you by mail 😉


  • Author
  • September 11, 2024

In this environment, i have also an attached SMB Repository, two different Hardened Repositories and the listet Object Storage. But only this one Object Storage is shown. 

If i can provide you with more details to troubleshoot, just ping me. Maybe i’m the only one with this issue, but anyway, no stress - take your time. I appreciate it. 

 

 

 

Can you show me the output of this cmdlet?

Get-VBRBackupRepository | Select-Object -Property Type

 


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 11, 2024

Any news on the Backup-Infrastructure report type and were the logs sent helpful?  Just checking as the other reports are working well and are fantastic! 😎


Dynamic
Forum|alt.badge.img+13
  • Veeam Vanguard
  • September 11, 2024

In this environment, i have also an attached SMB Repository, two different Hardened Repositories and the listet Object Storage. But only this one Object Storage is shown. 

If i can provide you with more details to troubleshoot, just ping me. Maybe i’m the only one with this issue, but anyway, no stress - take your time. I appreciate it. 

 

 

 

Can you show me the output of this cmdlet?

Get-VBRBackupRepository | Select-Object -Property Type

 

yes for sure:



PS C:\Users\Administrator> Get-VBRBackupRepository | Select-Object -Property Type

         Type
         ----
          Nfs
LinuxHardened
     WasabiS3
LinuxHardened

 

And sorry, it was not a SMB share, it was NFS :-)


  • Author
  • September 11, 2024

Any news on the Backup-Infrastructure report type and were the logs sent helpful?  Just checking as the other reports are working well and are fantastic! 😎

I think I've fixed it, I hope to release a new version soon for you to test. :)


  • Author
  • September 11, 2024

In this environment, i have also an attached SMB Repository, two different Hardened Repositories and the listet Object Storage. But only this one Object Storage is shown. 

If i can provide you with more details to troubleshoot, just ping me. Maybe i’m the only one with this issue, but anyway, no stress - take your time. I appreciate it. 

 

 

 

Can you show me the output of this cmdlet?

Get-VBRBackupRepository | Select-Object -Property Type

 

yes for sure:



PS C:\Users\Administrator> Get-VBRBackupRepository | Select-Object -Property Type

         Type
         ----
          Nfs
LinuxHardened
     WasabiS3
LinuxHardened

 

And sorry, it was not a SMB share, it was NFS :-)

It’s Nfs and not NfsShare! Thanks

Fixed!


Chris.Childerhose
Forum|alt.badge.img+21
  • Veeam Legend, Veeam Vanguard
  • September 11, 2024

Any news on the Backup-Infrastructure report type and were the logs sent helpful?  Just checking as the other reports are working well and are fantastic! 😎

I think I've fixed it, I hope to release a new version soon for you to test. :)

Great!  Looking forward to the fix and will test it when ready.