public/cbb/Test-MBSStorageAccount.ps1

function Test-MBSStorageAccount {
    <#
    .SYNOPSIS
    Test network connection to cloud or local backup storage.
     
    .DESCRIPTION
    The cmdlet get information from the backup storage and test connection with Test-NexConnection cmdlet.
     
    .PARAMETER StorageAccount
    Specify storage account object. Use Get-MBSStorageAccount cmdlet to list storages. Example: (Get-MBSStorageAccount -Name "AWS S3").
     
    .PARAMETER Name
    Backup storage name.
     
    .PARAMETER ID
    Backup storage ID.
     
    .EXAMPLE
    Get-MBSStorageAccount | Test-MBSStorageAccount | ft -AutoSize
 
    Get all MBS backup storages and test them in pipeline.
 
    .EXAMPLE
    Test-MBSStorageAccount -StorageAccount (Get-MBSStorageAccount -Name "AWS S3")
 
    Test backup storage connection with "AWS S3" name by providing backup storage object to "StorageAccount" parameter.
 
    .EXAMPLE
    Test-MBSStorageAccount -Name "AWS S3"
 
    Test backup storage connection with "AWS S3" name
 
    .EXAMPLE
    Test-MBSStorageAccount -ID d32111fa-53db-4ae0-800a-8601a06ca2d7
 
    Test backup storage connection with d32111fa-53db-4ae0-800a-8601a06ca2d7 ID.
 
    .INPUTS
        MBS.Agent.StorageAccount
 
    .OUTPUTS
        MBS.Agent.TestStorageAccountResult
 
    .NOTES
        Author: Alex Volkov
 
    .LINK
        https://kb.msp360.com/managed-backup-service/powershell-module/cmdlets/backup-agent/test-mbsstorageaccount/
    #>

    [CmdletBinding()]
    param (
        # Storage account object
        [Parameter(Mandatory=$true, HelpMessage="Specify storage account object. Use Get-MBSStorageAccount cmdlet to list storages. Example: (Get-MBSStorageAccount -Name ""AWS S3"")", ParameterSetName='StorageAccount', ValueFromPipeline)]
        [MBS.Agent.StorageAccount]
        $StorageAccount,
        # Storage account name
        [Parameter(Mandatory=$true, HelpMessage="Specify storage account name", ParameterSetName='Name')]
        [string]
        $Name,
        # Storage account ID
        [Parameter(Mandatory=$true, HelpMessage="Specify storage account ID", ParameterSetName='ID')]
        [string]
        $ID
    )
    
    begin {
        
    }
    
    process {
        if ($StorageAccount) {
           
        }elseif ($Name) {
            $StorageAccount = Get-MBSStorageAccount -Name $Name
        }elseif ($ID) {
            $StorageAccount = Get-MBSStorageAccount -ID $ID
        }else {
            Write-Error "Parameter is not specified."
            break
        }
        $Result = New-Object -TypeName MBS.Agent.TestStorageAccountResult
        
        switch ($StorageAccount.SGCloudTypeValue) {
            'AzureVM' {
                Write-Warning "Azure VM account is not supported."
            }
            {$_ -in "","PhysicalFile"} {
                $Result.Name = $StorageAccount.DisplayName 
                if ($StorageAccount.Type -eq "FileSystemConnection") {
                    $StoragePath = $StorageAccount.Path
                }else{
                    $StoragePath = $StorageAccount.Bucket
                }
                if (Split-Path -qualifier $StoragePath -ErrorAction SilentlyContinue) {
                    $Result.HostName = 'localhost'
                    $Result.RemoteAddress = '127.0.0.1'
                }elseif($URI = new-object System.Uri($StoragePath)){
                    $Result.HostName = $URI.Host
                    $Result.RemoteAddress = if($IP = Resolve-DnsName -Name $URI.Host -ErrorAction SilentlyContinue){$IP[0].IPAddress}
                }else{
                    Write-Warning "$($StorageAccount.DisplayName) account is not supported."
                }
                $Result.TestSucceeded = Test-Path $("filesystem::$($StoragePath)")
            }
            {$_ -in "Minio","S3Compatible"} {
                $script:Options = @{
                    ComputerName = $(if($StorageAccount.SGHttpsEndPoint){$StorageAccount.SGHttpsEndPoint.Split(':')[0]}else{$StorageAccount.SGEndPoint.Split(':')[0]})
                    Port = $(if($StorageAccount.SGHttpsEndPoint){if($StorageAccount.SGHttpsEndPoint.Split(':')[1]){$StorageAccount.SGHttpsEndPoint.Split(':')[1]}else{443}}else{$StorageAccount.SGEndPoint.Split(':')[1]})
                }
            }
            Default {
                $script:Options = @{
                    ComputerName = $StorageAccount.SGHttpsEndPoint
                    Port = 443
                }
            }
        }
        
        if ($script:Options) {
            $Test = Test-NetConnection @script:Options -WarningAction SilentlyContinue
            $Result.Name = $StorageAccount.DisplayName 
            $Result.HostName = $Test.ComputerName
            $Result.RemotePort = $Test.RemotePort
            $Result.RemoteAddress = $Test.RemoteAddress
            $Result.TestSucceeded = $Test.TcpTestSucceeded
        }
        Remove-Variable -Name "Options" -Scope Script -Force -ErrorAction SilentlyContinue
        if ($Result.Name){return $Result}
    }
    
    end {
        
    }
}