Есть ли функция, которая меняет элементы, переданные по конвейеру?
например:.
PS C:\> 10, 20, 30 | Reverse
30
20
10
Есть ли функция, которая меняет элементы, переданные по конвейеру?
например:.
PS C:\> 10, 20, 30 | Reverse
30
20
10
Вы можете ввести $input внутри функции непосредственно в массив, а затем отменить это:
function reverse
{
$arr = @($input)
[array]::reverse($arr)
$arr
}
Здесь один подход:
function Reverse ()
{
$arr = $input | ForEach-Object { $_ }
[array]::Reverse($arr)
return $arr
}
Я понимаю, что это не использует канал, но я нашел это проще, если вы просто хотели сделать это встроенным, есть простой способ. Просто поместите ваши значения в массив и вызовите существующую функцию Reverse следующим образом:
$list = 30,20,10
[array]::Reverse($list)
# print the output.
$list
Поместите это в окно PowerShell ISE и запустите его, результат будет 10, 20, 30.
Опять же, это если вы просто хотите сделать это встроенным. Есть функция, которая будет работать для вас.
Использование $ input работает для конвейера, но не для параметра. Попробуй это:
function Get-ReverseArray {
Param(
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeLine = $true)]
$Array
)
begin{
$build = @()
}
process{
$build += @($Array)
}
end{
[array]::reverse($build)
$build
}
}
#set alias to use non-standard verb, not required.. just looks nicer
New-Alias -Name Reverse-Array -Value Get-ReverseArray
Тестовое задание:
$a = "quick","brown","fox"
#--- these all work
$a | Reverse-Array
Reverse-Array -Array $a
Reverse-Array $a
#--- Output for each
fox
brown
quick
10, 20, 30 | Sort-Object -Descending {(++$script:i)}
Try:
10, 20, 30 | Sort-Object -Descending