使用-Path参数和$ input中的一个或两个命令?

时间:2019-06-13 03:29:05

标签: powershell

我想编写一个PowerShell脚本,该脚本将接受要处理的文件列表或能够从stdin中获取其输入。该命令将接受文本并生成猪拉丁。 (您是对的,我实际上正在做其他事情,但这是这种情况。)

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

我想使-Path参数不是必需的。

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

我找不到能够同时使用-Path参数和$ input的解决方案。有可能吗?

1 个答案:

答案 0 :(得分:2)

我在这里看到的一个明显问题是,您在第一种情况下传入文件名,在第二种情况下传入文件的内容。如果将它们都发送到同一个变量,则脚本中将出现问题。

可能我建议一种替代方法:

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=$truePosition=0中。现在,有了一个简单的if-else条件,您就可以确定要在函数中处理哪个变量。