none
Powershell. Обращение к функции через Pipeline - возможно ли? RRS feed

  • Вопрос

  • Пишу скрипт на Powershell.
    --------------------
    # записываю в файл строку "111". Это работает.
    "111" | Out-File -FilePath C:\1.txt -Encoding "default" -Append

    # выделяю операцию записи в файл в отдельную функцию и пытаемся записать "222" с помощью этой функции. НЕ РАБОТАЕТ!
    Function WriteLog { Out-File -FilePath C:\1.txt -Encoding "default" -Append }
    "222" | WriteLog
    --------------------

    Пробовал менять scope функции на global и script - не помогло.
    Пробовал офомить операцию записи как alias - это невозможно, т.к. команда имеет параметры.

    Что я делаю не так? Как можно иначе решить задачу выделения операции записи в файл в отдельное "слово"?
    Заранее спасибо!
    15 апреля 2009 г. 3:37

Ответы

  • потому что вы не указали источник данных. Варианта я вижу 3:
    1) использовать $input:
    Function WriteLog { $input | Out-File -FilePath C:\1.txt -Encoding "default" -Append }
    2) использовать стадию Process:
    Function WriteLog { process {$_ | Out-File -FilePath C:\1.txt -Encoding "default" -Append }}
    Function WriteLog { process {Out-File -inputobject $_ -FilePath C:\1.txt -Encoding "default" -Append }}
    3) использовать фильтр:
    filter WriteLog {$_ | Out-File -FilePath C:\1.txt -Encoding "default" -Append }
    filter WriteLog { Out-File -inputobject $_ -FilePath C:\1.txt -Encoding "default" -Append }


    как видите последний вариант 3 является вырожденным от варианта 2.

    Можете почитать об этом у меня в блоге:
    http://www.sysadmins.lv/PermaLink,guid,d8c49e62-cc9b-4b7b-892c-207bfc8a82e4.aspx
    [тут могла быть ваша реклама] http://www.sysadmins.lv
    • Предложено в качестве ответа Vadims PodansMVP 15 апреля 2009 г. 5:55
    • Помечено в качестве ответа Sergey Shteinmiller 15 апреля 2009 г. 7:54
    15 апреля 2009 г. 5:55