diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 3f528ae..643b38f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -20,6 +20,8 @@ body: attributes: label: Veeam Backup & Replication version options: + - vNEXT + - 12.2 - 12.1 - 12 - 11 diff --git a/.github/ISSUE_TEMPLATE/change_request.yml b/.github/ISSUE_TEMPLATE/change_request.yml index 5def392..055dd17 100644 --- a/.github/ISSUE_TEMPLATE/change_request.yml +++ b/.github/ISSUE_TEMPLATE/change_request.yml @@ -20,6 +20,8 @@ body: attributes: label: Veeam Backup & Replication version options: + - vNEXT + - 12.2 - 12.1 - 12 - 11 diff --git a/AsBuiltReport.Veeam.VBR.psd1 b/AsBuiltReport.Veeam.VBR.psd1 index 8d245d2..35c439a 100644 --- a/AsBuiltReport.Veeam.VBR.psd1 +++ b/AsBuiltReport.Veeam.VBR.psd1 @@ -12,7 +12,7 @@ RootModule = 'AsBuiltReport.Veeam.VBR.psm1' # Version number of this module. - ModuleVersion = '0.8.9' + ModuleVersion = '0.8.10' # Supported PSEditions # CompatiblePSEditions = @() @@ -63,11 +63,11 @@ } @{ ModuleName = 'Diagrammer.Core'; - ModuleVersion = '0.2.3' + ModuleVersion = '0.2.7' } @{ ModuleName = 'Veeam.Diagrammer'; - ModuleVersion = '0.6.2' + ModuleVersion = '0.6.6' } ) @@ -137,6 +137,4 @@ # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. # DefaultCommandPrefix = '' -} - - +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 59c72ac..f1cbeb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ##### This project is community maintained and has no sponsorship from Veeam, its employees or any of its affiliates. +## [0.8.10] - 2024-09-12 + +### Changed + +- Migrate infrastructure diagram to Veeam.Diagrammer + +### Changed + +- Increase Diagrammer.Core minimum requirement to v0.2.7 +- Increase Veeam.Diagrammer minimum requirement to v0.6.6 + +### Remove + +- Remove unused icons folder and images + ## [0.8.9] - 2024-08-31 ### Added diff --git a/README.md b/README.md index 2e50aa2..51769a7 100644 --- a/README.md +++ b/README.md @@ -276,4 +276,4 @@ PS C:\> New-AsBuiltReport -Report Veeam.VBR -Target veeam-vbr.pharmax.local -Use - Since many of Veeam's features depend on the Standard+ license, the Community edition is not supported. - If the Veeam Backup Server is not joined to an Active Directory domain (WorkGroup Auth), the PSDefaultAuthentication option must be set to Negotiate. If it is not, some of the report sections will be missing. -- This project uses the `PScribo` module to generate the report. It has been identified that the `PSWriteWord` module of `EvotecIT` uses the same cmdlet names. For this report to be generated correctly it is required to uninstall the `PSWriteWord` module. +- This project uses the PScribo module to generate the report. It has been detected that the EvotecIT PSWriteWord module uses the same cmdlet names. For this report to be generated correctly it is required to uninstall the PSWriteWord module. diff --git a/Samples/AsBuiltReport.Veeam.VBR.png b/Samples/AsBuiltReport.Veeam.VBR.png index 77c0c10..112ff76 100644 Binary files a/Samples/AsBuiltReport.Veeam.VBR.png and b/Samples/AsBuiltReport.Veeam.VBR.png differ diff --git a/Src/Private/Get-AbrVbrDiagram.ps1 b/Src/Private/Get-AbrVbrDiagram.ps1 deleted file mode 100644 index ae5a20b..0000000 --- a/Src/Private/Get-AbrVbrDiagram.ps1 +++ /dev/null @@ -1,639 +0,0 @@ -function Get-AbrVbrDiagram { - <# - .SYNOPSIS - Diagram the configuration of Veeam Backup & Replication infrastructure in PDF/SVG/DOT/PNG formats using PSGraph and Graphviz. - .DESCRIPTION - Diagram the configuration of Veeam Backup & Replication infrastructure in PDF/SVG/DOT/PNG formats using PSGraph and Graphviz. - .PARAMETER Format - Specifies the output format of the diagram. - The supported output formats are PDF, PNG, DOT & SVG. - Multiple output formats may be specified, separated by a comma. - .PARAMETER NodeSeparation - Controls Node separation ratio in visualization - By default, NodeSeparation will be set to .60. - .PARAMETER SectionSeparation - Controls Section (Subgraph) separation ratio in visualization - By default, NodeSeparation will be set to .75. - .PARAMETER EdgeType - Controls how edges lines appear in visualization - The supported edge type are: - 'polyline', 'curved', 'ortho', 'line', 'spline' - By default, EdgeType will be set to spline. - References: https://graphviz.org/docs/attrs/splines/ - .PARAMETER OutputFolderPath - Specifies the folder path to save the diagram. - .PARAMETER Filename - Specifies a filename for the diagram. - .PARAMETER EnableEdgeDebug - Control to enable edge debugging ( Dummy Edge and Node lines ). - .PARAMETER EnableSubGraphDebug - Control to enable subgraph debugging ( Subgraph Lines ). - .PARAMETER EnableErrorDebug - Control to enable error debugging. - .PARAMETER AuthorName - Allow to set footer signature Author Name. - .PARAMETER CompanyName - Allow to set footer signature Company Name. - .PARAMETER Logo - Allow to change the Veeam logo to a custom one. - Image should be 400px x 100px or less in size. - .PARAMETER SignatureLogo - Allow to change the Diagrammer signature logo to a custom one. - Image should be 120px x 130px or less in size. - .PARAMETER Signature - Allow the creation of footer signature. - AuthorName and CompanyName must be set to use this property. - .NOTES - Version: 0.8.9 - Author(s): Jonathan Colon - Twitter: @jcolonfzenpr - Github: rebelinux - Credits: Kevin Marquette (@KevinMarquette) - PSGraph module - Credits: Prateek Singh (@PrateekKumarSingh) - AzViz module - .LINK - https://github.com/rebelinux/ - https://github.com/KevinMarquette/PSGraph - https://github.com/PrateekKumarSingh/AzViz - #> - - [Diagnostics.CodeAnalysis.SuppressMessage( - 'PSUseShouldProcessForStateChangingFunctions', - '' - )] - - [CmdletBinding( - PositionalBinding = $false, - DefaultParameterSetName = 'Credential' - )] - param ( - - [Parameter( - Position = 4, - Mandatory = $false, - HelpMessage = 'Please provide the diagram output format' - )] - [ValidateNotNullOrEmpty()] - [ValidateSet('pdf', 'svg', 'png', 'dot', 'base64')] - [Array] $Format = 'pdf', - - [Parameter( - Mandatory = $false, - HelpMessage = 'Please provide the path to the diagram output file' - )] - [ValidateScript( { - if (Test-Path -Path $_) { - $true - } else { - throw "Path $_ not found!" - } - })] - [string] $OutputFolderPath = [System.IO.Path]::GetTempPath(), - - [Parameter( - Mandatory = $false, - HelpMessage = 'Please provide the path to the custom logo used for Signature' - )] - [ValidateScript( { - if (Test-Path -Path $_) { - $true - } else { - throw "File $_ not found!" - } - })] - [string] $SignatureLogo, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Please provide the path to the custom logo' - )] - [ValidateScript( { - if (Test-Path -Path $_) { - $true - } else { - throw "File $_ not found!" - } - })] - [string] $Logo, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Specify the Diagram filename' - )] - [ValidateNotNullOrEmpty()] - [String] $Filename, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Controls how edges lines appear in visualization' - )] - [ValidateSet('polyline', 'curved', 'ortho', 'line', 'spline')] - [string] $EdgeType = 'line', - - [Parameter( - Mandatory = $false, - HelpMessage = 'Controls Node separation ratio in visualization' - )] - [ValidateSet(0, 1, 2, 3)] - [string] $NodeSeparation = .60, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Controls Section (Subgraph) separation ratio in visualization' - )] - [ValidateSet(0, 1, 2, 3)] - [string] $SectionSeparation = .75, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Allow to enable edge debugging ( Dummy Edge and Node lines)' - )] - [Switch] $EnableEdgeDebug = $false, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Allow to enable subgraph debugging ( Subgraph Lines )' - )] - [Switch] $EnableSubGraphDebug = $false, - [Parameter( - Mandatory = $false, - HelpMessage = 'Allow to enable error debugging' - )] - [Switch] $EnableErrorDebug = $false, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Allow to set footer signature Author Name' - )] - [string] $AuthorName, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Allow to set footer signature Company Name' - )] - [string] $CompanyName, - - [Parameter( - Mandatory = $false, - HelpMessage = 'Allow the creation of footer signature' - )] - [Switch] $Signature = $false - ) - - - begin { - - # Variable translating Icon to Image Path ($IconPath) - $script:Images = @{ - "VBR_Server" = "VBR_server.png" - "VBR_Repository" = "VBR_Repository.png" - "VBR_Deduplicating_Storage" = "Deduplicating_Storage.png" - "VBR_Linux_Repository" = "Linux_Repository.png" - "VBR_Windows_Repository" = "Windows_Repository.png" - "VBR_Cloud_Repository" = "Cloud_Repository.png" - "VBR_Object_Repository" = "Object_Storage.png" - "VBR_Object" = "Object_Storage_support.png" - "VBR_Server_DB" = "Microsoft_SQL_DB.png" - "VBR_Proxy" = "Veeam_Proxy.png" - "VBR_Proxy_Server" = "Proxy_Server.png" - "VBR_Wan_Accel" = "WAN_accelerator.png" - "VBR_SOBR" = "Logo_SOBR.png" - "VBR_SOBR_Repo" = "Scale_out_Backup_Repository.png" - "VBR_LOGO" = "Veeam_logo.png" - "VBR_No_Icon" = "no_icon.png" - 'VBR_Storage_NetApp' = "Storage_NetApp.png" - 'VBR_vCenter_Server' = 'vCenter_server.png' - 'VBR_ESXi_Server' = 'ESXi_host.png' - 'VBR_HyperV_Server' = 'Hyper-V_host.png' - 'VBR_Server_EM' = 'Veeam_Backup_Enterprise_Manager.png' - 'VBR_Tape_Server' = 'Tape_Server.png' - 'VBR_Tape_Library' = 'Tape_Library.png' - 'VBR_Tape_Drive' = 'Tape_Drive.png' - 'VBR_Tape_Vaults' = 'Tape encrypted.png' - "VBR_Server_DB_PG" = "PostGre_SQL_DB.png" - "VBR_LOGO_Footer" = "verified_recoverability.png" - "VBR_AGENT_Container" = "Folder.png" - "VBR_AGENT_AD" = "Server.png" - "VBR_AGENT_MC" = "Task list.png" - "VBR_AGENT_IC" = "Workstation.png" - "VBR_AGENT_CSV" = "CSV_Computers.png" - "VBR_AGENT_AD_Logo" = "Microsoft Active Directory.png" - "VBR_AGENT_CSV_Logo" = "File.png" - "VBR_AGENT_Server" = "Server_with_Veeam_Agent.png" - "VBR_vSphere" = "VMware_vSphere.png" - "VBR_HyperV" = "Microsoft_SCVMM.png" - "VBR_Tape" = "Tape.png" - "VBR_Service_Providers" = "Veeam_Service_Provider_Console.png" - "VBR_Service_Providers_Server" = "Veeam_Service_Provider_Server.png" - } - - if (($Format -ne "base64") -and !(Test-Path $OutputFolderPath)) { - Write-Error "OutputFolderPath '$OutputFolderPath' is not a valid folder path." - break - } - - if ($Signature -and (([string]::IsNullOrEmpty($AuthorName)) -or ([string]::IsNullOrEmpty($CompanyName)))) { - throw "Get-AbrVbrDiagram: AuthorName and CompanyName must be defined if the Signature option is specified" - } - - $MainGraphLabel = "Backup & Replication Infrastructure" - - $IconDebug = $false - - if ($EnableEdgeDebug) { - $EdgeDebug = @{style = 'filled'; color = 'red' } - $IconDebug = $true - } else { $EdgeDebug = @{style = 'invis'; color = 'red' } } - - if ($EnableSubGraphDebug) { - $SubGraphDebug = @{style = 'dashed'; color = 'red' } - $NodeDebug = @{color = 'black'; style = 'red'; shape = 'plain' } - $IconDebug = $true - } else { - $SubGraphDebug = @{style = 'invis'; color = 'gray' } - $NodeDebug = @{color = 'transparent'; style = 'transparent'; shape = 'point' } - } - - $RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent - $IconPath = Join-Path $RootPath 'icons' - $Dir = 'top-to-bottom' - - # Validate Custom logo - if ($Logo) { - $CustomLogo = Test-Logo -LogoPath (Get-ChildItem -Path $Logo).FullName -IconPath $IconPath -ImagesObj $Images - } else { - $CustomLogo = "VBR_LOGO" - } - # Validate Custom Signature Logo - if ($SignatureLogo) { - $CustomSignatureLogo = Test-Logo -LogoPath (Get-ChildItem -Path $SignatureLogo).FullName -IconPath $IconPath -ImagesObj $Images - } - - $MainGraphAttributes = @{ - pad = 1 - rankdir = $Dir - overlap = 'false' - splines = $EdgeType - penwidth = 1.5 - fontname = "Segoe Ui Black" - fontcolor = '#005f4b' - fontsize = 32 - style = "dashed" - labelloc = 't' - imagepath = $IconPath - nodesep = $NodeSeparation - ranksep = $SectionSeparation - } - } - - process { - - # Graph default atrributes - $script:Graph = Graph -Name VeeamVBR -Attributes $MainGraphAttributes { - # Node default theme - Node @{ - label = '' - shape = 'none' - labelloc = 't' - style = 'filled' - fillColor = '#71797E' - fontsize = 14; - imagescale = $true - } - # Edge default theme - Edge @{ - style = 'dashed' - dir = 'both' - arrowtail = 'dot' - color = '#71797E' - penwidth = 3 - arrowsize = 1 - } - - # Signature Section - if ($Signature) { - Write-PScriboMessage "Generating diagram signature" - if ($CustomSignatureLogo) { - $Signature = (Get-DiaHTMLTable -ImagesObj $Images -Rows "Author: $($AuthorName)", "Company: $($CompanyName)" -TableBorder 2 -CellBorder 0 -Align 'left' -Logo $CustomSignatureLogo -IconDebug $IconDebug) - } else { - $Signature = (Get-DiaHTMLTable -ImagesObj $Images -Rows "Author: $($AuthorName)", "Company: $($CompanyName)" -TableBorder 2 -CellBorder 0 -Align 'left' -Logo "VBR_LOGO_Footer" -IconDebug $IconDebug) - } - } else { - Write-PScriboMessage "No diagram signature specified" - $Signature = " " - } - - #---------------------------------------------------------------------------------------------# - # Graphviz Clusters (SubGraph) Section # - # SubGraph can be use to bungle the Nodes together like a single entity # - # SubGraph allow you to have a graph within a graph # - # PSgraph: https://psgraph.readthedocs.io/en/latest/Command-SubGraph/ # - # Graphviz: https://graphviz.org/docs/attrs/cluster/ # - #---------------------------------------------------------------------------------------------# - - # Subgraph OUTERDRAWBOARD1 used to draw the footer signature (bottom-right corner) - SubGraph OUTERDRAWBOARD1 -Attributes @{Label = $Signature; fontsize = 24; penwidth = 1.5; labelloc = 'b'; labeljust = "r"; style = $SubGraphDebug.style; color = $SubGraphDebug.color } { - # Subgraph MainGraph used to draw the main drawboard. - SubGraph MainGraph -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label $MainGraphLabel -IconType $CustomLogo -IconDebug $IconDebug -IconWidth 250 -IconHeight 80); fontsize = 24; penwidth = 0; labelloc = 't'; labeljust = "c" } { - - if ($BackupServers) { - - #-----------------------------------------------------------------------------------------------# - # Graphviz Node Section # - # Nodes are Graphviz elements used to define a object entity # - # Nodes can have attribues like Shape, HTML Labels, Styles etc.. # - # PSgraph: https://psgraph.readthedocs.io/en/latest/Command-Node/ # - # Graphviz: https://graphviz.org/doc/info/shapes.html # - #-----------------------------------------------------------------------------------------------# - - # Used for debugging - if ($Options.DiagramObjDebug) { - Get-VBRDebugObject - } - - # Get Veeam Backup Server Infrastructure Information - # This create the Backup Server, Database and Enterprise Manager Objects - # Here Veeam Pwershell Module are used to retreive the information - Get-VBRBackupServerInfo - - # Build Backup Server Graphviz Cluster - Get-VbrBackupSvrDiagramObj - - # Proxy Graphviz Cluster - $Proxies = Get-VbrProxyInfo - if ($Proxies) { - - SubGraph ProxyServer -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Backup Proxies" -IconType "VBR_Proxy" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - if ($Proxies | Where-Object { $_.AditionalInfo.Type -eq "vSphere" }) { - SubGraph ViProxyServer -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "VMware Proxies" -IconType "VBR_vSphere" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node ViProxies @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject (($Proxies | Where-Object { $_.AditionalInfo.Type -eq "vSphere" }) | ForEach-Object { $_.Name.split('.')[0] }) -Align "Center" -iconType "VBR_Proxy_Server" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo ($Proxies.AditionalInfo | Where-Object { $_.Type -eq "vSphere" })); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - - if ($Proxies.AditionalInfo | Where-Object { $_.Type -eq "Off host" -or $_.Type -eq "On host" }) { - SubGraph HvProxyServer -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Hyper-V Proxies" -IconType "VBR_HyperV" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node HvProxies @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject (($Proxies | Where-Object { $_.AditionalInfo.Type -eq "Off host" -or $_.AditionalInfo.Type -eq "On host" }).Name | ForEach-Object { $_.split('.')[0] }) -Align "Center" -iconType "VBR_Proxy_Server" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo ($Proxies.AditionalInfo | Where-Object { $_.Type -eq "Off host" -or $_.Type -eq "On host" })); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - } - } else { - SubGraph ProxyServer -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Backup Proxies" -IconType "VBR_Proxy" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node -Name Proxies -Attributes @{Label = 'No Backup Proxies'; shape = "rectangle"; labelloc = 'c'; fixedsize = $true; width = "3"; height = "2"; fillColor = 'transparent'; penwidth = 0 } - } - } - - # SOBR Graphviz Cluster - $SOBR = Get-VbrSOBRInfo - if ($SOBR) { - SubGraph SOBR -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Scale-Out Backup Repositories" -IconType "VBR_SOBR" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node SOBRRepo @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject ($SOBR | ForEach-Object { $_.Name.split('.')[0] }) -Align "Center" -iconType "VBR_SOBR_Repo" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $SOBR.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - - } - } - - # Repositories Graphviz Cluster - $RepositoriesInfo = Get-VbrRepositoryInfo - if ($RepositoriesInfo) { - SubGraph Repos -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Backup Repositories" -IconType "VBR_Repository" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node Repositories @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $RepositoriesInfo.Name -Align "Center" -iconType "VBR_Windows_Repository" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $RepositoriesInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } else { - SubGraph Repos -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Backup Repositories" -IconType "VBR_Repository" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node -Name Repositories -Attributes @{Label = 'No Backup Repositories'; shape = "rectangle"; labelloc = 'c'; fixedsize = $true; width = "3"; height = "2"; fillColor = 'transparent'; penwidth = 0 } - } - } - # Object Repositories Graphviz Cluster - $ObjectRepositoriesInfo = Get-VbrObjectRepoInfo - $ArchObjRepositoriesInfo = Get-VbrArchObjectRepoInfo - if ($ObjectRepositoriesInfo -or $ArchObjRepositoriesInfo) { - SubGraph ObjectRepos -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Object Storage" -IconType "VBR_Object" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded' } { - - if ($ObjectRepositoriesInfo) { - SubGraph ObjectRepo -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Object Repositories" -IconType "VBR_Object_Repository" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded' } { - - Node ObjectRepositories @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $ObjectRepositoriesInfo.Name -Align "Center" -iconType "VBR_Object_Repository" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $ObjectRepositoriesInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - - if ($ArchObjRepositoriesInfo) { - SubGraph ArchObjectRepo -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Archives Object Repositories" -IconType "VBR_Object_Repository" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded' } { - - Node ArchObjectRepositories @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $ArchObjRepositoriesInfo.Name -Align "Center" -iconType "VBR_Object_Repository" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $ArchObjRepositoriesInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - } - } else { - SubGraph ObjectRepos -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Object Storage" -IconType "VBR_Object" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded' } { - - Node -Name ObjectRepo -Attributes @{Label = 'No Object Storage Repositories'; shape = "rectangle"; labelloc = 'c'; fixedsize = $true; width = "4"; height = "3"; fillColor = 'transparent'; penwidth = 0 } - } - } - - # WanAccels Graphviz Cluster - $WanAccels = Get-VbrWanAccelInfo - if ($WanAccels) { - SubGraph WanAccels -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Wan Accelerators" -IconType "VBR_Wan_Accel" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded' } { - - Node WanAccelServer @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject ($WanAccels | ForEach-Object { $_.Name.split('.')[0] }) -Align "Center" -iconType "VBR_Wan_Accel" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $WanAccels.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - - } - } - - # # Tapes Graphviz Cluster - $TapeServerInfo = Get-VbrTapeServersInfo - $TapeLibraryInfo = Get-VbrTapeLibraryInfo - $TapeVaultInfo = Get-VbrTapeVaultInfo - if ($TapeServerInfo) { - SubGraph TapeInfra -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Tape Infrastructure" -IconType "VBR_Tape" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - SubGraph TapeServers -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Tape Servers" -IconType "VBR_Tape_Server" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node TapeServer @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $TapeServerInfo.Name -Align "Center" -iconType "VBR_Tape_Server" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $TapeServerInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - - if ($TapeLibraryInfo) { - SubGraph TapeLibraries -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Tape Library" -IconType "VBR_Tape_Library" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node TapeLibrary @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $TapeLibraryInfo.Name -Align "Center" -iconType "VBR_Tape_Library" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $TapeLibraryInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - - if ($TapeVaultInfo) { - SubGraph TapeVaults -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Tape Vaults" -IconType "VBR_Tape_Vaults" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 'b'; style = 'dashed,rounded' } { - - Node TapeVault @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $TapeVaultInfo.Name -Align "Center" -iconType "VBR_Tape_Vaults" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $TapeVaultInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - } - } - - $ServiceProviderInfo = Get-VbrServiceProviderInfo - if ($ServiceProviderInfo) { - SubGraph ServiceProviders -Attributes @{Label = (Get-DiaHTMLLabel -ImagesObj $Images -Label "Service Providers" -IconType "VBR_Service_Providers" -SubgraphLabel -IconDebug $IconDebug); fontsize = 18; penwidth = 1.5; labelloc = 't'; style = 'dashed,rounded' } { - - Node ServiceProvider @{Label = (Get-DiaHTMLNodeTable -ImagesObj $Images -inputObject $ServiceProviderInfo.Name -Align "Center" -iconType "VBR_Service_Providers_Server" -columnSize 3 -IconDebug $IconDebug -MultiIcon -AditionalInfo $ServiceProviderInfo.AditionalInfo); shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - } - } - - # Veeam VBR elements point of connection (Dummy Nodes!) - $Node = @('VBRServerPointSpace', 'VBRProxyPoint', 'VBRProxyPointSpace', 'VBRRepoPoint') - - if ($WanAccels) { - $Node += 'VBRWanAccelPoint', 'VBRRepoPointSpace' - } else { - $Node += 'VBRRepoPointSpace' - - } - - if ($TapeServerInfo) { - $Node += 'VBRTapePoint' - } - - if ($ServiceProviderInfo) { - $Node += 'VBRServiceProviderPoint' - } - - Node $Node -NodeScript { $_ } @{Label = { $_ } ; fontcolor = $NodeDebug.color; fillColor = $NodeDebug.style; shape = $NodeDebug.shape } - - $NodeStartEnd = @('VBRStartPoint', 'VBREndPointSpace') - Node $NodeStartEnd -NodeScript { $_ } @{Label = { $_ } ; fontcolor = $NodeDebug.color; shape = 'point'; fixedsize = 'true'; width = .2 ; height = .2 } - - #---------------------------------------------------------------------------------------------# - # Graphviz Rank Section # - # Rank allow to put Nodes on the same group level # - # PSgraph: https://psgraph.readthedocs.io/en/stable/Command-Rank-Advanced/ # - # Graphviz: https://graphviz.org/docs/attrs/rank/ # - #---------------------------------------------------------------------------------------------# - - # Put the dummy node in the same rank to be able to create a horizontal line - Rank $NodeStartEnd, $Node - - #---------------------------------------------------------------------------------------------# - # Graphviz Edge Section # - # Edges are Graphviz elements use to interconnect Nodes # - # Edges can have attribues like Shape, Size, Styles etc.. # - # PSgraph: https://psgraph.readthedocs.io/en/latest/Command-Edge/ # - # Graphviz: https://graphviz.org/docs/edges/ # - #---------------------------------------------------------------------------------------------# - - # Connect the Dummy Node in a straight line - # VBRStartPoint --- VBRServerPointSpace --- VBRProxyPoint --- VBRProxyPointSpace --- VBRRepoPoint --- VBREndPointSpace - Edge -From VBRStartPoint -To VBRServerPointSpace @{minlen = 20; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRServerPointSpace -To VBRProxyPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRProxyPoint -To VBRProxyPointSpace @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRProxyPointSpace -To VBRRepoPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRRepoPoint -To VBRRepoPointSpace @{minlen = 16; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - - if ($TapeServerInfo -and $WanAccels -and $ServiceProviderInfo) { - Edge -From VBRRepoPointSpace -To VBRWanAccelPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRWanAccelPoint -To VBRTapePoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRTapePoint -To VBRServiceProviderPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRServiceProviderPoint' - - } elseif ($TapeServerInfo -and (-Not $WanAccels) -and $ServiceProviderInfo) { - Edge -From VBRRepoPointSpace -To VBRTapePoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRTapePoint -To VBRServiceProviderPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRServiceProviderPoint' - } elseif ($TapeServerInfo -and (-Not $WanAccels) -and (-Not $ServiceProviderInfo)) { - Edge -From VBRRepoPointSpace -To VBRTapePoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRTapePoint' - } elseif ((-Not $TapeServerInfo) -and $WanAccels -and $ServiceProviderInfo) { - Edge -From VBRRepoPointSpace -To VBRWanAccelPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRWanAccelPoint -To VBRServiceProviderPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRServiceProviderPoint' - } elseif ((-Not $TapeServerInfo) -and (-Not $WanAccels) -and $ServiceProviderInfo) { - Edge -From VBRRepoPointSpace -To VBRServiceProviderPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRServiceProviderPoint' - - } elseif ((-Not $TapeServerInfo) -and $WanAccels -and (-Not $ServiceProviderInfo)) { - Edge -From VBRRepoPointSpace -To VBRWanAccelPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRWanAccelPoint' - } elseif ($TapeServerInfo -and $WanAccels -and (-Not $ServiceProviderInfo)) { - Edge -From VBRRepoPointSpace -To VBRWanAccelPoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - Edge -From VBRWanAccelPoint -To VBRTapePoint @{minlen = 12; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - $LastPoint = 'VBRTapePoint' - } elseif ((-Not $TapeServerInfo) -and (-Not $WanAccels) -and (-Not $ServiceProviderInfo)) { - $LastPoint = 'VBRRepoPointSpace' - } - - #################################################################################### - # # - # This section connect the Infrastructure component to the Dummy Points # - # # - #################################################################################### - - # Connect Veeam Backup server to the Dummy line - Edge -From $BackupServerInfo.Name -To VBRServerPointSpace @{minlen = 2; arrowtail = 'dot'; arrowhead = 'none'; style = 'dashed' } - - # Connect Veeam Proxies Server to the Dummy line - if ($Proxies | Where-Object { $_.AditionalInfo.Type -eq 'vSphere' }) { - Edge -From VBRProxyPoint -To ViProxies @{minlen = 2; arrowtail = 'none'; arrowhead = 'dot'; style = 'dashed' } - } elseif (-Not ($Proxies | Where-Object { $_.AditionalInfo.Type -eq 'vSphere' }) -and ($Proxies.AditionalInfo | Where-Object { $_.Type -eq "Off host" -or $_.Type -eq "On host" })) { - Edge -From VBRProxyPoint -To HvProxies @{minlen = 2; arrowtail = 'none'; arrowhead = 'dot'; style = 'dashed' } - } else { - Edge -From VBRProxyPoint -To Proxies @{minlen = 2; arrowtail = 'none'; arrowhead = 'dot'; style = 'dashed' } - - } - # Connect Veeam Repository to the Dummy line - Edge -From VBRRepoPoint -To Repositories @{minlen = 2; arrowtail = 'none'; arrowhead = 'dot'; style = 'dashed' } - - # Connect Veeam Object Repository to the Dummy line - if ($ObjectRepositoriesInfo) { - Edge -To VBRRepoPoint -From ObjectRepositories @{minlen = 2; arrowtail = 'dot'; arrowhead = 'none'; style = 'dashed' } - - } elseif ($ArchObjRepositoriesInfo) { - Edge -To VBRRepoPoint -From ArchObjectRepositories @{minlen = 2; arrowtail = 'dot'; arrowhead = 'none'; style = 'dashed' } - } else { - Edge -To VBRRepoPoint -From ObjectRepo @{minlen = 2; arrowtail = 'dot'; arrowhead = 'none'; style = 'dashed' } - } - - # Connect Veeam Wan Accelerator to the Dummy line - if ($WanAccels) { - Edge -From WanAccelServer -To VBRWanAccelPoint @{minlen = 2; arrowtail = 'dot'; arrowhead = 'none'; style = 'dashed' } - } - - # Connect Veeam Scale-Out Backup Repository to the Dummy line - if ($SOBR) { - Edge -From VBRRepoPointSpace -To SOBRRepo @{minlen = 2; arrowtail = 'none'; arrowhead = 'dot'; style = 'dashed' } - } - - # Connect Veeam Tape Infra to VBRTapePoint Dummy line - if ($TapeServerInfo) { - Edge -From VBRTapePoint -To TapeServer @{minlen = 2; arrowtail = 'none'; arrowhead = 'dot'; style = 'dashed' } - } - - # Connect Veeam ServiceProvider Infra to VBRServiceProviderPoint Dummy line - if ($ServiceProviderInfo) { - Edge -From ServiceProvider -To VBRServiceProviderPoint @{minlen = 2; arrowtail = 'dot'; arrowhead = 'none'; style = 'dashed' } - } - - #################################################################################### - # # - # This section connect the Last Infrastructure component to VBREndPointSpace # - # # - #################################################################################### - - if ($LastPoint) { - Edge -From $LastPoint -To VBREndPointSpace @{minlen = 30; arrowtail = 'none'; arrowhead = 'none'; style = 'filled' } - } - } - } - } - } - } - end { - foreach ($OutputFormat in $Format) { - #Export the Diagram - if ($Graph) { - Export-Diagrammer -GraphObj ($Graph | Select-String -Pattern '"([A-Z])\w+"\s\[label="";style="invis";shape="point";]' -NotMatch) -ErrorDebug $EnableErrorDebug -Format $OutputFormat -Filename "$Filename.$OutputFormat" -OutputFolderPath $OutputFolderPath -WaterMarkText $Options.DiagramWaterMark -WaterMarkColor "Green" -IconPath $IconPath - } else { - Write-PScriboMessage -IsWarning "No Graph object found. Disabling diagram section" - } - } - } -} \ No newline at end of file diff --git a/Src/Private/Get-AbrVbrDiagramObjects.ps1 b/Src/Private/Get-AbrVbrDiagramObjects.ps1 deleted file mode 100644 index 91099d7..0000000 --- a/Src/Private/Get-AbrVbrDiagramObjects.ps1 +++ /dev/null @@ -1,817 +0,0 @@ -function Get-IconType { - <# - .SYNOPSIS - Used by Veeam.Diagrammer to translate repository type to icon type object. - .DESCRIPTION - .NOTES - Version: 0.1.0 - Author: Jonathan Colon - .EXAMPLE - .LINK - #> - param( - [string]$String - ) - - $IconType = Switch ($String) { - 'LinuxLocal' { 'VBR_Linux_Repository' } - 'WinLocal' { 'VBR_Windows_Repository' } - 'Cloud' { 'VBR_Cloud_Repository' } - 'AzureBlob' { 'VBR_Cloud_Repository' } - 'AmazonS3' { 'VBR_Cloud_Repository' } - 'AmazonS3Compatible' { 'VBR_Cloud_Repository' } - 'AmazonS3Glacier' { 'VBR_Cloud_Repository' } - 'AzureArchive' { 'VBR_Cloud_Repository' } - 'DDBoost' { 'VBR_Deduplicating_Storage' } - 'HPStoreOnceIntegration' { 'VBR_Deduplicating_Storage' } - 'ExaGrid' { 'VBR_Deduplicating_Storage' } - 'SanSnapshotOnly' { 'VBR_Storage_NetApp' } - 'Proxy' { 'VBR_Repository' } - 'ESXi' { 'VBR_ESXi_Server' } - 'HyperVHost' { 'Hyper-V_host' } - 'ManuallyDeployed' { 'VBR_AGENT_MC' } - 'IndividualComputers' { 'VBR_AGENT_IC' } - 'ActiveDirectory' { 'VBR_AGENT_AD' } - 'CSV' { 'VBR_AGENT_CSV' } - 'CifsShare' {'VBR_NAS'} - 'NfsShare' {'VBR_NAS'} - default { 'VBR_No_Icon' } - } - - return $IconType -} - -function Get-RoleType { - <# - .SYNOPSIS - Used by Veeam.Diagrammer to translate role type to function type object. - .DESCRIPTION - .NOTES - Version: 0.1.0 - Author: Jonathan Colon - .EXAMPLE - .LINK - #> - param( - [string]$String - ) - - $RoleType = Switch ($String) { - 'LinuxLocal' { 'Linux Local' } - 'WinLocal' { 'Windows Local' } - 'DDBoost' { 'Dedup Appliances' } - 'HPStoreOnceIntegration' { 'Dedup Appliances' } - 'ExaGrid' { 'Dedup Appliances' } - 'InfiniGuard' { 'Dedup Appliances' } - 'Cloud' { 'Cloud' } - 'SanSnapshotOnly' { 'SAN' } - "vmware" { 'VMware Backup Proxy' } - "hyperv" { 'HyperV Backup Proxy' } - "agent" { 'Agent & Files Backup Proxy' } - "nas" { 'NAS Backup Proxy' } - "CifsShare" { 'SMB Share' } - "NfsShare" { 'NFS Share' } - default { 'Unknown' } - } - - return $RoleType -} - -function Get-VbrBackupServerInfo { - <# - .SYNOPSIS - Function to extract veeam backup & replication server information. - .DESCRIPTION - Build a diagram of the configuration of Veeam VBR in PDF/PNG/SVG formats using Psgraph. - .NOTES - Version: 0.8.6 - Author: Jonathan Colon - Twitter: @jcolonfzenpr - Github: rebelinux - .LINK - https://github.com/rebelinux/Veeam.Diagrammer - #> - [CmdletBinding()] - - Param - ( - - ) - process { - try { - # $CimSession = New-CimSession $BackupServers.Name -Credential $Credential -Authentication Negotiate - # $PssSession = New-PSSession $BackupServers.Name -Credential $Credential -Authentication Negotiate - $CimSession = try { New-CimSession $BackupServers.Name -Credential $Credential -Authentication $Options.PSDefaultAuthentication -Name 'CIMBackupServerDiagram' -ErrorAction Stop } catch { Write-PScriboMessage -IsWarning "Backup Server Section: New-CimSession: Unable to connect to $($BackupServers.Name): $($_.Exception.MessageId)" } - - $PssSession = try { New-PSSession $BackupServers.Name -Credential $Credential -Authentication $Options.PSDefaultAuthentication -ErrorAction Stop -Name 'PSSBackupServerDiagram' } catch { - if (-Not $_.Exception.MessageId) { - $ErrorMessage = $_.FullyQualifiedErrorId - } else { $ErrorMessage = $_.Exception.MessageId } - Write-PScriboMessage -IsWarning "Backup Server Section: New-PSSession: Unable to connect to $($BackupServers.Name): $ErrorMessage" - } - Write-PScriboMessage "Collecting Backup Server information from $($BackupServers.Name)." - try { - $VeeamVersion = Invoke-Command -Session $PssSession -ErrorAction SilentlyContinue -ScriptBlock { Get-ChildItem -Recurse HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty | Where-Object { $_.DisplayName -match 'Veeam Backup & Replication Server' } | Select-Object -Property DisplayVersion } - } catch { $_ } - try { - $VeeamDBFlavor = Invoke-Command -Session $PssSession -ErrorAction SilentlyContinue -ScriptBlock { Get-ItemProperty -Path 'HKLM:\SOFTWARE\Veeam\Veeam Backup and Replication\DatabaseConfigurations' } - } catch { $_ } - try { - $VeeamDBInfo12 = Invoke-Command -Session $PssSession -ErrorAction SilentlyContinue -ScriptBlock { Get-ItemProperty -Path "HKLM:\SOFTWARE\Veeam\Veeam Backup and Replication\DatabaseConfigurations\$(($Using:VeeamDBFlavor).SqlActiveConfiguration)" } - } catch { $_ } - try { - $VeeamDBInfo11 = Invoke-Command -Session $PssSession -ErrorAction SilentlyContinue -ScriptBlock { Get-ItemProperty -Path 'HKLM:\SOFTWARE\Veeam\Veeam Backup and Replication' } - } catch { $_ } - - if ($VeeamDBInfo11.SqlServerName) { - $VeeamDBInfo = $VeeamDBInfo11.SqlServerName - } elseif ($VeeamDBInfo12.SqlServerName) { - $VeeamDBInfo = $VeeamDBInfo12.SqlServerName - } elseif ($VeeamDBInfo12.SqlHostName) { - $VeeamDBInfo = Switch ($VeeamDBInfo12.SqlHostName) { - 'localhost' { $BackupServers.Name } - default { $VeeamDBInfo12.SqlHostName } - } - } else { - $VeeamDBInfo = $BackupServers.Name - } - - try { - if ($BackupServers) { - - if ($VeeamDBInfo -eq $BackupServers.Name) { - $Roles = 'Backup and Database' - $DBType = $VeeamDBFlavor.SqlActiveConfiguration - } else { - $Roles = 'Backup Server' - } - - $Rows = @{ - Role = $Roles - IP = Get-NodeIP -Hostname $BackupServers.Name - } - - if ($VeeamVersion) { - $Rows.add('Version', $VeeamVersion.DisplayVersion) - } - - if ($VeeamDBInfo -eq $BackupServers.Name) { - $Rows.add('DB Type', $DBType) - } - - $script:BackupServerInfo = [PSCustomObject]@{ - Name = $BackupServers.Name.split(".")[0] - Label = Get-DiaNodeIcon -Name "$($BackupServers.Name.split(".")[0])" -IconType "VBR_Server" -Align "Center" -Rows $Rows -ImagesObj $Images -IconDebug $IconDebug - } - } - } catch { - $_ - } - try { - $DatabaseServer = $VeeamDBInfo - if ($VeeamDBFlavor.SqlActiveConfiguration -eq "PostgreSql") { - $DBPort = "$($VeeamDBInfo12.SqlHostPort)/TCP" - } else { - $DBPort = "1433/TCP" - } - - if ($DatabaseServer) { - $DatabaseServerIP = Get-NodeIP -Hostname $DatabaseServer - - $Rows = @{ - Role = 'Database Server' - IP = $DatabaseServerIP - } - - if ($VeeamDBInfo.SqlInstanceName) { - $Rows.add('Instance', $VeeamDBInfo.SqlInstanceName) - } - if ($VeeamDBInfo.SqlDatabaseName) { - $Rows.add('Database', $VeeamDBInfo.SqlDatabaseName) - } - - if ($VeeamDBFlavor.SqlActiveConfiguration -eq "PostgreSql") { - $DBIconType = "VBR_Server_DB_PG" - } else { - $DBIconType = "VBR_Server_DB" - } - - $script:DatabaseServerInfo = [PSCustomObject]@{ - Name = $DatabaseServer.split(".")[0] - Label = Get-DiaNodeIcon -Name "$($DatabaseServer.split(".")[0])" -IconType $DBIconType -Align "Center" -Rows $Rows -ImagesObj $Images -IconDebug $IconDebug - DBPort = $DBPort - } - } - } catch { - $_ - } - - try { - $EMServer = [Veeam.Backup.Core.SBackupOptions]::GetEnterpriseServerInfo() - if ($EMServer.ServerName) { - $EMServerIP = Get-NodeIP -Hostname $EMServer.ServerName - - $Rows = @{ - Role = 'Enterprise Manager Server' - IP = $EMServerIP - } - - $script:EMServerInfo = [PSCustomObject]@{ - Name = $EMServer.ServerName.split(".")[0] - Label = Get-DiaNodeIcon -Name "$($EMServer.ServerName.split(".")[0])" -IconType "VBR_Server_EM" -Align "Center" -Rows $Rows -ImagesObj $Images -IconDebug $IconDebug - } - } - } catch { - $_ - } - } catch { - $_ - } - } - end { - Remove-CimSession $CimSession - Remove-PSSession $PssSession - } -} - -function Get-VbrBackupSvrDiagramObj { - <# - .SYNOPSIS - Function to build Backup Server object. - .DESCRIPTION - Build a diagram of the configuration of Veeam VBR in PDF/PNG/SVG formats using Psgraph. - .NOTES - Version: 0.8.6 - Author: Jonathan Colon - Twitter: @jcolonfzenpr - Github: rebelinux - .LINK - https://github.com/rebelinux/Veeam.Diagrammer - #> - [CmdletBinding()] - - Param - ( - - ) - process { - try { - SubGraph BackupServer -Attributes @{Label = 'Management'; labelloc = 'b'; labeljust = "r"; style = "rounded"; bgcolor = "#ceedc4"; fontcolor = '#005f4b'; fontsize = 18; penwidth = 2 } { - if (($DatabaseServerInfo.Name -ne $BackupServerInfo.Name) -and $EMServerInfo) { - Write-PScriboMessage "Collecting Backup Server, Database Server and Enterprise Manager Information." - $BSHASHTABLE = @{} - $DBHASHTABLE = @{} - $EMHASHTABLE = @{} - - $BackupServerInfo.psobject.properties | ForEach-Object { $BSHASHTABLE[$_.Name] = $_.Value } - $DatabaseServerInfo.psobject.properties | ForEach-Object { $DBHASHTABLE[$_.Name] = $_.Value } - $EMServerInfo.psobject.properties | ForEach-Object { $EMHASHTABLE[$_.Name] = $_.Value } - - Node $BackupServerInfo.Name -Attributes @{Label = $BSHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - Node $DatabaseServerInfo.Name -Attributes @{Label = $DBHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - Node $EMServerInfo.Name -Attributes @{Label = $EMHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - - if ($Dir -eq 'LR') { - Rank $EMServerInfo.Name, $DatabaseServerInfo.Name - Edge -From $EMServerInfo.Name -To $BackupServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; } - Edge -From $DatabaseServerInfo.Name -To $BackupServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; xlabel = $DatabaseServerInfo.DBPort } - } else { - Rank $EMServerInfo.Name, $BackupServerInfo.Name, $DatabaseServerInfo.Name - Edge -From $EMServerInfo.Name -To $BackupServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; } - Edge -From $BackupServerInfo.Name -To $DatabaseServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; xlabel = $DatabaseServerInfo.DBPort } - } - } elseif (($DatabaseServerInfo.Name -ne $BackupServerInfo.Name) -and (-Not $EMServerInfo)) { - Write-PScriboMessage "Not Enterprise Manager Found: Collecting Backup Server and Database server Information." - $BSHASHTABLE = @{} - $DBHASHTABLE = @{} - - $BackupServerInfo.psobject.properties | ForEach-Object { $BSHASHTABLE[$_.Name] = $_.Value } - $DatabaseServerInfo.psobject.properties | ForEach-Object { $DBHASHTABLE[$_.Name] = $_.Value } - - Node $BackupServerInfo.Name -Attributes @{Label = $BSHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - Node $DatabaseServerInfo.Name -Attributes @{Label = $DBHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - - if ($Dir -eq 'LR') { - Rank $BackupServerInfo.Name, $DatabaseServerInfo.Name - Edge -From $DatabaseServerInfo.Name -To $BackupServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; xlabel = $DatabaseServerInfo.DBPort } - } else { - Rank $BackupServerInfo.Name, $DatabaseServerInfo.Name - Edge -From $BackupServerInfo.Name -To $DatabaseServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; xlabel = $DatabaseServerInfo.DBPort } - } - } elseif ($EMServerInfo -and ($DatabaseServerInfo.Name -eq $BackupServerInfo.Name)) { - Write-PScriboMessage "Database server colocated with Backup Server: Collecting Backup Server and Enterprise Manager Information." - $BSHASHTABLE = @{} - $EMHASHTABLE = @{} - - $BackupServerInfo.psobject.properties | ForEach-Object { $BSHASHTABLE[$_.Name] = $_.Value } - $EMServerInfo.psobject.properties | ForEach-Object { $EMHASHTABLE[$_.Name] = $_.Value } - - Node $BackupServerInfo.Name -Attributes @{Label = $BSHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - Node $EMServerInfo.Name -Attributes @{Label = $EMHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - - if ($Dir -eq 'LR') { - Rank $EMServerInfo.Name, $BackupServerInfo.Name - Edge -From $EMServerInfo.Name -To $BackupServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; } - } else { - Rank $EMServerInfo.Name, $BackupServerInfo.Name - Edge -From $BackupServerInfo.Name -To $EMServerInfo.Name @{arrowtail = "normal"; arrowhead = "normal"; minlen = 3; } - } - } else { - Write-PScriboMessage "Database server colocated with Backup Server and no Enterprise Manager found: Collecting Backup Server Information." - $BSHASHTABLE = @{} - $BackupServerInfo.psobject.properties | ForEach-Object { $BSHASHTABLE[$_.Name] = $_.Value } - Node Left @{Label = 'Left'; style = $EdgeDebug.style; color = $EdgeDebug.color; shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - Node Leftt @{Label = 'Leftt'; style = $EdgeDebug.style; color = $EdgeDebug.color; shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - Node Right @{Label = 'Right'; style = $EdgeDebug.style; color = $EdgeDebug.color; shape = 'plain'; fillColor = 'transparent'; fontsize = 14; fontname = "Segoe Ui" } - Node $BackupServerInfo.Name -Attributes @{Label = $BSHASHTABLE.Label; fillColor = '#ceedc4'; shape = 'plain'; fontsize = 14; fontname = "Segoe Ui" } - Edge Left, Leftt, $BackupServerInfo.Name, Right @{style = $EdgeDebug.style; color = $EdgeDebug.color } - Rank Left, Leftt, $BackupServerInfo.Name, Right - } - } - } catch { - $_ - } - } - end {} -} - -# Proxy Graphviz Cluster -function Get-VbrProxyInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Proxy information from $VeeamBackupServer." - $Proxies = @() - $Proxies += Get-VBRViProxy - $Proxies += Get-VBRHvProxy - - if ($Proxies) { - if ($Options.DiagramObjDebug) { - $Proxies = $ProxiesDebug - } - - $ProxiesInfo = @() - - $Proxies | ForEach-Object { - $inobj = [ordered] @{ - 'Type' = Switch ($_.Type) { - 'Vi' { 'vSphere' } - 'HvOffhost' { 'Off host' } - 'HvOnhost' { 'On host' } - default { $_.Type } - } - 'Max Tasks' = $_.Options.MaxTasksCount - } - - $TempProxyInfo = [PSCustomObject]@{ - Name = $_.Host.Name - AditionalInfo = $inobj - } - - $ProxiesInfo += $TempProxyInfo - } - } - - return $ProxiesInfo - - } catch { - $_ - } - -} - -# Wan Accel Graphviz Cluster -function Get-VbrWanAccelInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Wan Accel information from $VeeamBackupServer." - $WanAccels = Get-VBRWANAccelerator - - if ($WanAccels) { - if ($Options.DiagramObjDebug) { - $WanAccels = $WanAccelsDebug - } - - $WanAccelsInfo = @() - - $WanAccels | ForEach-Object { - $inobj = [ordered] @{ - 'CacheSize' = "$($_.FindWaHostComp().Options.MaxCacheSize) $($_.FindWaHostComp().Options.SizeUnit)" - 'TrafficPort' = "$($_.GetWaTrafficPort())/TCP" - } - - $TempWanAccelInfo = [PSCustomObject]@{ - Name = $_.Name - AditionalInfo = $inobj - } - - $WanAccelsInfo += $TempWanAccelInfo - } - } - - return $WanAccelsInfo - - } catch { - $_ - } - -} - -# Repositories Graphviz Cluster -function Get-VbrRepositoryInfo { - param ( - ) - - [Array]$Repositories = Get-VBRBackupRepository | Where-Object { $_.Type -notin @("SanSnapshotOnly", "AmazonS3Compatible", "WasabiS3", "SmartObjectS3") } | Sort-Object -Property Name - [Array]$ScaleOuts = Get-VBRBackupRepository -ScaleOut | Sort-Object -Property Name - if ($ScaleOuts) { - $Extents = Get-VBRRepositoryExtent -Repository $ScaleOuts | Sort-Object -Property Name - $Repositories += $Extents.Repository - } - if ($Repositories) { - $RepositoriesInfo = @() - - foreach ($Repository in $Repositories) { - $IconType = Get-IconType - $Role = Get-RoleType -String $Repository.Type - - $Rows = [ordered]@{} - - if ($Repository.Host.Name) { - $Rows.add('Server', $Repository.Host.Name.Split('.')[0]) - } else { - $Rows.add('Server', 'N/A') - } - $Rows.add('Repo Type', $Role) - $Rows.add('Total Space', "$(($Repository).GetContainer().CachedTotalSpace.InGigabytes) GB") - $Rows.add('Used Space', "$(($Repository).GetContainer().CachedFreeSpace.InGigabytes) GB") - - if (($Role -ne 'Dedup Appliances') -and ($Role -ne 'SAN') -and ($Repository.Host.Name -in $ViBackupProxy.Host.Name -or $Repository.Host.Name -in $HvBackupProxy.Host.Name)) { - $BackupType = 'Proxy' - } else { $BackupType = $Repository.Type } - - $IconType = Get-IconType -String $BackupType - - $TempBackupRepoInfo = [PSCustomObject]@{ - Name = "$((Remove-SpecialChar -String $Repository.Name -SpecialChars '\').toUpper()) " - AditionalInfo = $Rows - IconType = $IconType - } - - $RepositoriesInfo += $TempBackupRepoInfo - } - return $RepositoriesInfo - } - -} - -# Object Repositories Graphviz Cluster -function Get-VbrObjectRepoInfo { - param ( - ) - - $ObjectRepositories = Get-VBRObjectStorageRepository - if ($ObjectRepositories) { - - $ObjectRepositoriesInfo = @() - - $ObjectRepositories | ForEach-Object { - $inobj = @{ - 'Type' = $_.Type - 'Folder' = & { - if ($_.AmazonS3Folder) { - $_.AmazonS3Folder - } elseif ($_.AzureBlobFolder) { - $_.AzureBlobFolder - } else { 'Unknown' } - } - 'Gateway' = & { - if (-Not $_.UseGatewayServer) { - Switch ($_.ConnectionType) { - 'Gateway' { - switch (($_.GatewayServer | Measure-Object).count) { - 0 { "Disable" } - 1 { $_.GatewayServer.Name.Split('.')[0] } - Default { 'Automatic' } - } - } - 'Direct' { 'Direct' } - default { 'Unknown' } - } - } else { - switch (($_.GatewayServer | Measure-Object).count) { - 0 { "Disable" } - 1 { $_.GatewayServer.Name.Split('.')[0] } - Default { 'Automatic' } - } - } - } - } - $TempObjectRepositoriesInfo = [PSCustomObject]@{ - Name = $_.Name - AditionalInfo = $inobj - } - $ObjectRepositoriesInfo += $TempObjectRepositoriesInfo - } - return $ObjectRepositoriesInfo - } -} - - -# Archive Object Repositories Graphviz Cluster -function Get-VbrArchObjectRepoInfo { - param ( - ) - - $ArchObjStorages = Get-VBRArchiveObjectStorageRepository | Sort-Object -Property Name - if ($ArchObjStorages) { - - $ArchObjRepositoriesInfo = @() - - $ArchObjStorages | ForEach-Object { - $inobj = @{ - Type = $_.ArchiveType - Gateway = & { - if (-Not $_.UseGatewayServer) { - Switch ($_.GatewayMode) { - 'Gateway' { - switch (($_.GatewayServer | Measure-Object).count) { - 0 { "Disable" } - 1 { $_.GatewayServer.Name.Split('.')[0] } - Default { 'Automatic' } - } - } - 'Direct' { 'Direct' } - default { 'Unknown' } - } - } else { - switch (($_.GatewayServer | Measure-Object).count) { - 0 { "Disable" } - 1 { $_.GatewayServer.Name.Split('.')[0] } - Default { 'Automatic' } - } - } - } - } - - $TempArchObjectRepositoriesInfo = [PSCustomObject]@{ - Name = $_.Name - AditionalInfo = $inobj - } - $ArchObjRepositoriesInfo += $TempArchObjectRepositoriesInfo - } - return $ArchObjRepositoriesInfo - } -} - -# Scale-Out Backup Repository Graphviz Cluster -function Get-VbrSOBRInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Scale-Out Backup Repository information from $VeeamBackupServer." - $SOBR = Get-VBRBackupRepository -ScaleOut | Sort-Object -Property Name - - if ($SOBR) { - if ($Options.DiagramObjDebug) { - $SOBR = $SOBRDebug - } - - $SOBRInfo = @() - - $SOBR | ForEach-Object { - $inobj = [ordered] @{ - 'Placement Policy' = $_.PolicyType - 'Encryption Enabled' = switch ($_.EncryptionEnabled) { - "" { "--" } - $Null { "--" } - "True" { "Yes"; break } - "False" { "No"; break } - default { $_.EncryptionEnabled } - } - } - - $TempSOBRInfo = [PSCustomObject]@{ - Name = $_.Name - AditionalInfo = $inobj - } - - $SOBRInfo += $TempSOBRInfo - } - } - - return $SOBRInfo - - } catch { - $_ - } - -} - -# Tape Servers Graphviz Cluster -function Get-VbrTapeServersInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Tape Servers information from $VeeamBackupServer." - $TapeServers = Get-VBRTapeServer | Sort-Object -Property Name - - if ($TapeServers) { - - $TapeServernfo = @() - - $TapeServers | ForEach-Object { - $inobj = [ordered] @{ - 'Is Available' = switch ($_.IsAvailable) { - "" { "--" } - $Null { "--" } - "True" { "Yes"; break } - "False" { "No"; break } - default { $_.IsAvailable } - } - } - - $TempTapeServernfo = [PSCustomObject]@{ - Name = $_.Name.split('.')[0] - AditionalInfo = $inobj - } - - $TapeServernfo += $TempTapeServernfo - } - } - - return $TapeServernfo - - } catch { - $_ - } - -} - -# Tape Library Graphviz Cluster -function Get-VbrTapeLibraryInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Tape Library information from $VeeamBackupServer." - $TapeLibraries = Get-VBRTapeLibrary | Sort-Object -Property Name - - if ($TapeLibraries) { - - $TapeLibrariesInfo = @() - - $TapeLibraries | ForEach-Object { - $inobj = [ordered] @{ - 'State' = $_.State - 'Type' = $_.Type - 'Model' = $_.Model - } - - $TempTapeLibrariesInfo = [PSCustomObject]@{ - Name = $_.Name - AditionalInfo = $inobj - } - - $TapeLibrariesInfo += $TempTapeLibrariesInfo - } - } - - return $TapeLibrariesInfo - - } catch { - $_ - } - -} - -# Tape Library Graphviz Cluster -function Get-VbrTapeVaultInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Tape Vault information from $VeeamBackupServer." - $TapeVaults = Get-VBRTapeVault | Sort-Object -Property Name - - if ($TapeVaults) { - - $TapeVaultsInfo = @() - - $TapeVaults | ForEach-Object { - $inobj = [ordered] @{ - 'Protect' = Switch ($_.Protect) { - 'True' { 'Yes' } - 'False' { 'No' } - default { 'Unknown' } - } - } - - $TempTapeVaultsInfo = [PSCustomObject]@{ - Name = $_.Name - AditionalInfo = $inobj - } - - $TapeVaultsInfo += $TempTapeVaultsInfo - } - } - - return $TapeVaultsInfo - - } catch { - $_ - } -} - -# Tape Library Graphviz Cluster -function Get-VbrServiceProviderInfo { - param ( - ) - try { - Write-PScriboMessage "Collecting Service Provider information from $VeeamBackupServer." - $ServiceProviders = Get-VBRCloudProvider | Sort-Object -Property 'DNSName' - - if ($ServiceProviders) { - - $ServiceProvidersInfo = @() - - $ServiceProviders | ForEach-Object { - $inobj = [ordered] @{ - 'Cloud Connect Type' = & { - if ($_.ResourcesEnabled -and $_.ReplicationResourcesEnabled) { - 'BaaS & DRaaS' - } elseif ($_.ResourcesEnabled) { - 'BaaS' - } elseif ($_.ReplicationResourcesEnabled) { - 'DRaas' - } elseif ($_.vCDReplicationResources) { - 'vCD' - } else { 'Unknown' } - } - 'Managed By Provider' = ConvertTo-TextYN $_.IsManagedByProvider - } - - $TempServiceProvidersInfo = [PSCustomObject]@{ - Name = $_.DNSName - AditionalInfo = $inobj - } - - $ServiceProvidersInfo += $TempServiceProvidersInfo - } - } - - return $ServiceProvidersInfo - - } catch { - $_ - } -} - -function Get-VBRDebugObject { - - [CmdletBinding()] - param ( - ) - - $script:ProxiesDebug = [PSCustomObject]@( - @{ - 'Host' = [PSCustomObject]@{ 'Name' = 'veeam-prx-00000000000001' } - 'Type' = "Vi" - 'Options' = [PSCustomObject]@{ 'MaxTasksCount' = 2 } - } - @{ - 'Host' = [PSCustomObject]@{ 'Name' = 'veeam-prx-02' } - 'Type' = "Vi" - 'Options' = [PSCustomObject]@{ 'MaxTasksCount' = 2 } - } - @{ - 'Host' = [PSCustomObject]@{ 'Name' = 'veeam-prx-03' } - 'Type' = "Vi" - 'Options' = [PSCustomObject]@{ 'MaxTasksCount' = 2 } - } - @{ - 'Host' = [PSCustomObject]@{ 'Name' = 'veeam-prx-04' } - 'Type' = "HvOffhost" - 'Options' = [PSCustomObject]@{ 'MaxTasksCount' = 2 } - } - @{ - 'Host' = [PSCustomObject]@{ 'Name' = 'veeam-prx-0500000000000' } - 'Type' = "HvOffhost" - 'Options' = [PSCustomObject]@{ 'MaxTasksCount' = 2 } - } - @{ - 'Host' = [PSCustomObject]@{ 'Name' = 'veeam-prx-06' } - 'Type' = "HvOnhost" - 'Options' = [PSCustomObject]@{ 'MaxTasksCount' = 2 } - } - ) - - - $script:Repositories = @{ - Name = "Repository1", "Repository2", "Repository3", "Repository4", "Repository5", "Repository6", "Repository7" - } - - - $script:ObjectRepositories = @{ - Name = "ObjectRepositor1", "ObjectRepositor2", "ObjectRepositor3", "ObjectRepositor4", "ObjectRepositor5", "ObjectRepositor6", "ObjectRepositor7" - } -} \ No newline at end of file diff --git a/Src/Private/SharedUtilsFunctions.ps1 b/Src/Private/SharedUtilsFunctions.ps1 index 1916c83..2254674 100644 --- a/Src/Private/SharedUtilsFunctions.ps1 +++ b/Src/Private/SharedUtilsFunctions.ps1 @@ -849,4 +849,122 @@ function Get-VBRDebugObject { $script:ObjectRepositories = @{ Name = "ObjectRepositor1", "ObjectRepositor2", "ObjectRepositor3", "ObjectRepositor4", "ObjectRepositor5", "ObjectRepositor6", "ObjectRepositor7" } +} + +function New-VBRConnection { + <# + .SYNOPSIS + Uses New-VBRConnection to store the connection in a global parameter + .DESCRIPTION + Creates a Veeam Server connection and stores it in global variable $Global:DefaultVeeamBR. + An FQDN or IP, credentials, and ignore certificate boolean + .OUTPUTS + Returns the Veeam Server connection. + .EXAMPLE + New-VBRConnection -Endpoint -Port -Credential $(Get-Credential) + + #> + + [CmdletBinding()] + Param( + + [Parameter(Position=0,mandatory=$true)] + [string]$Endpoint, + + [Parameter(Position=1,mandatory=$true)] + [string]$Port, + + [Parameter(Mandatory=$true,ParameterSetName="Credential")] + [ValidateNotNullOrEmpty()] + [Management.Automation.PSCredential]$Credential + + ) + + $apiUrl = "https://$($Endpoint):$($Port)/api/oauth2/token" + + $User = $Credential.UserName + $Pass = $Credential.GetNetworkCredential().Password + + # Define the headers for the API request + $headers = @{ + "Content-Type" = "application/x-www-form-urlencoded" + "x-api-version" = "1.1-rev0" + } + + ## TO-DO: Grant_type options + $body = @{ + "grant_type" = "password" + "username" = $User + "password" = $Pass + } + + # Send an authentication request to obtain a session token + try { + $response = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Post -Body $body -SkipCertificateCheck + + if (($response.access_token) -or ($response.StatusCode -eq 200) ) { + Write-Output "Successfully authenticated." + $VBRAuthentication = [PSCustomObject]@{ + Session_endpoint = $Endpoint + Session_port = $Port + Session_access_token = $response.access_token + } + + return $VBRAuthentication + } + else { + Write-Output "Authentication failed. Status code: $($response.StatusCode), Message: $($response.Content)" + } + } + catch { + Write-Output "An error occurred: $($_.Exception.Message)" + } +} + +# Variable translating Icon to Image Path ($IconPath) +$script:Images = @{ + "VBR_Server" = "VBR_server.png" + "VBR_Repository" = "VBR_Repository.png" + "VBR_NAS" = "NAS.png" + "VBR_Deduplicating_Storage" = "Deduplication.png" + "VBR_Linux_Repository" = "Linux_Repository.png" + "VBR_Windows_Repository" = "Windows_Repository.png" + "VBR_Cloud_Repository" = "Cloud_Repository.png" + "VBR_Object_Repository" = "Object_Storage.png" + "VBR_Object" = "Object_Storage_support.png" + "VBR_Amazon_S3_Compatible" = "S3-compatible.png" + "VBR_Amazon_S3" = "AWS S3.png" + "VBR_Azure_Blob" = "Azure Blob.png" + "VBR_Server_DB" = "Microsoft_SQL_DB.png" + "VBR_Proxy" = "Veeam_Proxy.png" + "VBR_Proxy_Server" = "Proxy_Server.png" + "VBR_Wan_Accel" = "WAN_accelerator.png" + "VBR_SOBR" = "Logo_SOBR.png" + "VBR_SOBR_Repo" = "Scale_out_Backup_Repository.png" + "VBR_LOGO" = "Veeam_logo.png" + "VBR_No_Icon" = "no_icon.png" + 'VBR_Storage_NetApp' = "Storage_NetApp.png" + 'VBR_vCenter_Server' = 'vCenter_server.png' + 'VBR_ESXi_Server' = 'ESXi_host.png' + 'VBR_HyperV_Server' = 'Hyper-V_host.png' + 'VBR_Server_EM' = 'Veeam_Backup_Enterprise_Manager.png' + 'VBR_Tape_Server' = 'Tape_Server.png' + 'VBR_Tape_Library' = 'Tape_Library.png' + 'VBR_Tape_Drive' = 'Tape_Drive.png' + 'VBR_Tape_Vaults' = 'Tape encrypted.png' + "VBR_Server_DB_PG" = "PostGre_SQL_DB.png" + "VBR_LOGO_Footer" = "verified_recoverability.png" + "VBR_AGENT_Container" = "Folder.png" + "VBR_AGENT_AD" = "Server.png" + "VBR_AGENT_MC" = "Task list.png" + "VBR_AGENT_IC" = "Workstation.png" + "VBR_AGENT_CSV" = "CSV_Computers.png" + "VBR_AGENT_AD_Logo" = "Microsoft Active Directory.png" + "VBR_AGENT_CSV_Logo" = "File.png" + "VBR_AGENT_Server" = "Server_with_Veeam_Agent.png" + "VBR_vSphere" = "VMware_vSphere.png" + "VBR_HyperV" = "Microsoft_SCVMM.png" + "VBR_Tape" = "Tape.png" + "VBR_Service_Providers" = "Veeam_Service_Provider_Console.png" + "VBR_Service_Providers_Server" = "Veeam_Service_Provider_Server.png" } \ No newline at end of file diff --git a/Src/Public/Invoke-AsBuiltReport.Veeam.VBR.ps1 b/Src/Public/Invoke-AsBuiltReport.Veeam.VBR.ps1 index 3312ae9..13c4bb6 100644 --- a/Src/Public/Invoke-AsBuiltReport.Veeam.VBR.ps1 +++ b/Src/Public/Invoke-AsBuiltReport.Veeam.VBR.ps1 @@ -5,7 +5,7 @@ function Invoke-AsBuiltReport.Veeam.VBR { .DESCRIPTION Documents the configuration of Veeam VBR in Word/HTML/Text formats using PScribo. .NOTES - Version: 0.8.9 + Version: 0.8.10 Author: Jonathan Colon Twitter: @jcolonfzenpr Github: rebelinux @@ -35,7 +35,7 @@ function Invoke-AsBuiltReport.Veeam.VBR { if ($InstalledVersion) { Write-PScriboMessage -Plugin "Module" -IsWarning "AsBuiltReport.Veeam.VBR $($InstalledVersion.ToString()) is currently installed." $LatestVersion = Find-Module -Name AsBuiltReport.Veeam.VBR -Repository PSGallery -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Version - if ($LatestVersion -gt $InstalledVersion) { + if ($InstalledVersion -lt $LatestVersion) { Write-PScriboMessage -Plugin "Module" -IsWarning "AsBuiltReport.Veeam.VBR $($LatestVersion.ToString()) is available." Write-PScriboMessage -Plugin "Module" -IsWarning "Run 'Update-Module -Name AsBuiltReport.Veeam.VBR -Force' to install the latest version." } @@ -473,9 +473,13 @@ function Invoke-AsBuiltReport.Veeam.VBR { $DiagramFormat = $Options.ExportDiagramsFormat } $DiagramParams = @{ - 'Format' = $DiagramFormat - 'FileName' = "AsBuiltReport.Veeam.VBR" 'OutputFolderPath' = (Get-Location).Path + 'Credential' = $Credential + 'Target' = $System + 'Direction' = 'top-to-bottom' + 'DiagramType' = 'Backup-Infrastructure' + 'WaterMarkText' = $Options.DiagramWaterMark + 'WaterMarkColor' = 'DarkGreen' } if ($Options.EnableDiagramDebug) { @@ -490,10 +494,10 @@ function Invoke-AsBuiltReport.Veeam.VBR { } try { - $Graph = Get-AbrVbrDiagram @DiagramParams - if ($Graph) { - foreach ($OutputFormat in $DiagramFormat) { - Write-Information "Saved 'AsBuiltReport.Veeam.VBR.$($OutputFormat)' diagram to '$((Get-Location).Path)\'." -InformationAction Continue + foreach ($Format in $DiagramFormat) { + $Graph = New-VeeamDiagram @DiagramParams -Format $Format -Filename "AsBuiltReport.Veeam.VBR.$($Format)" + if ($Graph) { + Write-Information "Saved 'AsBuiltReport.Veeam.VBR.$($Format)' diagram to '$((Get-Location).Path)\'." -InformationAction Continue } } } catch { @@ -506,4 +510,4 @@ function Invoke-AsBuiltReport.Veeam.VBR { } } #endregion foreach loop -} +} \ No newline at end of file diff --git a/icons/1U Server.png b/icons/1U Server.png deleted file mode 100644 index 525fa35..0000000 Binary files a/icons/1U Server.png and /dev/null differ diff --git a/icons/ADFolder.png b/icons/ADFolder.png deleted file mode 100644 index 3c2136b..0000000 Binary files a/icons/ADFolder.png and /dev/null differ diff --git a/icons/AHV_host.png b/icons/AHV_host.png deleted file mode 100644 index 9070fda..0000000 Binary files a/icons/AHV_host.png and /dev/null differ diff --git a/icons/AWS S3.png b/icons/AWS S3.png deleted file mode 100644 index 68c13d4..0000000 Binary files a/icons/AWS S3.png and /dev/null differ diff --git a/icons/AWS.png b/icons/AWS.png deleted file mode 100644 index 33c91b3..0000000 Binary files a/icons/AWS.png and /dev/null differ diff --git a/icons/Agent.png b/icons/Agent.png deleted file mode 100644 index 1778d3c..0000000 Binary files a/icons/Agent.png and /dev/null differ diff --git a/icons/Alarm.png b/icons/Alarm.png deleted file mode 100644 index 3b7a879..0000000 Binary files a/icons/Alarm.png and /dev/null differ diff --git a/icons/Antivirus.png b/icons/Antivirus.png deleted file mode 100644 index 54fe098..0000000 Binary files a/icons/Antivirus.png and /dev/null differ diff --git a/icons/Application.png b/icons/Application.png deleted file mode 100644 index e06c1d5..0000000 Binary files a/icons/Application.png and /dev/null differ diff --git a/icons/Arrow (gray 3).png b/icons/Arrow (gray 3).png deleted file mode 100644 index 5ed1e54..0000000 Binary files a/icons/Arrow (gray 3).png and /dev/null differ diff --git a/icons/Arrow (topaz).png b/icons/Arrow (topaz).png deleted file mode 100644 index ca538f3..0000000 Binary files a/icons/Arrow (topaz).png and /dev/null differ diff --git a/icons/Audio file.png b/icons/Audio file.png deleted file mode 100644 index 20467f9..0000000 Binary files a/icons/Audio file.png and /dev/null differ diff --git a/icons/Automation.png b/icons/Automation.png deleted file mode 100644 index 51d78f7..0000000 Binary files a/icons/Automation.png and /dev/null differ diff --git a/icons/Azure Blob.png b/icons/Azure Blob.png deleted file mode 100644 index a354306..0000000 Binary files a/icons/Azure Blob.png and /dev/null differ diff --git a/icons/Azure.png b/icons/Azure.png deleted file mode 100644 index 96ae058..0000000 Binary files a/icons/Azure.png and /dev/null differ diff --git a/icons/Backup Browser.png b/icons/Backup Browser.png deleted file mode 100644 index 105bd5d..0000000 Binary files a/icons/Backup Browser.png and /dev/null differ diff --git a/icons/Backup from Storage Snapshots.png b/icons/Backup from Storage Snapshots.png deleted file mode 100644 index 22b92e4..0000000 Binary files a/icons/Backup from Storage Snapshots.png and /dev/null differ diff --git a/icons/Backup_file.png b/icons/Backup_file.png deleted file mode 100644 index 33cbee6..0000000 Binary files a/icons/Backup_file.png and /dev/null differ diff --git a/icons/CD.png b/icons/CD.png deleted file mode 100644 index d1891d2..0000000 Binary files a/icons/CD.png and /dev/null differ diff --git a/icons/CDP.png b/icons/CDP.png deleted file mode 100644 index 4192dac..0000000 Binary files a/icons/CDP.png and /dev/null differ diff --git a/icons/CPU socket.png b/icons/CPU socket.png deleted file mode 100644 index d23001c..0000000 Binary files a/icons/CPU socket.png and /dev/null differ diff --git a/icons/CPU.png b/icons/CPU.png deleted file mode 100644 index 6df138f..0000000 Binary files a/icons/CPU.png and /dev/null differ diff --git a/icons/CSV_Computers.png b/icons/CSV_Computers.png deleted file mode 100644 index 8d0dbdd..0000000 Binary files a/icons/CSV_Computers.png and /dev/null differ diff --git a/icons/Calendar.png b/icons/Calendar.png deleted file mode 100644 index 38e3f04..0000000 Binary files a/icons/Calendar.png and /dev/null differ diff --git a/icons/Cloud.png b/icons/Cloud.png deleted file mode 100644 index 397d118..0000000 Binary files a/icons/Cloud.png and /dev/null differ diff --git a/icons/Cloud_Repository.png b/icons/Cloud_Repository.png deleted file mode 100644 index 8c70abb..0000000 Binary files a/icons/Cloud_Repository.png and /dev/null differ diff --git a/icons/Command Line.png b/icons/Command Line.png deleted file mode 100644 index 77e6624..0000000 Binary files a/icons/Command Line.png and /dev/null differ diff --git a/icons/Connector #2 (gray 2).png b/icons/Connector #2 (gray 2).png deleted file mode 100644 index 84cc90f..0000000 Binary files a/icons/Connector #2 (gray 2).png and /dev/null differ diff --git a/icons/Connector #2 (topaz).png b/icons/Connector #2 (topaz).png deleted file mode 100644 index 372a134..0000000 Binary files a/icons/Connector #2 (topaz).png and /dev/null differ diff --git a/icons/Connector (gray 3).png b/icons/Connector (gray 3).png deleted file mode 100644 index 38cb31e..0000000 Binary files a/icons/Connector (gray 3).png and /dev/null differ diff --git a/icons/Connector (topaz).png b/icons/Connector (topaz).png deleted file mode 100644 index 1b61d60..0000000 Binary files a/icons/Connector (topaz).png and /dev/null differ diff --git a/icons/Controller.png b/icons/Controller.png deleted file mode 100644 index 1f359e4..0000000 Binary files a/icons/Controller.png and /dev/null differ diff --git a/icons/DNS.png b/icons/DNS.png deleted file mode 100644 index 9f95def..0000000 Binary files a/icons/DNS.png and /dev/null differ diff --git a/icons/DR plan.png b/icons/DR plan.png deleted file mode 100644 index 997041e..0000000 Binary files a/icons/DR plan.png and /dev/null differ diff --git a/icons/Data Volume.png b/icons/Data Volume.png deleted file mode 100644 index c560738..0000000 Binary files a/icons/Data Volume.png and /dev/null differ diff --git a/icons/Data file.png b/icons/Data file.png deleted file mode 100644 index d7f1074..0000000 Binary files a/icons/Data file.png and /dev/null differ diff --git a/icons/Data_Mover.png b/icons/Data_Mover.png deleted file mode 100644 index 65f856f..0000000 Binary files a/icons/Data_Mover.png and /dev/null differ diff --git a/icons/Data_Volume.png b/icons/Data_Volume.png deleted file mode 100644 index c668f46..0000000 Binary files a/icons/Data_Volume.png and /dev/null differ diff --git a/icons/Data_volume_snapshot.png b/icons/Data_volume_snapshot.png deleted file mode 100644 index e5caa1b..0000000 Binary files a/icons/Data_volume_snapshot.png and /dev/null differ diff --git a/icons/Database.png b/icons/Database.png deleted file mode 100644 index 6bb574d..0000000 Binary files a/icons/Database.png and /dev/null differ diff --git a/icons/Database_server.png b/icons/Database_server.png deleted file mode 100644 index 04e6035..0000000 Binary files a/icons/Database_server.png and /dev/null differ diff --git a/icons/Datacenter.png b/icons/Datacenter.png deleted file mode 100644 index c59ddb1..0000000 Binary files a/icons/Datacenter.png and /dev/null differ diff --git a/icons/Datalabs.png b/icons/Datalabs.png deleted file mode 100644 index ca2e85f..0000000 Binary files a/icons/Datalabs.png and /dev/null differ diff --git a/icons/Datastore.png b/icons/Datastore.png deleted file mode 100644 index 0e7e015..0000000 Binary files a/icons/Datastore.png and /dev/null differ diff --git a/icons/Datastore_33__full.png b/icons/Datastore_33__full.png deleted file mode 100644 index 70a2a89..0000000 Binary files a/icons/Datastore_33__full.png and /dev/null differ diff --git a/icons/Datastore_66__full.png b/icons/Datastore_66__full.png deleted file mode 100644 index d41bcdc..0000000 Binary files a/icons/Datastore_66__full.png and /dev/null differ diff --git a/icons/Datastore_empty.png b/icons/Datastore_empty.png deleted file mode 100644 index 277004e..0000000 Binary files a/icons/Datastore_empty.png and /dev/null differ diff --git a/icons/Deduplicating Storage.png b/icons/Deduplicating Storage.png deleted file mode 100644 index a88af2d..0000000 Binary files a/icons/Deduplicating Storage.png and /dev/null differ diff --git a/icons/Deduplicating_Storage.png b/icons/Deduplicating_Storage.png deleted file mode 100644 index 2356019..0000000 Binary files a/icons/Deduplicating_Storage.png and /dev/null differ diff --git a/icons/Deduplication.png b/icons/Deduplication.png deleted file mode 100644 index 634964c..0000000 Binary files a/icons/Deduplication.png and /dev/null differ diff --git a/icons/Domain Controller.png b/icons/Domain Controller.png deleted file mode 100644 index 9c89fe2..0000000 Binary files a/icons/Domain Controller.png and /dev/null differ diff --git a/icons/Dotted line (gray 3).png b/icons/Dotted line (gray 3).png deleted file mode 100644 index 70c52aa..0000000 Binary files a/icons/Dotted line (gray 3).png and /dev/null differ diff --git a/icons/Dotted line (topaz).png b/icons/Dotted line (topaz).png deleted file mode 100644 index ae76ab0..0000000 Binary files a/icons/Dotted line (topaz).png and /dev/null differ diff --git a/icons/Download.png b/icons/Download.png deleted file mode 100644 index 595ed5c..0000000 Binary files a/icons/Download.png and /dev/null differ diff --git a/icons/ESXi-Hyper-V host.png b/icons/ESXi-Hyper-V host.png deleted file mode 100644 index d09e08c..0000000 Binary files a/icons/ESXi-Hyper-V host.png and /dev/null differ diff --git a/icons/ESXi-Hyper-V-AHV host.png b/icons/ESXi-Hyper-V-AHV host.png deleted file mode 100644 index 14cf7f7..0000000 Binary files a/icons/ESXi-Hyper-V-AHV host.png and /dev/null differ diff --git a/icons/ESXi_Hyper-V_AHV_host.png b/icons/ESXi_Hyper-V_AHV_host.png deleted file mode 100644 index 82fbfb1..0000000 Binary files a/icons/ESXi_Hyper-V_AHV_host.png and /dev/null differ diff --git a/icons/ESXi_Hyper-V_host.png b/icons/ESXi_Hyper-V_host.png deleted file mode 100644 index 659fc3b..0000000 Binary files a/icons/ESXi_Hyper-V_host.png and /dev/null differ diff --git a/icons/ESXi_host.png b/icons/ESXi_host.png deleted file mode 100644 index 791edda..0000000 Binary files a/icons/ESXi_host.png and /dev/null differ diff --git a/icons/Encryption Key.png b/icons/Encryption Key.png deleted file mode 100644 index e86e952..0000000 Binary files a/icons/Encryption Key.png and /dev/null differ diff --git a/icons/Enterprise (business).png b/icons/Enterprise (business).png deleted file mode 100644 index b623597..0000000 Binary files a/icons/Enterprise (business).png and /dev/null differ diff --git a/icons/Exchange objects.png b/icons/Exchange objects.png deleted file mode 100644 index a718f69..0000000 Binary files a/icons/Exchange objects.png and /dev/null differ diff --git a/icons/Exchange_server.png b/icons/Exchange_server.png deleted file mode 100644 index 42dc4e5..0000000 Binary files a/icons/Exchange_server.png and /dev/null differ diff --git a/icons/FLR helper appliance.png b/icons/FLR helper appliance.png deleted file mode 100644 index 1612e96..0000000 Binary files a/icons/FLR helper appliance.png and /dev/null differ diff --git a/icons/FLR_helper_appliance.png b/icons/FLR_helper_appliance.png deleted file mode 100644 index 5fd5b35..0000000 Binary files a/icons/FLR_helper_appliance.png and /dev/null differ diff --git a/icons/Failover.png b/icons/Failover.png deleted file mode 100644 index 2391157..0000000 Binary files a/icons/Failover.png and /dev/null differ diff --git a/icons/File browser.png b/icons/File browser.png deleted file mode 100644 index e0f17bf..0000000 Binary files a/icons/File browser.png and /dev/null differ diff --git a/icons/File.png b/icons/File.png deleted file mode 100644 index 02f9e87..0000000 Binary files a/icons/File.png and /dev/null differ diff --git a/icons/Firewall.png b/icons/Firewall.png deleted file mode 100644 index cc5bc2d..0000000 Binary files a/icons/Firewall.png and /dev/null differ diff --git a/icons/Folder.png b/icons/Folder.png deleted file mode 100644 index 3c2136b..0000000 Binary files a/icons/Folder.png and /dev/null differ diff --git a/icons/Font.png b/icons/Font.png deleted file mode 100644 index 99b80c4..0000000 Binary files a/icons/Font.png and /dev/null differ diff --git a/icons/Frame (gray 2).png b/icons/Frame (gray 2).png deleted file mode 100644 index 73f48b8..0000000 Binary files a/icons/Frame (gray 2).png and /dev/null differ diff --git a/icons/Frame (topaz).png b/icons/Frame (topaz).png deleted file mode 100644 index 534e2e1..0000000 Binary files a/icons/Frame (topaz).png and /dev/null differ diff --git a/icons/Globe.png b/icons/Globe.png deleted file mode 100644 index 1edbc6e..0000000 Binary files a/icons/Globe.png and /dev/null differ diff --git a/icons/HDD.png b/icons/HDD.png deleted file mode 100644 index 594555d..0000000 Binary files a/icons/HDD.png and /dev/null differ diff --git a/icons/Hardware_controller.png b/icons/Hardware_controller.png deleted file mode 100644 index c0ac220..0000000 Binary files a/icons/Hardware_controller.png and /dev/null differ diff --git a/icons/Hyper-V_host.png b/icons/Hyper-V_host.png deleted file mode 100644 index efadb6c..0000000 Binary files a/icons/Hyper-V_host.png and /dev/null differ diff --git a/icons/IBM_Object_Storage.png b/icons/IBM_Object_Storage.png deleted file mode 100644 index 8c18bfc..0000000 Binary files a/icons/IBM_Object_Storage.png and /dev/null differ diff --git a/icons/ISO file.png b/icons/ISO file.png deleted file mode 100644 index 6a7dc62..0000000 Binary files a/icons/ISO file.png and /dev/null differ diff --git a/icons/Inclusion.png b/icons/Inclusion.png deleted file mode 100644 index e1205d9..0000000 Binary files a/icons/Inclusion.png and /dev/null differ diff --git a/icons/IndividualPCFolder.png b/icons/IndividualPCFolder.png deleted file mode 100644 index 3c2136b..0000000 Binary files a/icons/IndividualPCFolder.png and /dev/null differ diff --git a/icons/Instant VM recovery.png b/icons/Instant VM recovery.png deleted file mode 100644 index 5aae926..0000000 Binary files a/icons/Instant VM recovery.png and /dev/null differ diff --git a/icons/Interface - Console.png b/icons/Interface - Console.png deleted file mode 100644 index d42d7e5..0000000 Binary files a/icons/Interface - Console.png and /dev/null differ diff --git a/icons/Key.png b/icons/Key.png deleted file mode 100644 index b038f39..0000000 Binary files a/icons/Key.png and /dev/null differ diff --git a/icons/Laptop.png b/icons/Laptop.png deleted file mode 100644 index 4e9075a..0000000 Binary files a/icons/Laptop.png and /dev/null differ diff --git a/icons/Letter.png b/icons/Letter.png deleted file mode 100644 index f27bee4..0000000 Binary files a/icons/Letter.png and /dev/null differ diff --git a/icons/License file.png b/icons/License file.png deleted file mode 100644 index 4931400..0000000 Binary files a/icons/License file.png and /dev/null differ diff --git a/icons/Linux.png b/icons/Linux.png deleted file mode 100644 index 53c843e..0000000 Binary files a/icons/Linux.png and /dev/null differ diff --git a/icons/Linux_Repository.png b/icons/Linux_Repository.png deleted file mode 100644 index 17c339f..0000000 Binary files a/icons/Linux_Repository.png and /dev/null differ diff --git a/icons/Linux_VM.png b/icons/Linux_VM.png deleted file mode 100644 index 02f72ed..0000000 Binary files a/icons/Linux_VM.png and /dev/null differ diff --git a/icons/Linux_server.png b/icons/Linux_server.png deleted file mode 100644 index 62182b1..0000000 Binary files a/icons/Linux_server.png and /dev/null differ diff --git a/icons/Logo_Database.png b/icons/Logo_Database.png deleted file mode 100644 index f890e7b..0000000 Binary files a/icons/Logo_Database.png and /dev/null differ diff --git a/icons/Logo_SOBR.png b/icons/Logo_SOBR.png deleted file mode 100644 index e012998..0000000 Binary files a/icons/Logo_SOBR.png and /dev/null differ diff --git a/icons/Magnifying Glass.png b/icons/Magnifying Glass.png deleted file mode 100644 index d07c049..0000000 Binary files a/icons/Magnifying Glass.png and /dev/null differ diff --git a/icons/ManualFolder.png b/icons/ManualFolder.png deleted file mode 100644 index 3c2136b..0000000 Binary files a/icons/ManualFolder.png and /dev/null differ diff --git a/icons/Metadata file.png b/icons/Metadata file.png deleted file mode 100644 index fb043bd..0000000 Binary files a/icons/Metadata file.png and /dev/null differ diff --git a/icons/Microsoft Active Directory.png b/icons/Microsoft Active Directory.png deleted file mode 100644 index 5990410..0000000 Binary files a/icons/Microsoft Active Directory.png and /dev/null differ diff --git a/icons/Microsoft Exchange.png b/icons/Microsoft Exchange.png deleted file mode 100644 index 43aef14..0000000 Binary files a/icons/Microsoft Exchange.png and /dev/null differ diff --git a/icons/Microsoft Office.png b/icons/Microsoft Office.png deleted file mode 100644 index 38b86f1..0000000 Binary files a/icons/Microsoft Office.png and /dev/null differ diff --git a/icons/Microsoft OneDrive.png b/icons/Microsoft OneDrive.png deleted file mode 100644 index a3d556b..0000000 Binary files a/icons/Microsoft OneDrive.png and /dev/null differ diff --git a/icons/Microsoft Outlook.png b/icons/Microsoft Outlook.png deleted file mode 100644 index 821439b..0000000 Binary files a/icons/Microsoft Outlook.png and /dev/null differ diff --git a/icons/Microsoft SCOM.png b/icons/Microsoft SCOM.png deleted file mode 100644 index 87795c2..0000000 Binary files a/icons/Microsoft SCOM.png and /dev/null differ diff --git a/icons/Microsoft SQL.png b/icons/Microsoft SQL.png deleted file mode 100644 index e6e4245..0000000 Binary files a/icons/Microsoft SQL.png and /dev/null differ diff --git a/icons/Microsoft SharePoint.png b/icons/Microsoft SharePoint.png deleted file mode 100644 index dfa1e8c..0000000 Binary files a/icons/Microsoft SharePoint.png and /dev/null differ diff --git a/icons/Microsoft Teams.png b/icons/Microsoft Teams.png deleted file mode 100644 index f873e5e..0000000 Binary files a/icons/Microsoft Teams.png and /dev/null differ diff --git a/icons/Microsoft Windows.png b/icons/Microsoft Windows.png deleted file mode 100644 index 83e2182..0000000 Binary files a/icons/Microsoft Windows.png and /dev/null differ diff --git a/icons/Microsoft_SCVMM.png b/icons/Microsoft_SCVMM.png deleted file mode 100644 index d5ada1d..0000000 Binary files a/icons/Microsoft_SCVMM.png and /dev/null differ diff --git a/icons/Microsoft_SQL_DB.png b/icons/Microsoft_SQL_DB.png deleted file mode 100644 index 9aba2d7..0000000 Binary files a/icons/Microsoft_SQL_DB.png and /dev/null differ diff --git a/icons/Monitor.png b/icons/Monitor.png deleted file mode 100644 index 4cb1ebc..0000000 Binary files a/icons/Monitor.png and /dev/null differ diff --git a/icons/Monitoring Console.png b/icons/Monitoring Console.png deleted file mode 100644 index 20b79a5..0000000 Binary files a/icons/Monitoring Console.png and /dev/null differ diff --git a/icons/Mount_Server.png b/icons/Mount_Server.png deleted file mode 100644 index 0a7a9a3..0000000 Binary files a/icons/Mount_Server.png and /dev/null differ diff --git a/icons/NAS backup.png b/icons/NAS backup.png deleted file mode 100644 index 00ba59b..0000000 Binary files a/icons/NAS backup.png and /dev/null differ diff --git a/icons/NAS.png b/icons/NAS.png deleted file mode 100644 index a0713e1..0000000 Binary files a/icons/NAS.png and /dev/null differ diff --git a/icons/Network Proxy.png b/icons/Network Proxy.png deleted file mode 100644 index 3d5e240..0000000 Binary files a/icons/Network Proxy.png and /dev/null differ diff --git a/icons/Network_card.png b/icons/Network_card.png deleted file mode 100644 index 093ca64..0000000 Binary files a/icons/Network_card.png and /dev/null differ diff --git a/icons/Number eight.png b/icons/Number eight.png deleted file mode 100644 index 1a2515d..0000000 Binary files a/icons/Number eight.png and /dev/null differ diff --git a/icons/Number five.png b/icons/Number five.png deleted file mode 100644 index 3b4c49e..0000000 Binary files a/icons/Number five.png and /dev/null differ diff --git a/icons/Number four.png b/icons/Number four.png deleted file mode 100644 index 5c4d5e2..0000000 Binary files a/icons/Number four.png and /dev/null differ diff --git a/icons/Number nine.png b/icons/Number nine.png deleted file mode 100644 index 4cbae48..0000000 Binary files a/icons/Number nine.png and /dev/null differ diff --git a/icons/Number one.png b/icons/Number one.png deleted file mode 100644 index b940ea3..0000000 Binary files a/icons/Number one.png and /dev/null differ diff --git a/icons/Number seven.png b/icons/Number seven.png deleted file mode 100644 index 928eaad..0000000 Binary files a/icons/Number seven.png and /dev/null differ diff --git a/icons/Number six.png b/icons/Number six.png deleted file mode 100644 index 6ffeab3..0000000 Binary files a/icons/Number six.png and /dev/null differ diff --git a/icons/Number three.png b/icons/Number three.png deleted file mode 100644 index 709c127..0000000 Binary files a/icons/Number three.png and /dev/null differ diff --git a/icons/Number two.png b/icons/Number two.png deleted file mode 100644 index 845c652..0000000 Binary files a/icons/Number two.png and /dev/null differ diff --git a/icons/Nutanix.png b/icons/Nutanix.png deleted file mode 100644 index 728a44d..0000000 Binary files a/icons/Nutanix.png and /dev/null differ diff --git a/icons/ONE_server.png b/icons/ONE_server.png deleted file mode 100644 index 54b8eff..0000000 Binary files a/icons/ONE_server.png and /dev/null differ diff --git a/icons/Object_Storage.png b/icons/Object_Storage.png deleted file mode 100644 index 81f6a8b..0000000 Binary files a/icons/Object_Storage.png and /dev/null differ diff --git a/icons/Object_Storage_support.png b/icons/Object_Storage_support.png deleted file mode 100644 index c99ae9b..0000000 Binary files a/icons/Object_Storage_support.png and /dev/null differ diff --git a/icons/On-demand Sandbox.png b/icons/On-demand Sandbox.png deleted file mode 100644 index 3d4936d..0000000 Binary files a/icons/On-demand Sandbox.png and /dev/null differ diff --git a/icons/OpenVPN.png b/icons/OpenVPN.png deleted file mode 100644 index a72ffe8..0000000 Binary files a/icons/OpenVPN.png and /dev/null differ diff --git a/icons/Oracle DB.png b/icons/Oracle DB.png deleted file mode 100644 index d79792e..0000000 Binary files a/icons/Oracle DB.png and /dev/null differ diff --git a/icons/Oracle RMAN.png b/icons/Oracle RMAN.png deleted file mode 100644 index 5066d01..0000000 Binary files a/icons/Oracle RMAN.png and /dev/null differ diff --git a/icons/Physical switch.png b/icons/Physical switch.png deleted file mode 100644 index 2acc258..0000000 Binary files a/icons/Physical switch.png and /dev/null differ diff --git a/icons/PostGre_SQL_DB.png b/icons/PostGre_SQL_DB.png deleted file mode 100644 index 52b0dc2..0000000 Binary files a/icons/PostGre_SQL_DB.png and /dev/null differ diff --git a/icons/PowerShell.png b/icons/PowerShell.png deleted file mode 100644 index b9f0e66..0000000 Binary files a/icons/PowerShell.png and /dev/null differ diff --git a/icons/Proxy_Server.png b/icons/Proxy_Server.png deleted file mode 100644 index 014ada2..0000000 Binary files a/icons/Proxy_Server.png and /dev/null differ diff --git a/icons/RAM.png b/icons/RAM.png deleted file mode 100644 index d8a440b..0000000 Binary files a/icons/RAM.png and /dev/null differ diff --git a/icons/RESTful API.png b/icons/RESTful API.png deleted file mode 100644 index 8e27ea0..0000000 Binary files a/icons/RESTful API.png and /dev/null differ diff --git a/icons/Report.png b/icons/Report.png deleted file mode 100644 index 316f2cd..0000000 Binary files a/icons/Report.png and /dev/null differ diff --git a/icons/Repository_Server.png b/icons/Repository_Server.png deleted file mode 100644 index 5360fa6..0000000 Binary files a/icons/Repository_Server.png and /dev/null differ diff --git a/icons/Restore.png b/icons/Restore.png deleted file mode 100644 index b140b79..0000000 Binary files a/icons/Restore.png and /dev/null differ diff --git a/icons/Role.png b/icons/Role.png deleted file mode 100644 index f568797..0000000 Binary files a/icons/Role.png and /dev/null differ diff --git a/icons/S3-compatible.png b/icons/S3-compatible.png deleted file mode 100644 index 679a857..0000000 Binary files a/icons/S3-compatible.png and /dev/null differ diff --git a/icons/SAP BRtools.png b/icons/SAP BRtools.png deleted file mode 100644 index a2ad3b4..0000000 Binary files a/icons/SAP BRtools.png and /dev/null differ diff --git a/icons/SAP HANA DB.png b/icons/SAP HANA DB.png deleted file mode 100644 index ea194e7..0000000 Binary files a/icons/SAP HANA DB.png and /dev/null differ diff --git a/icons/SAP HANA.png b/icons/SAP HANA.png deleted file mode 100644 index 47730eb..0000000 Binary files a/icons/SAP HANA.png and /dev/null differ diff --git a/icons/SD_card.png b/icons/SD_card.png deleted file mode 100644 index 50e854b..0000000 Binary files a/icons/SD_card.png and /dev/null differ diff --git a/icons/SMB (business).png b/icons/SMB (business).png deleted file mode 100644 index cbc51b8..0000000 Binary files a/icons/SMB (business).png and /dev/null differ diff --git a/icons/SQL_server.png b/icons/SQL_server.png deleted file mode 100644 index ac04cce..0000000 Binary files a/icons/SQL_server.png and /dev/null differ diff --git a/icons/Scale_out_Backup_Repository.png b/icons/Scale_out_Backup_Repository.png deleted file mode 100644 index 748a0ac..0000000 Binary files a/icons/Scale_out_Backup_Repository.png and /dev/null differ diff --git a/icons/Scheduled backups.png b/icons/Scheduled backups.png deleted file mode 100644 index 4b6d76e..0000000 Binary files a/icons/Scheduled backups.png and /dev/null differ diff --git a/icons/Search_server.png b/icons/Search_server.png deleted file mode 100644 index 69950f9..0000000 Binary files a/icons/Search_server.png and /dev/null differ diff --git a/icons/Server Cluster.png b/icons/Server Cluster.png deleted file mode 100644 index 3b9b3e7..0000000 Binary files a/icons/Server Cluster.png and /dev/null differ diff --git a/icons/Server.png b/icons/Server.png deleted file mode 100644 index 82b2236..0000000 Binary files a/icons/Server.png and /dev/null differ diff --git a/icons/Server_Cluster.png b/icons/Server_Cluster.png deleted file mode 100644 index 364b5f8..0000000 Binary files a/icons/Server_Cluster.png and /dev/null differ diff --git a/icons/Server_Nutanix.png b/icons/Server_Nutanix.png deleted file mode 100644 index 9f7ca9f..0000000 Binary files a/icons/Server_Nutanix.png and /dev/null differ diff --git a/icons/Server_Stack.png b/icons/Server_Stack.png deleted file mode 100644 index 36b2ed8..0000000 Binary files a/icons/Server_Stack.png and /dev/null differ diff --git a/icons/Server_with_Veeam_Agent.png b/icons/Server_with_Veeam_Agent.png deleted file mode 100644 index 8e4d5f3..0000000 Binary files a/icons/Server_with_Veeam_Agent.png and /dev/null differ diff --git a/icons/Service - Application.png b/icons/Service - Application.png deleted file mode 100644 index e44d909..0000000 Binary files a/icons/Service - Application.png and /dev/null differ diff --git a/icons/SharePoint_server.png b/icons/SharePoint_server.png deleted file mode 100644 index ca5501b..0000000 Binary files a/icons/SharePoint_server.png and /dev/null differ diff --git a/icons/Shared_folder.png b/icons/Shared_folder.png deleted file mode 100644 index 42f1c24..0000000 Binary files a/icons/Shared_folder.png and /dev/null differ diff --git a/icons/Storage.png b/icons/Storage.png deleted file mode 100644 index 772f98f..0000000 Binary files a/icons/Storage.png and /dev/null differ diff --git a/icons/Storage_NetApp.png b/icons/Storage_NetApp.png deleted file mode 100644 index d348de1..0000000 Binary files a/icons/Storage_NetApp.png and /dev/null differ diff --git a/icons/Storage_Snapshot.png b/icons/Storage_Snapshot.png deleted file mode 100644 index 2730cd7..0000000 Binary files a/icons/Storage_Snapshot.png and /dev/null differ diff --git a/icons/Storage_Stack.png b/icons/Storage_Stack.png deleted file mode 100644 index 03eafc9..0000000 Binary files a/icons/Storage_Stack.png and /dev/null differ diff --git a/icons/Storage_with_snapshot.png b/icons/Storage_with_snapshot.png deleted file mode 100644 index 788f89b..0000000 Binary files a/icons/Storage_with_snapshot.png and /dev/null differ diff --git a/icons/SureBackup.png b/icons/SureBackup.png deleted file mode 100644 index a1fc81b..0000000 Binary files a/icons/SureBackup.png and /dev/null differ diff --git a/icons/SureReplica.png b/icons/SureReplica.png deleted file mode 100644 index c37e53d..0000000 Binary files a/icons/SureReplica.png and /dev/null differ diff --git a/icons/Table.png b/icons/Table.png deleted file mode 100644 index 05d4f47..0000000 Binary files a/icons/Table.png and /dev/null differ diff --git a/icons/Tag.png b/icons/Tag.png deleted file mode 100644 index 9983521..0000000 Binary files a/icons/Tag.png and /dev/null differ diff --git a/icons/Tape encrypted.png b/icons/Tape encrypted.png deleted file mode 100644 index 905684f..0000000 Binary files a/icons/Tape encrypted.png and /dev/null differ diff --git a/icons/Tape recording.png b/icons/Tape recording.png deleted file mode 100644 index 4ae6fa7..0000000 Binary files a/icons/Tape recording.png and /dev/null differ diff --git a/icons/Tape writing device.png b/icons/Tape writing device.png deleted file mode 100644 index d55b4c2..0000000 Binary files a/icons/Tape writing device.png and /dev/null differ diff --git a/icons/Tape.png b/icons/Tape.png deleted file mode 100644 index 586714b..0000000 Binary files a/icons/Tape.png and /dev/null differ diff --git a/icons/Tape_Drive.png b/icons/Tape_Drive.png deleted file mode 100644 index 0d8c45c..0000000 Binary files a/icons/Tape_Drive.png and /dev/null differ diff --git a/icons/Tape_Library.png b/icons/Tape_Library.png deleted file mode 100644 index c2598e2..0000000 Binary files a/icons/Tape_Library.png and /dev/null differ diff --git a/icons/Tape_Media_Pool.png b/icons/Tape_Media_Pool.png deleted file mode 100644 index c0d5cb1..0000000 Binary files a/icons/Tape_Media_Pool.png and /dev/null differ diff --git a/icons/Tape_Server.png b/icons/Tape_Server.png deleted file mode 100644 index c640916..0000000 Binary files a/icons/Tape_Server.png and /dev/null differ diff --git a/icons/Tape_checked.png b/icons/Tape_checked.png deleted file mode 100644 index 81003b6..0000000 Binary files a/icons/Tape_checked.png and /dev/null differ diff --git a/icons/Tape_encrypted.png b/icons/Tape_encrypted.png deleted file mode 100644 index 921f947..0000000 Binary files a/icons/Tape_encrypted.png and /dev/null differ diff --git a/icons/Tape_locked.png b/icons/Tape_locked.png deleted file mode 100644 index 921f947..0000000 Binary files a/icons/Tape_locked.png and /dev/null differ diff --git a/icons/Task list.png b/icons/Task list.png deleted file mode 100644 index 485cc14..0000000 Binary files a/icons/Task list.png and /dev/null differ diff --git a/icons/Time - Clocks.png b/icons/Time - Clocks.png deleted file mode 100644 index 6b97a8b..0000000 Binary files a/icons/Time - Clocks.png and /dev/null differ diff --git a/icons/Transport.png b/icons/Transport.png deleted file mode 100644 index cffaa85..0000000 Binary files a/icons/Transport.png and /dev/null differ diff --git a/icons/Transport_Service.png b/icons/Transport_Service.png deleted file mode 100644 index 1410f3a..0000000 Binary files a/icons/Transport_Service.png and /dev/null differ diff --git a/icons/USB_drive.png b/icons/USB_drive.png deleted file mode 100644 index b9819e0..0000000 Binary files a/icons/USB_drive.png and /dev/null differ diff --git a/icons/Universal Storage API.png b/icons/Universal Storage API.png deleted file mode 100644 index 53f176f..0000000 Binary files a/icons/Universal Storage API.png and /dev/null differ diff --git a/icons/User Group.png b/icons/User Group.png deleted file mode 100644 index 7afc9cb..0000000 Binary files a/icons/User Group.png and /dev/null differ diff --git a/icons/User.png b/icons/User.png deleted file mode 100644 index 2abd86f..0000000 Binary files a/icons/User.png and /dev/null differ diff --git a/icons/VAO_server.png b/icons/VAO_server.png deleted file mode 100644 index d69f143..0000000 Binary files a/icons/VAO_server.png and /dev/null differ diff --git a/icons/VAS_server.png b/icons/VAS_server.png deleted file mode 100644 index 124780c..0000000 Binary files a/icons/VAS_server.png and /dev/null differ diff --git a/icons/VBEM_server.png b/icons/VBEM_server.png deleted file mode 100644 index 6a54d46..0000000 Binary files a/icons/VBEM_server.png and /dev/null differ diff --git a/icons/VBO_Repository.png b/icons/VBO_Repository.png deleted file mode 100644 index 622379e..0000000 Binary files a/icons/VBO_Repository.png and /dev/null differ diff --git a/icons/VBO_server.png b/icons/VBO_server.png deleted file mode 100644 index 7e48c54..0000000 Binary files a/icons/VBO_server.png and /dev/null differ diff --git a/icons/VBR configation backup.png b/icons/VBR configation backup.png deleted file mode 100644 index 469a647..0000000 Binary files a/icons/VBR configation backup.png and /dev/null differ diff --git a/icons/VBR console.png b/icons/VBR console.png deleted file mode 100644 index 8fdb8a0..0000000 Binary files a/icons/VBR console.png and /dev/null differ diff --git a/icons/VBR server.png b/icons/VBR server.png deleted file mode 100644 index d859bcc..0000000 Binary files a/icons/VBR server.png and /dev/null differ diff --git a/icons/VBR_Repository.png b/icons/VBR_Repository.png deleted file mode 100644 index 43edd4c..0000000 Binary files a/icons/VBR_Repository.png and /dev/null differ diff --git a/icons/VBR_configation_backup.png b/icons/VBR_configation_backup.png deleted file mode 100644 index 34caf11..0000000 Binary files a/icons/VBR_configation_backup.png and /dev/null differ diff --git a/icons/VBR_server.png b/icons/VBR_server.png deleted file mode 100644 index 12f149f..0000000 Binary files a/icons/VBR_server.png and /dev/null differ diff --git a/icons/VBR_transaction_log_backup.png b/icons/VBR_transaction_log_backup.png deleted file mode 100644 index 5a56e04..0000000 Binary files a/icons/VBR_transaction_log_backup.png and /dev/null differ diff --git a/icons/VM_checked.png b/icons/VM_checked.png deleted file mode 100644 index ee76f3c..0000000 Binary files a/icons/VM_checked.png and /dev/null differ diff --git a/icons/VM_failed.png b/icons/VM_failed.png deleted file mode 100644 index c35ab4a..0000000 Binary files a/icons/VM_failed.png and /dev/null differ diff --git a/icons/VM_locked.png b/icons/VM_locked.png deleted file mode 100644 index b75bd70..0000000 Binary files a/icons/VM_locked.png and /dev/null differ diff --git a/icons/VM_paused___saved_state.png b/icons/VM_paused___saved_state.png deleted file mode 100644 index c61a66e..0000000 Binary files a/icons/VM_paused___saved_state.png and /dev/null differ diff --git a/icons/VM_running.png b/icons/VM_running.png deleted file mode 100644 index a4f5900..0000000 Binary files a/icons/VM_running.png and /dev/null differ diff --git a/icons/VM_snapshot.png b/icons/VM_snapshot.png deleted file mode 100644 index 694c01b..0000000 Binary files a/icons/VM_snapshot.png and /dev/null differ diff --git a/icons/VM_turn_on_off.png b/icons/VM_turn_on_off.png deleted file mode 100644 index 0628e75..0000000 Binary files a/icons/VM_turn_on_off.png and /dev/null differ diff --git a/icons/VM_with_a_snapshot.png b/icons/VM_with_a_snapshot.png deleted file mode 100644 index ce377c3..0000000 Binary files a/icons/VM_with_a_snapshot.png and /dev/null differ diff --git a/icons/VMware vCloud Director.png b/icons/VMware vCloud Director.png deleted file mode 100644 index 154df66..0000000 Binary files a/icons/VMware vCloud Director.png and /dev/null differ diff --git a/icons/VMware vSAN.png b/icons/VMware vSAN.png deleted file mode 100644 index 07ff5f0..0000000 Binary files a/icons/VMware vSAN.png and /dev/null differ diff --git a/icons/VMware vSwitch.png b/icons/VMware vSwitch.png deleted file mode 100644 index 5059a20..0000000 Binary files a/icons/VMware vSwitch.png and /dev/null differ diff --git a/icons/VMware_vSphere.png b/icons/VMware_vSphere.png deleted file mode 100644 index 6a2a90a..0000000 Binary files a/icons/VMware_vSphere.png and /dev/null differ diff --git a/icons/VPN.png b/icons/VPN.png deleted file mode 100644 index 6fce734..0000000 Binary files a/icons/VPN.png and /dev/null differ diff --git a/icons/VPN_server.png b/icons/VPN_server.png deleted file mode 100644 index ccec257..0000000 Binary files a/icons/VPN_server.png and /dev/null differ diff --git a/icons/VSPC_server.png b/icons/VSPC_server.png deleted file mode 100644 index 8df02d4..0000000 Binary files a/icons/VSPC_server.png and /dev/null differ diff --git a/icons/Veeam Cloud Mobility.png b/icons/Veeam Cloud Mobility.png deleted file mode 100644 index 3837116..0000000 Binary files a/icons/Veeam Cloud Mobility.png and /dev/null differ diff --git a/icons/Veeam Explorers.png b/icons/Veeam Explorers.png deleted file mode 100644 index 1f90d00..0000000 Binary files a/icons/Veeam Explorers.png and /dev/null differ diff --git a/icons/Veeam Gray 2.png b/icons/Veeam Gray 2.png deleted file mode 100644 index f2a745d..0000000 Binary files a/icons/Veeam Gray 2.png and /dev/null differ diff --git a/icons/Veeam Orange.png b/icons/Veeam Orange.png deleted file mode 100644 index 604a530..0000000 Binary files a/icons/Veeam Orange.png and /dev/null differ diff --git a/icons/Veeam Plugin for Oracle RMAN.png b/icons/Veeam Plugin for Oracle RMAN.png deleted file mode 100644 index 16f27c4..0000000 Binary files a/icons/Veeam Plugin for Oracle RMAN.png and /dev/null differ diff --git a/icons/Veeam Sapphire.png b/icons/Veeam Sapphire.png deleted file mode 100644 index 4f65a87..0000000 Binary files a/icons/Veeam Sapphire.png and /dev/null differ diff --git a/icons/VeeamZIP.png b/icons/VeeamZIP.png deleted file mode 100644 index 9f18e62..0000000 Binary files a/icons/VeeamZIP.png and /dev/null differ diff --git a/icons/Veeam_Agent_for_IBM_AIX.png b/icons/Veeam_Agent_for_IBM_AIX.png deleted file mode 100644 index eec28e0..0000000 Binary files a/icons/Veeam_Agent_for_IBM_AIX.png and /dev/null differ diff --git a/icons/Veeam_Agent_for_Linux.png b/icons/Veeam_Agent_for_Linux.png deleted file mode 100644 index 267ba2b..0000000 Binary files a/icons/Veeam_Agent_for_Linux.png and /dev/null differ diff --git a/icons/Veeam_Agent_for_Oracle_Solaris.png b/icons/Veeam_Agent_for_Oracle_Solaris.png deleted file mode 100644 index a5f5612..0000000 Binary files a/icons/Veeam_Agent_for_Oracle_Solaris.png and /dev/null differ diff --git a/icons/Veeam_Agent_for_Windows.png b/icons/Veeam_Agent_for_Windows.png deleted file mode 100644 index e289a24..0000000 Binary files a/icons/Veeam_Agent_for_Windows.png and /dev/null differ diff --git a/icons/Veeam_Agents.png b/icons/Veeam_Agents.png deleted file mode 100644 index 404c758..0000000 Binary files a/icons/Veeam_Agents.png and /dev/null differ diff --git a/icons/Veeam_Availability_Orchestrator.png b/icons/Veeam_Availability_Orchestrator.png deleted file mode 100644 index c966025..0000000 Binary files a/icons/Veeam_Availability_Orchestrator.png and /dev/null differ diff --git a/icons/Veeam_Availability_Suite.png b/icons/Veeam_Availability_Suite.png deleted file mode 100644 index 44ad4d6..0000000 Binary files a/icons/Veeam_Availability_Suite.png and /dev/null differ diff --git a/icons/Veeam_Backup_Enterprise_Manager.png b/icons/Veeam_Backup_Enterprise_Manager.png deleted file mode 100644 index b29e5b9..0000000 Binary files a/icons/Veeam_Backup_Enterprise_Manager.png and /dev/null differ diff --git a/icons/Veeam_Backup___Replication.png b/icons/Veeam_Backup___Replication.png deleted file mode 100644 index 43a4e57..0000000 Binary files a/icons/Veeam_Backup___Replication.png and /dev/null differ diff --git a/icons/Veeam_Backup_for_Office_365.png b/icons/Veeam_Backup_for_Office_365.png deleted file mode 100644 index e0cd4af..0000000 Binary files a/icons/Veeam_Backup_for_Office_365.png and /dev/null differ diff --git a/icons/Veeam_Cloud_Connect.png b/icons/Veeam_Cloud_Connect.png deleted file mode 100644 index 36b7c6f..0000000 Binary files a/icons/Veeam_Cloud_Connect.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_Active_Directory.png b/icons/Veeam_Explorer_for_Active_Directory.png deleted file mode 100644 index c24a3b0..0000000 Binary files a/icons/Veeam_Explorer_for_Active_Directory.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_Exchange.png b/icons/Veeam_Explorer_for_Exchange.png deleted file mode 100644 index 06c95a6..0000000 Binary files a/icons/Veeam_Explorer_for_Exchange.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_OneDrive.png b/icons/Veeam_Explorer_for_OneDrive.png deleted file mode 100644 index 0bef146..0000000 Binary files a/icons/Veeam_Explorer_for_OneDrive.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_Oracle.png b/icons/Veeam_Explorer_for_Oracle.png deleted file mode 100644 index 9334c05..0000000 Binary files a/icons/Veeam_Explorer_for_Oracle.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_SQL.png b/icons/Veeam_Explorer_for_SQL.png deleted file mode 100644 index 934a9a1..0000000 Binary files a/icons/Veeam_Explorer_for_SQL.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_SharePoint.png b/icons/Veeam_Explorer_for_SharePoint.png deleted file mode 100644 index fafb536..0000000 Binary files a/icons/Veeam_Explorer_for_SharePoint.png and /dev/null differ diff --git a/icons/Veeam_Explorer_for_Storage_Snapshots.png b/icons/Veeam_Explorer_for_Storage_Snapshots.png deleted file mode 100644 index 0239a92..0000000 Binary files a/icons/Veeam_Explorer_for_Storage_Snapshots.png and /dev/null differ diff --git a/icons/Veeam_Full_Backup.png b/icons/Veeam_Full_Backup.png deleted file mode 100644 index 1d41494..0000000 Binary files a/icons/Veeam_Full_Backup.png and /dev/null differ diff --git a/icons/Veeam_Incremental_Backup.png b/icons/Veeam_Incremental_Backup.png deleted file mode 100644 index c20bee8..0000000 Binary files a/icons/Veeam_Incremental_Backup.png and /dev/null differ diff --git a/icons/Veeam_MP.png b/icons/Veeam_MP.png deleted file mode 100644 index 9eec83e..0000000 Binary files a/icons/Veeam_MP.png and /dev/null differ diff --git a/icons/Veeam_ONE.png b/icons/Veeam_ONE.png deleted file mode 100644 index d0d6285..0000000 Binary files a/icons/Veeam_ONE.png and /dev/null differ diff --git a/icons/Veeam_ONE_Reporter.png b/icons/Veeam_ONE_Reporter.png deleted file mode 100644 index 9ee6b9e..0000000 Binary files a/icons/Veeam_ONE_Reporter.png and /dev/null differ diff --git a/icons/Veeam_PN.png b/icons/Veeam_PN.png deleted file mode 100644 index 062d17c..0000000 Binary files a/icons/Veeam_PN.png and /dev/null differ diff --git a/icons/Veeam_Plugin_for_Oracle_RMAN.png b/icons/Veeam_Plugin_for_Oracle_RMAN.png deleted file mode 100644 index 3dde434..0000000 Binary files a/icons/Veeam_Plugin_for_Oracle_RMAN.png and /dev/null differ diff --git a/icons/Veeam_Plugin_for_SAP_HANA.png b/icons/Veeam_Plugin_for_SAP_HANA.png deleted file mode 100644 index 41c0933..0000000 Binary files a/icons/Veeam_Plugin_for_SAP_HANA.png and /dev/null differ diff --git a/icons/Veeam_Plugin_for_SAP_on_Oracle.png b/icons/Veeam_Plugin_for_SAP_on_Oracle.png deleted file mode 100644 index 83c3397..0000000 Binary files a/icons/Veeam_Plugin_for_SAP_on_Oracle.png and /dev/null differ diff --git a/icons/Veeam_Proxy.png b/icons/Veeam_Proxy.png deleted file mode 100644 index 129e784..0000000 Binary files a/icons/Veeam_Proxy.png and /dev/null differ diff --git a/icons/Veeam_Repository.png b/icons/Veeam_Repository.png deleted file mode 100644 index ba70db3..0000000 Binary files a/icons/Veeam_Repository.png and /dev/null differ diff --git a/icons/Veeam_Reversed_Incremental_Backup.png b/icons/Veeam_Reversed_Incremental_Backup.png deleted file mode 100644 index c20bee8..0000000 Binary files a/icons/Veeam_Reversed_Incremental_Backup.png and /dev/null differ diff --git a/icons/Veeam_Service_Provider_Console.png b/icons/Veeam_Service_Provider_Console.png deleted file mode 100644 index 2b68c33..0000000 Binary files a/icons/Veeam_Service_Provider_Console.png and /dev/null differ diff --git a/icons/Veeam_Service_Provider_Server.png b/icons/Veeam_Service_Provider_Server.png deleted file mode 100644 index 71a473b..0000000 Binary files a/icons/Veeam_Service_Provider_Server.png and /dev/null differ diff --git a/icons/Veeam_backup_chain_metadata.png b/icons/Veeam_backup_chain_metadata.png deleted file mode 100644 index 2eb07ce..0000000 Binary files a/icons/Veeam_backup_chain_metadata.png and /dev/null differ diff --git a/icons/Veeam_logo.png b/icons/Veeam_logo.png deleted file mode 100644 index c271684..0000000 Binary files a/icons/Veeam_logo.png and /dev/null differ diff --git a/icons/Video file.png b/icons/Video file.png deleted file mode 100644 index f8ae934..0000000 Binary files a/icons/Video file.png and /dev/null differ diff --git a/icons/Virtual_Machine.png b/icons/Virtual_Machine.png deleted file mode 100644 index 08daeb0..0000000 Binary files a/icons/Virtual_Machine.png and /dev/null differ diff --git a/icons/Virtual_host.png b/icons/Virtual_host.png deleted file mode 100644 index d2df8d7..0000000 Binary files a/icons/Virtual_host.png and /dev/null differ diff --git a/icons/WAN_accelerator.png b/icons/WAN_accelerator.png deleted file mode 100644 index 8d610f1..0000000 Binary files a/icons/WAN_accelerator.png and /dev/null differ diff --git a/icons/Web console.png b/icons/Web console.png deleted file mode 100644 index 0fd752b..0000000 Binary files a/icons/Web console.png and /dev/null differ diff --git a/icons/Windows Repository.png b/icons/Windows Repository.png deleted file mode 100644 index 7f60395..0000000 Binary files a/icons/Windows Repository.png and /dev/null differ diff --git a/icons/Windows_Repository.png b/icons/Windows_Repository.png deleted file mode 100644 index 73f272d..0000000 Binary files a/icons/Windows_Repository.png and /dev/null differ diff --git a/icons/Windows_VM.png b/icons/Windows_VM.png deleted file mode 100644 index 91136a3..0000000 Binary files a/icons/Windows_VM.png and /dev/null differ diff --git a/icons/Windows_server.png b/icons/Windows_server.png deleted file mode 100644 index dcc5d7e..0000000 Binary files a/icons/Windows_server.png and /dev/null differ diff --git a/icons/WireGuard.png b/icons/WireGuard.png deleted file mode 100644 index 9ab0f72..0000000 Binary files a/icons/WireGuard.png and /dev/null differ diff --git a/icons/Workstation.png b/icons/Workstation.png deleted file mode 100644 index d6c4aa8..0000000 Binary files a/icons/Workstation.png and /dev/null differ diff --git a/icons/no_icon.png b/icons/no_icon.png deleted file mode 100644 index c5b0563..0000000 Binary files a/icons/no_icon.png and /dev/null differ diff --git a/icons/vApp.png b/icons/vApp.png deleted file mode 100644 index 51eaeb7..0000000 Binary files a/icons/vApp.png and /dev/null differ diff --git a/icons/vApp_running.png b/icons/vApp_running.png deleted file mode 100644 index 130dc52..0000000 Binary files a/icons/vApp_running.png and /dev/null differ diff --git a/icons/vCenter_server.png b/icons/vCenter_server.png deleted file mode 100644 index 3deda72..0000000 Binary files a/icons/vCenter_server.png and /dev/null differ diff --git a/icons/vCloud_Director_server.png b/icons/vCloud_Director_server.png deleted file mode 100644 index 578c162..0000000 Binary files a/icons/vCloud_Director_server.png and /dev/null differ diff --git a/icons/verified_recoverability.png b/icons/verified_recoverability.png deleted file mode 100644 index 106e089..0000000 Binary files a/icons/verified_recoverability.png and /dev/null differ