我有一个功能
getinfo([string]$subcommand, [string]$argument)
我想做的是让参数值为'-h'或'-help',以便
getinfo hosts -h
将为子命令“hosts”提供帮助文本。不幸的是,当我指定-h时,我认为它不会将“-h”的值赋给$参数,而是创建一个新参数。
我在考虑使用switch参数,但我不确定我是否可以在函数中使用它与上面的$ argument一起使用。
这可能吗?
答案 0 :(得分:5)
退一步,你试图在PowerShell上强制命令范例,这不是我称之为惯用的PowerShell。为什么不用自己的帮助创建几个函数,例如Get-HostInfo,Get-FooInfo等。然后您可以使用PowerShell的内置文档支持,例如:
<#
.SYNOPSIS
Short description
.DESCRIPTION
Long description
.PARAMETER Host
Name of the host.
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
#>
function Get-HostInfo($host) { ... }
这支持PowerShell用户期望的所有方式的帮助:
man Get-HostInfo
man Get-HostInfo -Example
man Get-HostInfo -Parameter Host
Get-HostInfo -?
答案 1 :(得分:0)
我这样做:
getinfo([string]$subcommand, [switch][alias("h")]$Help) {
switch ($subcommand) {
'hosts' {
if ($Help) { 'Usage: getinfo hosts ...'; return }
...
}
...
}
}
所有与参数不匹配的参数都会自动存储在变量$args
中,因此您并不需要参数$argument
。它具有优势(或缺点,取决于您的观点),它甚至接受PowerShell将其解释为参数的参数。例如:
PS C:\> function getinfo($subcommand, [switch]$Help, $argument) {
>> if ($Help) { 'help' }
>> $argument
>> }
>>
PS C:\> getinfo 'a' 'b'
b
PS C:\> getinfo 'a' -x
PS C:\> getinfo 'a' 'b' -h
help
b
PS C:\> getinfo 'a' -x -h
help
PS C:\> function getinfo($subcommand, [switch]$Help) {
>> if ($Help) { 'help' }
>> $args[0]
>> }
>>
PS C:\> getinfo 'a' 'b'
b
PS C:\> getinfo 'a' -x
-x
PS C:\> getinfo 'a' 'b' -h
help
b
PS C:\> getinfo 'a' -x -h
help
-x