问题标签 [parameter-sets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
33 浏览

powershell - 脚本中的参数问题

有人可以在我写的下面告诉我我做错了什么:

我要做的就是让用户选择-DONOTRemovefromdomainor-Permithttp甚至-Permithttps. 用户可以有多种选项可供选择。

当我在下面运行时,我收到一个错误:

此外,如果我没有指定任何内容(所以它应该只是转到参数 NormalHardening),我会得到一个什么都没有返回:

0 投票
1 回答
2700 浏览

powershell - Powershell 默认参数集不起作用。错误

我正在尝试使用参数集并使用默认参数集。但是默认参数集似乎对我不起作用。任何帮助深表感谢。我可以轻松地使用带有默认操作的验证集,但我想知道我在这里做错了什么。

如下图所示的错误

测试脚本:无法使用指定的命名参数解析参数集。
在 line:1 char:1
+ Test-Script -Source "c:\somedirectory" -DestinationPath "c:\someotherdirectory"
+ ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-Script], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-Script

0 投票
1 回答
366 浏览

function - 参数集 - 如何使默认值起作用?

我正在编写一个更新 *.CSV 文件的函数,该文件将由将更新 DNS 区域的 puppet 脚本拾取。因为我不想破坏真正的.CSV 文件,所以我添加了一个虚拟文件。在开发此功能时,我有三个参数集:ResetAddRemove。这些参数将分别用当前规范的 .CSV 文件覆盖我的虚拟文件、添加记录和删除记​​录。主脚本永远不会在两个或所有三个开关处于活动状态时调用该函数。

以下是我编写脚本参数块的方式:

在脚本的下部,我switch ($psCmdlet.ParameterSetName)用来处理开关的各种功能。当我做 aGet-Help Update-DNS时,我看到了预期的输出:

当我调用函数并提供-Reset参数时,我的脚本会按预期执行,但是如果我在没有任何参数的情况下调用它,我的默认值不会生效,并且点击1$truetrueEnter键来接受似乎是默认值的内容-Reset参数的值抛出红色错误消息:

-Reset如果调用函数的代码不提供任何参数,有没有人建议我如何让我的函数采用开关默认值?

0 投票
1 回答
275 浏览

powershell - 为什么不能基于 [string] vs [hashtable] vs [pscustomobject] 解析参数集?

考虑这个函数:

管道[pscustomobject]的行为符合我的预期:

但是,管道[string]会引发异常:

也是如此[hashtable]

添加DefaultParameterSetName='hastable'原因[hashtable]但无法[string]正确解决。

我在解释Trace-Command 的输出方面没有经验。我确实注意到输出[string]包括这一行:

BIND arg [string] 到参数 [PsCustomObject] SUCCESSFUL

这似乎 PowerShell 正在考虑[string]成为一个[PsCustomObject]. 但'string' -is [pscustomobject]评估为$false

这一切都给我留下了以下问题:

  1. [string]为什么 PowerShell 不能根据 a和 a的类型差异来选择参数集[pscustomobject]
  2. 原因是 PowerShell 认为 a[string]是 a[pscustomobject]吗?如果是这样,为什么会这样?
  3. 是否有一种解决方法可以让我使用不同的类型来选择不同的参数集?
0 投票
1 回答
78 浏览

powershell - 使用参数集来约束多个互斥依赖项

当一个脚本的签名被一个参数(单独地)区分时,参数集对我来说是有意义的。

例子:

我的问题是:当您希望支持并行(或多个)依赖项时,参数集是否是逻辑选择,如下所述?

这是我目前的情况。我正在添加对查询包含时间戳的日志的现有脚本的支持。该脚本应接受 csv 文件smtp 地址数组,以识别要查询的用户。

该脚本还应支持开始和结束日期参数整数值,以方便报告从当前日期计算的过去 n 天。

我希望支持的结果是:

如果我不尝试结合我的两个要求,以下两个参数定义中的任何一个都可以正常工作:

Get-Help 将预期使用情况显示为:

如果我改为配置以下内容:

Get-Help 将预期使用情况显示为:

问题是我似乎无法像本文开头所述的那样合并我的依赖项。我使用参数集组合这两个逻辑依赖项的失败尝试之一示例如下:

Get-Help 结果不正确 b/c 前两个用法语句允许同时使用 LastNumDays 和 Start/EndDate 参数:

我已经测试了强制真/假的不同组合,包括/省略了我的命名参数集,但没有成功。

我现在怀疑我的要求可能不适合用于支持的用例参数集,但我想知道我应该使用什么模式和实践。

如果不使用参数集,如何正确定义这两个依赖项的使用语法?我觉得我必须避免在我的代码中使用测试来宣布未在 Get-Help 中定义的依赖项。

谢谢!

0 投票
1 回答
2890 浏览

powershell - Powershell 参数集和可选参数

我正在编写一个函数,其中两个参数应该是独占的可选的。

以下是有效输入:

这是一个无效的输入:

到目前为止,这是我的代码:

这是我打电话时得到的Get-Help

但是,当我尝试仅使用两个强制参数调用函数时,出现以下错误:

我在这里遗漏了一些东西,但我不知道是什么......

如何获得两个互斥且可选的参数?

0 投票
2 回答
1380 浏览

powershell - 参数 - 需要一些但不是其他 - 正确使用参数集

所以我正在尝试使用 PowerShell 并且在理解参数时遇到了一些麻烦。从我读到的内容来看,如果我将一个参数指定为与另一个参数相同的位置,但将其放在单独的 ParameterSet 中,PowerShell 将只需要存在这些参数之一。

在此示例中按预期工作 -

但是,如果我想对此进行扩展,那么如上所述,您必须指定一个令牌,然后您必须指定一个用户名一个用户名文件,但现在我想指定一个用户将加入的组。

现在让我们假设用户必须进入两个组之一,我不想担心处理用户输入组名的不同方式,所以我使用两个开关。我只希望用户在一个组中而不是两个组中,因此开关应该在相同的位置但在不同的参数集中(基于我读过的内容并且上面的示例有效)。

所以我的第二个例子看起来像这样 -

但是,这并没有按预期工作,这给了我一个错误-

找不到新参数

有人可以解释为什么这不起作用并纠正我对 PowerShell 参数的理解吗?

谢谢!

0 投票
1 回答
2346 浏览

powershell - PowerShell 无法确定正在使用的参数集

我有一个带有四个参数的函数,其中两个可以设置或不设置。我正在尝试使用参数集来识别已设置的参数,但我遇到了参数集解析的一些问题。这些是四个可能的参数集 -

  • 既不是ErrorObject 也不是SplunkData
  • ErrorObject 和 SplunkData
  • 只有错误对象
  • 只有SplunkData

当我使用下面的示例代码测试所有四个参数集时,只有一个错误对象只有一些 Splunk 数据的测试都失败并出现以下错误 -

Test-ParameterSets :无法使用指定的命名参数解析参数集。

根据我的研究,这似乎失败了,因为 PowerSehll 无法确定 Parameter Set 应该是BothErrorObjectAndSplunkData还是OnlyErrorObject/ OnlySplunkData,我可以理解。

如何更改我的代码以确定使用上述哪些参数集?如果参数集根本不可能,我还能如何实现我的目标?


示例代码


示例代码输出

既不是错误对象也不是 Splunk 数据 -
-- 参数集:NeitherErrorObjectOrSplunkData

Test-ParameterSets :无法使用指定的命名参数解析参数集。
在 line:31 char:1
+ Test-ParameterSets -Message "Only an error object" -ErrorObject (New- ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-ParameterSets], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-ParameterSets

Test-ParameterSets :无法使用指定的命名参数解析参数集。
在 line:32 char:1
+ Test-ParameterSets -Message "Only some Splunk data" -SplunkData "Test ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument : (:) [Test-ParameterSets], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-ParameterSets

错误对象和 Splunk 数据 -
-- 参数集:BothErrorObjectAndSplunkData

0 投票
1 回答
1230 浏览

powershell - 有没有办法定义一个无参数的powershell参数集?

我为库模块编写了一些相当复杂的函数,可以通过多种不同的方式调用它。但是,实际上可以将它们全部默认,但是当我尝试不带参数调用我的函数时,调用失败,因为无法确定参数集。

我想定义一个不包含任何参数的参数集,这样不带参数的调用就会成功。这很难做到,因为 ParameterSetName 是 Parameter 属性的一个属性,并且不可能没有任何属性。

我尝试了放置在 param 块上的 CmdletBinding 属性的 DefaultParameterSet 属性,但似乎没有任何效果。似乎在那里定义的参数集名称必须实际存在,以便 Powershell 默认使用它。

目前,我对这个用例的最佳近似是定义其中一个参数集没有强制参数,但是当输入空字符串或空值时,这些参数集会失败,我希望不会出现这种情况。

这可能吗?

0 投票
1 回答
370 浏览

powershell - 如何隐藏 PowerShell 参数集?

假设您有旧的、已弃用的参数集和一个新的参数集:

我希望两个参数集继续工作,以保持与现有脚本的兼容性,但我不希望旧的不推荐使用的参数集出现在Get-Help输出中。或者,至少,在 的SYNTAX部分中明确标记为已弃用Get-Help

PowerShell 4.0 中的参数属性的DontShow属性有点帮助,因为那时 IntelliSense/tab 补全不会使用它,但参数集仍然出现在Get-Help输出中。

我们目前使用的是 PowerShell 3.0,但我不认为更新我们的目标 PowerShell 版本会成为障碍。