提问人:sbi 提问时间:9/14/2012 最后编辑:Peter Mortensensbi 更新时间:12/26/2018 访问量:35252
如何在 PowerShell 中为脚本提供参数属性?
How do I provide param attributes for a script in PowerShell?
问:
我有这个脚本,可以通过两种方式调用:
MyScript -foo path\to\folder
或
MyScript -bar path\to\folder
(也就是说,我可以传递开关加文件夹,也可以传递字符串参数加文件夹。
我试图将参数声明放入我的脚本中以反映该语法:
param(
[parameter(Mandatory=$false)] [switch]$foo,
[parameter(Mandatory=$false)] [String]$bar,
[parameter(Mandatory=$true)] [System.IO.FileInfo]$path
)
但是,我必须显式传递以调用脚本:path
MyScript -l -path path\to\folder
那么(如何)我才能同时制作位置参数呢?bar
path
注意:如果我选择了一个非常愚蠢的语法来调用脚本,我仍然可以更改它。
答:
0赞
JPBlanc
9/14/2012
#1
如此处所述,您可以指定参数的参数位置。
[parameter(Position=0)]
评论
1赞
R. Martinho Fernandes
9/14/2012
但这不允许使用第二种调用语法。
28赞
x0n
9/14/2012
#2
需要注意以下几点:需要使用参数集来告知 PowerShell 存在相互排斥的方法来调用脚本;也就是说,不能同时使用 switch 和 string。这些集合还允许您设置两者的位置,并使其位于索引 0 处。开关不需要按位置放置,因为它们对活页夹不明确,可以放置在任何地方。此外,每组中至少应有一个参数是必需的。$bar
$filepath
function test-set {
[CmdletBinding(DefaultParameterSetName = "BarSet")]
param(
[parameter(
mandatory=$true,
parametersetname="FooSet"
)]
[switch]$Foo,
[parameter(
mandatory=$true,
position=0,
parametersetname="BarSet"
)]
[string]$Bar,
[parameter(
mandatory=$true,
position=1
)]
[io.fileinfo]$FilePath
)
@"
Parameterset is: {0}
Bar is: '{1}'
-Foo present: {2}
FilePath: {3}
"@ -f $PSCmdlet.ParameterSetName, $bar, $foo.IsPresent, $FilePath
}
需要该属性来指定在调用函数时应为默认值的参数集。CmdletBinding
以下是上述配置的语法帮助:
PS> test-set -?
NAME
test-set
SYNTAX
test-set [-Bar] <string> [-FilePath] <FileInfo> [<CommonParameters>]
test-set [-FilePath] <FileInfo> -Foo [<CommonParameters>]
以下是各种调用的输出:
PS> test-set barval C:\temp\foo.zip
Parameterset is: BarSet
Bar is: 'barval'
-Foo present: False
FilePath: C:\temp\foo.zip
PS> test-set -foo c:\temp\foo.zip
Parameterset is: FooSet
Bar is: ''
-Foo present: True
FilePath: c:\temp\foo.zip
希望这会有所帮助。
评论
0赞
sbi
9/18/2012
好的,所以这做到了,现在一切都很好。多谢!
评论