Я пишу инструмент поиска на Powershell, и я столкнулся с проблемой, что я не могу подавить возврат функции, и она всегда печатается на консоли. Чтобы было ясно, я сделал несколько более мелких тестовых функций.Powershell: Подавить вывод на консоль, если он конвейерный
Function test1
{
param(
[Parameter(Mandatory=$false,ValueFromPipeline=$True)]
$PrevRes = 0)
write-host "alfa"
return ($PrevRes+1)
}
Function test2
{
param(
[Parameter(Mandatory=$false,ValueFromPipeline=$True)]
$PrevRes = 0)
write-host "beta"
return ($PrevRes+1)
}
Function test3
{
param(
[Parameter(Mandatory=$false,ValueFromPipeline=$True)]
$PrevRes = 0)
write-host "omega"
return ($PrevRes+1)
}
test1 gives:
alfa
1
when test1 | test2:
alfa
beta
2
when test | test2 | test3:
alfa
beta
omega
3
when test | test3 | test2:
alfa
omega
beta
3
Проблема заключается в том, я не знаю, в каком порядке эти функции будут вызываться и то, что мне нужно, чтобы убедиться, если нет трубопровода в конце концов, возвращение не будет выводиться на экран, но Мне все еще нужно получить доступ к самому значению.
Я хочу, чтобы выход, как это:
test1 gives:
alfa
when test1 | test2:
alfa
beta
when test | test2 | test3:
alfa
beta
omega
when test | test3 | test2:
alfa
omega
beta
Это инструмент для клиента, так решение, как:
$tst = test1 |test2
не хорошо, потому что вы знаете, клиент является клиентом, он не знал бы, как его использовать.
Есть ли способ сделать это с помощью PowerShell, которую я пропустил в Интернете?
Любое решение было бы полезно, если она не включает в себя каких-либо действий со стороны заказчика
Спасибо заранее
Большое спасибо за ваш ответ, но я сожалею, может быть, мой вопрос не объяснил сам. Я должен использовать запись-хост, потому что он дает данные пользователю. Я действительно спрашиваю, есть ли способ определить в самой функции, если возвращаемое значение конвейерно или нет? Мне нужно увеличить значение $ PrevRes для вычислений, но когда оно больше не конвейерно, я не хочу выводить его на экран. Так что на самом деле мне нужно только альфа-бета и омега без номера в конце. – SokIsKedu
@SokIsKedu Я не уверен, что вы подразумеваете под «если возвращаемое значение конвейерно» - в PowerShell функция испускает 0 или более объектов, а последнее - после оператора return. Если следующая вещь в конвейере - это еще одна функция, объекты будут отправляться на нее, в противном случае возвращается вызывающему абоненту –
Если ваш клиент «не знал, как его использовать», то почему он попросит вас доставить Это? –