Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在powershell中使用别名清空参数_Powershell_Alias - Fatal编程技术网

在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免费提供全面的帮助系统。您可以记录每个参数,给出示例代码等,而无需任何额外的操作。有关详细信息,请参阅文档