Public/Disk/Select-DataStore.ps1
function Select-DataStore{ [CmdletBinding()] param ( [int]$NotDiskNumber, [switch]$Skip, [switch]$SelectOne ) #======================================================================= # Get USB Disk and add the MinimumSizeGB filter #======================================================================= $AllItems = Get-DataStore | Sort-Object -Property DriveLetter #======================================================================= # Filter NotDiskNumber #======================================================================= if ($PSBoundParameters.ContainsKey('NotDiskNumber')) { $AllItems = $AllItems | Where-Object {$_.DiskNumber -ne $NotDiskNumber} } #======================================================================= # Let's bounce if there are no results #======================================================================= if (-NOT ($AllItems)) {Return $false} #======================================================================= # There was only 1 Item, then we will select it automatically #======================================================================= if ($PSBoundParameters.ContainsKey('SelectOne')) { Write-Verbose "Automatically select " if (($AllItems | Measure-Object).Count -eq 1) { $SelectedItem = $AllItems Return $SelectedItem } } #======================================================================= # Table of Items #======================================================================= $AllItems | Select-Object -Property DriveLetter, FileSystemLabel,` @{Name='FreeGB';Expression={[int]($_.SizeRemaining / 1000000000)}},` @{Name='TotalGB';Expression={[int]($_.Size / 1000000000)}},` FileSystem, DriveType, DiskNumber | Format-Table | Out-Host #======================================================================= # Select an Item #======================================================================= if ($PSBoundParameters.ContainsKey('Skip')) { do {$Selection = Read-Host -Prompt "Select a DataStore by DriveLetter, or press S to SKIP"} until (($Selection -ge 0) -and ($Selection -in $AllItems.DriveLetter) -or ($Selection -eq 'S')) if ($Selection -eq 'S') {Return $false} } else { do {$Selection = Read-Host -Prompt "Select a DataStore by DriveLetter"} until (($Selection -ge 0) -and ($Selection -in $AllItems.DriveLetter)) } #======================================================================= # Return Selection #======================================================================= Return ($AllItems | Where-Object {$_.DriveLetter -eq $Selection}) #======================================================================= } |