Команда с использованием одного или обоих параметров -Path и $ input? - PullRequest
1 голос
/ 13 июня 2019

Я хотел бы написать сценарий PowerShell, который будет принимать список файлов для обработки или сможет получать свои данные из stdin.Команда примет текст и произведет пиглатин.(Вы правы, я на самом деле делаю что-то еще, но это сценарий.)

Edit-PigLatin -Path 'story.txt'
    or
Get-Content -Path 'story.txt' | Edit-PigLatin

Я хочу сделать параметр -Path необязательным.

[Parameter(Mandatory=$false, HelpMessage='input filename')]
[string[]]$Path

Iне удалось найти решение, которое будет использовать один или оба параметра -Path и $ input.Возможно ли это?

1 Ответ

2 голосов
/ 13 июня 2019

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

Могу ли я предложить альтернативный подход:

function Edit-Piglatin
{
    param(
        [Parameter(Mandatory=$false, 
        ValueFromPipeline=$true,
        Position=0)]
        [string[]]$Content,

        [Parameter(Mandatory=$false, 
        ValueFromPipeline=$false,
        Position=1)]
        [string[]]$Path
    )

    #named parameter $path will get the input for the filename
    #values from pipeline will go to automatically go to $content 

    if ($Path)
    {
        #use this as input
    }
    elseif ($Content)
    {
        #use this as input
    }
    else
    {
        #no input
    }
}

Хитрость в этом ValueFromPipeline=$true вместе с Position=0. Теперь с помощью простого условия if-else вы можете определить, какая переменная будет обрабатываться внутри вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...