在powershell中使用别名清空参数
我希望在powershell中使用别名清空参数,powershell,alias,Powershell,Alias,我希望-h不传递值来工作,也希望-h带有参数: 然而,我希望其他人保持现状。。。也就是说,它们是可选的,除非您别名一个参数并且需要提供一个值 Param( $BadParam, [alias("h")][String]$Help, [alias("s")][String]$Server, [alias("d")][String]$DocRoot, [alias("c")][String]$Commit, [alias("b")][String]$Branch ) 例如(缺少更好的解决方
-h
不传递值来工作,也希望-h
带有参数:
然而,我希望其他人保持现状。。。也就是说,它们是可选的,除非您别名一个参数并且需要提供一个值
Param(
$BadParam,
[alias("h")][String]$Help,
[alias("s")][String]$Server,
[alias("d")][String]$DocRoot,
[alias("c")][String]$Commit,
[alias("b")][String]$Branch
)
例如(缺少更好的解决方案):
我希望它在shell中的表现:
-> script.ps1 -s test -h
-> Here's the menu for how it works bro.
-> script.ps1 -s test -h server
-> Here's more info on that particular thing from the menu.
-> script.ps1 -s -h server
-> You are missing a value for -e.
Powershell并不真正支持这样的东西。您可以有一个
[switch]
参数,该参数可以不指定任何值,也可以有一个[string]
参数,该参数必须完全不存在或提供一个值。不能有支持缺席、不使用值指定和使用值指定的参数
另一种选择是将其设置为[string]
,但让用户传递$null
,但这种方式很糟糕
另一个非常骇人的选择是对参数位置进行一些欺骗-Help
可能是一个[switch]
,然后可能有另一个参数-ThingHelp
位于它的正后方,它是一个[string]
。然后,一个类似于-Help'foo'
的调用不是将$Help
设置为'foo'
,而是设置$Help
开关,并分配$ThingHelp='foo'
function ParamTest
{
param(
[Parameter(Position = 0)]
[switch]$Help,
[Parameter(Position = 1)]
[string] $ThingHelp
)
"Help is [$help]"
"ThingHelp is [$thingHelp]"
}
这支持以下内容:
PS> ParamTest # $help = $false, $thingHelp = null
PS> ParamTest -Help # $help = $true, $thingHelp = null
PS> ParamTest -Help 'foo' # $help = $true, $thingHelp = 'foo'
像这样的黑客通常不是一个好主意,因为它们往往既脆弱又令人困惑。您应该能够将脚本提供给一般的powershell用户,他们应该立即理解您的参数的含义和用法。如果您必须解释一堆其他数千个cmdlet都没有做过的自定义内容,那么您可能是在浪费每个人的时间
如果你真的在实施某种帮助/使用系统,请停止!Powershell免费提供全面的帮助系统。您可以记录每个参数,给出示例代码等,而无需任何额外的操作。有关详细信息,请参阅文档。Powershell实际上不支持这样的功能。您可以有一个
[switch]
参数,该参数可以不指定任何值,也可以有一个[string]
参数,该参数必须完全不存在或提供一个值。不能有支持缺席、不使用值指定和使用值指定的参数
另一种选择是将其设置为[string]
,但让用户传递$null
,但这种方式很糟糕
另一个非常骇人的选择是对参数位置进行一些欺骗-Help
可能是一个[switch]
,然后可能有另一个参数-ThingHelp
位于它的正后方,它是一个[string]
。然后,一个类似于-Help'foo'
的调用不是将$Help
设置为'foo'
,而是设置$Help
开关,并分配$ThingHelp='foo'
function ParamTest
{
param(
[Parameter(Position = 0)]
[switch]$Help,
[Parameter(Position = 1)]
[string] $ThingHelp
)
"Help is [$help]"
"ThingHelp is [$thingHelp]"
}
这支持以下内容:
PS> ParamTest # $help = $false, $thingHelp = null
PS> ParamTest -Help # $help = $true, $thingHelp = null
PS> ParamTest -Help 'foo' # $help = $true, $thingHelp = 'foo'
像这样的黑客通常不是一个好主意,因为它们往往既脆弱又令人困惑。您应该能够将脚本提供给一般的powershell用户,他们应该立即理解您的参数的含义和用法。如果您必须解释一堆其他数千个cmdlet都没有做过的自定义内容,那么您可能是在浪费每个人的时间
如果你真的在实施某种帮助/使用系统,请停止!Powershell免费提供全面的帮助系统。您可以记录每个参数,给出示例代码等,而无需任何额外的操作。有关详细信息,请参阅文档