У меня проблема с игрушкой, которая кажется, что она должна быть простой. Я хотел бы иметь такую функцию, как Join-Path, которая поддерживает канал. Назовите его Build-Path. Таким образом, эти заявления (которые мои тесты 1-4) должны быть эквивалентны:PowerShell: Позиционные параметры и ValueFromPipeline
Get-Location | Build-Path Test
Get-Location | Build-Path -Right Test
Build-Path -Left (Get-Location) -Right Test
Build-Path (Get-Location) Test
Я попробовал несколько вещей, и ближайший я могу получить эти две функции (взаимоисключающих):
A: Явная позиция по обоим значениям; сбой тест 1
function Build-Path
(
[Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
[String] $Left,
[Parameter(Mandatory=$true, Position=1)]
[String] $Right
)
{
Join-Path $Left $Right
}
B: Нет положения на параметре трубопровода, положение справа 0; не проходит тест 4
function Build-Path
(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)]
[String] $Left,
[Parameter(Mandatory=$true, Position=0)]
[String] $Right
)
{
Join-Path $Left $Right
}
Я попытался с помощью ParameterSets в ряде направлений (не спасло мои попытки) без успеха, и я немного озадачен прямо сейчас.
Мысли?
'$ left | Join-Path -ChildPath $ right' <- Я уверен, что Join-Path делает то, о чем вы просите. –
@ RyanBemrose звучит педантично, но не использует позиционные параметры (т.е. $ left | Join-Path $ right) –
Отдельная проблема: у вас нет блока процесса, который вам действительно нужен при использовании ввода конвейера. Вы используете только один объект в конвейере, так что это не так очевидно. –