none
PoSh: Param в скрипте, конвеер. RRS feed

  • Вопрос

  • Здравствуйте, уважаемые.
    В познавательных целях мне вздумалось создать скрипт, который мог бы принимать в качестве параметра строку, либо же обрабатывать строки, переданные по конвееру. И если с первой частью всё прошло гладко (как с еденичной строкой так и с массивом строк), то со второй возникли сложности.
    Грубо говоря тело скрипта выглядит следующим образом:

    Param
    (
    [parameter(Mandatory=$true,
    ValueFromPipeLine=$true)]
    [String[]]$MyString
    )
    $MyString

    Несмотря на то, что тип переменной $MyString - String[], при передаче скрипту нескольких строк по конвееру он обрабатывает лишь последнюю переданную, и свойство Length переменной $MyString не превышает 1. Как же быть с использованием скриптов в конвеере?
    15 декабря 2009 г. 9:09

Ответы

  • help about_function -full

    см. в сторону фильтров или в сторону использования блока process{...} внутри функции.

    http://technet.microsoft.com/en-us/library/dd315326.aspx
    • Помечено в качестве ответа anyaspid 15 декабря 2009 г. 9:28
    15 декабря 2009 г. 9:18
  • Param
    (
    [parameter(Mandatory=$true,
    ValueFromPipeLine=$true)]
    [String[]]$MyString
    )
    process {
        foreach ($s in $myString) { "[$s]" }
    }

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

    Param ([String[]]$MyString)
    $MyString += @($input)
    foreach ($s in $myString) { "[$s]" }


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Предложено в качестве ответа Vasily GusevModerator 15 декабря 2009 г. 10:18
    • Помечено в качестве ответа anyaspid 15 декабря 2009 г. 10:36
    15 декабря 2009 г. 10:17
    Модератор

Все ответы

  • help about_function -full

    см. в сторону фильтров или в сторону использования блока process{...} внутри функции.

    http://technet.microsoft.com/en-us/library/dd315326.aspx
    • Помечено в качестве ответа anyaspid 15 декабря 2009 г. 9:28
    15 декабря 2009 г. 9:18
  • Param
    (
    [parameter(Mandatory=$true,
    ValueFromPipeLine=$true)]
    [String[]]$MyString
    )
    process {
        foreach ($s in $myString) { "[$s]" }
    }

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

    Param ([String[]]$MyString)
    $MyString += @($input)
    foreach ($s in $myString) { "[$s]" }


    AKA Xaegr, MCSE: Security, Messaging; MCITP: Server\Enterprise Administrator; Блог: http://xaegr.wordpress.com
    • Предложено в качестве ответа Vasily GusevModerator 15 декабря 2009 г. 10:18
    • Помечено в качестве ответа anyaspid 15 декабря 2009 г. 10:36
    15 декабря 2009 г. 10:17
    Модератор