Как вы пишете функцию powershell, которая читает из конвейерного ввода?

РЕШЕНО:

Ниже приведены простейшие возможные примеры функций/скриптов, использующих конвейерный ввод. Каждый из них ведет себя так же, как передача командлету «echo».

Как функции:

Function Echo-Pipe {
  Begin {
    # Executes once before first item in pipeline is processed
  }

  Process {
    # Executes once for each pipeline object
    echo $_
  }

  End {
    # Executes once after last pipeline object is processed
  }
}

Function Echo-Pipe2 {
    foreach ($i in $input) {
        $i
    }
}

Как скрипты:

# Echo-Pipe.ps1
  Begin {
    # Executes once before first item in pipeline is processed
  }

  Process {
    # Executes once for each pipeline object
    echo $_
  }

  End {
    # Executes once after last pipeline object is processed
  }
# Echo-Pipe2.ps1
foreach ($i in $input) {
    $i
}

E.g.

PS > . theFileThatContainsTheFunctions.ps1 # This includes the functions into your session
PS > echo "hello world" | Echo-Pipe
hello world
PS > cat aFileWithThreeTestLines.txt | Echo-Pipe2
The first test line
The second test line
The third test line

person samthebest    schedule 09.08.2012    source источник
comment
Пожалуйста, не редактируйте свои вопросы, чтобы включить решение, но отметьте его как решенное, поставив галочку рядом с правильным ответом.   -  person schuelermine    schedule 11.04.2020


Ответы (1)


У вас также есть возможность использовать расширенные функции вместо базового подхода, описанного выше:

function set-something { 
    param(
        [Parameter(ValueFromPipeline=$true)]
        $piped
    )

    # do something with $piped
}

Должно быть очевидно, что только один параметр может быть привязан непосредственно к входу конвейера. Однако вы можете привязать несколько параметров к разным свойствам на входе конвейера:

function set-something { 
    param(
        [Parameter(ValueFromPipelineByPropertyName=$true)]
        $Prop1,

        [Parameter(ValueFromPipelineByPropertyName=$true)]
        $Prop2,
    )

    # do something with $prop1 and $prop2
}

Надеюсь, это поможет вам в вашем путешествии по изучению другой оболочки.

person x0n    schedule 31.08.2012