我想编写一个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的解决方案。有可能吗?
答案 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=$true
和Position=0
中。现在,有了一个简单的if-else
条件,您就可以确定要在函数中处理哪个变量。