Вы можете имитировать c сегменты размера, используя атрибут параметра ValidateSet
в такой функции:
function Search-FileBySize {
[CmdletBinding()]
param(
[ValidateSet(
'Empty (0KB)', 'Tiny (0KB-16KB)',
'Small (16KB-1MB)', 'Medium (1MB-128MB)',
'Large (128MB-1GB)', 'Huge (1GB-4GB)', 'Gigantic (>4GB)'
)]
[Parameter(Mandatory)][string]$size
);
$range = $size -replace '^\w+\s+\(([^()]+)\)$', '$1' -split '-' |
foreach {
Invoke-Expression $_.ToString().Replace('>', '');
}
$condition = if ($range -is [array]) {
{ $args[0] -ge $range[0] -and $args[0] -le $range[1] };
} else {
if ($range -gt 0) { { $args[0] -gt $range }; }
else { { $args[0] -eq $range }; }
}
Get-ChildItem -Path 'c:\' `
-Recurse -File `
-ErrorAction SilentlyContinue |
where { & $condition $_.Length; }
}
PowerShell ISE и другие редакторы кода выберут действительные значения параметров от ValidateSet
. Например:
$files = Search-FileBySize -size 'Large (128MB-1GB)';
# Intellisense gives you this ^^^^^^^^^^^^^^^^^^^
Жестко закодируйте путь Get-ChildItem
, чтобы пример был коротким. Если вы находите функцию полезной, возможно, следует добавить параметр пути с проверкой.