Private/Disk/Select-MyDisk.ps1

function Select-MyDisk {
    [CmdletBinding()]
    param (

        [ValidateSet('NVMe','SATA','USB')]
        [string]$BusType,
        [ValidateSet('NVMe','SATA','USB')]
        [string]$BusTypeNot,
        [ValidateSet('HDD','SSD','USB')]
        [string]$MediaType,
        [string]$MediaTypeNot,
        [int]$MaxSizeGB,
        [int]$MinSizeGB,
        [string]$Message = "Enter the Disk Number or CTRL+C to cancel"
    )

    $GetMyDisk = Get-MyDisk

    if ($BusType) {$GetMyDisk = $GetMyDisk | Where-Object {$_.BusType -match $BusType}}
    if ($BusTypeNot) {$GetMyDisk = $GetMyDisk | Where-Object {$_.BusType -notmatch $BusTypeNot}}
    if ($MediaType) {$GetMyDisk = $GetMyDisk | Where-Object {$_.MediaType -match $MediaType}}
    if ($MediaTypeNot) {$GetMyDisk = $GetMyDisk | Where-Object {$_.MediaType -notmatch $MediaTypeNot}}

    if ($MinSizeGB) {$GetMyDisk = $GetMyDisk | Where-Object {$_."Size(GB)" -gt $MinSizeGB}}
    if ($MaxSizeGB) {$GetMyDisk = $GetMyDisk | Where-Object {$_."Size(GB)" -lt $MaxSizeGB}}

    $Table = $GetMyDisk | Format-Table | Out-Host
    
    $DiskNumber = Read-Host -Prompt "$Table $Message"

    while ($DiskNumber -lt 0 -or $DiskNumber -notin $GetMyDisk.Number) {
        $DiskNumber = Read-Host -Prompt "$Table $Message"
    }
    return $DiskNumber
}