Public/Helper/Initialize-VeeamLocalBackupDestination.ps1

function Initialize-VeeamLocalBackupDestination {
    [OutputType([string])]
    [CmdletBinding()]
    param ()

    # Get Destination, process all USB Drives
    $USBDrives = Get-CimInstance -ClassName win32_diskdrive | `
        Where-Object{$_.interfacetype -eq "USB"} | `
        ForEach-Object{
            $Query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
            Get-CimInstance -Query $Query
        } | `
        ForEach-Object{
            $Query = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"
            Get-CimInstance -Query $Query
        } | `
        ForEach-Object{ $_.deviceid }

    if (!$USBDrives) { return Write-Error 'No USB drives found.' }

    # Find USB drive with a Backup folder on the root or the largest one
    $BackupFolders = Get-ChildItem $($USBDrives.replace(':',':\')) -Filter 'Backup*'
    if ($BackupFolders) {
        Write-Verbose "Existing backup folder found: $($BackupFolders.FullName -join(', '))"
        $DestinationDrive = Get-PSDrive -Name $BackupFolders.Parent.Name.trim(':\') | Sort-Object ($_.Used + $_.Free) -Descending | Select-Object -First 1
        $Destination = ($BackupFolders | Where-Object {$_.Parent.Name -eq $DestinationDrive.Root}).FullName
    } else {
        $DestinationDrive = Get-PSDrive -Name $USBDrives.Trim(':') | Sort-Object ($_.Used + $_.Free) -Descending | Select-Object -First 1
        $Destination = Join-Path $DestinationDrive.Root 'Backup'
    }
    $Destination
}