问题标签 [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.
powershell - 脚本中的参数问题
有人可以在我写的下面告诉我我做错了什么:
我要做的就是让用户选择-DONOTRemovefromdomain
or-Permithttp
甚至-Permithttps
. 用户可以有多种选项可供选择。
当我在下面运行时,我收到一个错误:
此外,如果我没有指定任何内容(所以它应该只是转到参数 NormalHardening),我会得到一个什么都没有返回:
powershell - Powershell 默认参数集不起作用。错误
我正在尝试使用参数集并使用默认参数集。但是默认参数集似乎对我不起作用。任何帮助深表感谢。我可以轻松地使用带有默认操作的验证集,但我想知道我在这里做错了什么。
测试脚本:无法使用指定的命名参数解析参数集。
在 line:1 char:1
+ Test-Script -Source "c:\somedirectory" -DestinationPath "c:\someotherdirectory"
+ ~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-Script], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-Script
function - 参数集 - 如何使默认值起作用?
我正在编写一个更新 *.CSV 文件的函数,该文件将由将更新 DNS 区域的 puppet 脚本拾取。因为我不想破坏真正的.CSV 文件,所以我添加了一个虚拟文件。在开发此功能时,我有三个参数集:Reset
、Add
和Remove
。这些参数将分别用当前规范的 .CSV 文件覆盖我的虚拟文件、添加记录和删除记录。主脚本永远不会在两个或所有三个开关处于活动状态时调用该函数。
以下是我编写脚本参数块的方式:
在脚本的下部,我switch ($psCmdlet.ParameterSetName)
用来处理开关的各种功能。当我做 aGet-Help Update-DNS
时,我看到了预期的输出:
当我调用函数并提供-Reset
参数时,我的脚本会按预期执行,但是如果我在没有任何参数的情况下调用它,我的默认值不会生效,并且点击1
、$true
、true
或Enter键来接受似乎是默认值的内容-Reset
参数的值抛出红色错误消息:
-Reset
如果调用函数的代码不提供任何参数,有没有人建议我如何让我的函数采用开关默认值?
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
。
这一切都给我留下了以下问题:
[string]
为什么 PowerShell 不能根据 a和 a的类型差异来选择参数集[pscustomobject]
?- 原因是 PowerShell 认为 a
[string]
是 a[pscustomobject]
吗?如果是这样,为什么会这样? - 是否有一种解决方法可以让我使用不同的类型来选择不同的参数集?
powershell - 使用参数集来约束多个互斥依赖项
当一个脚本的签名被一个参数(单独地)区分时,参数集对我来说是有意义的。
例子:
我的问题是:当您希望支持并行(或多个)依赖项时,参数集是否是逻辑选择,如下所述?
这是我目前的情况。我正在添加对查询包含时间戳的日志的现有脚本的支持。该脚本应接受 csv 文件或smtp 地址数组,以识别要查询的用户。
该脚本还应支持开始和结束日期参数或整数值,以方便报告从当前日期计算的过去 n 天。
我希望支持的结果是:
如果我不尝试结合我的两个要求,以下两个参数定义中的任何一个都可以正常工作:
Get-Help 将预期使用情况显示为:
如果我改为配置以下内容:
Get-Help 将预期使用情况显示为:
问题是我似乎无法像本文开头所述的那样合并我的依赖项。我使用参数集组合这两个逻辑依赖项的失败尝试之一示例如下:
Get-Help 结果不正确 b/c 前两个用法语句允许同时使用 LastNumDays 和 Start/EndDate 参数:
我已经测试了强制真/假的不同组合,包括/省略了我的命名参数集,但没有成功。
我现在怀疑我的要求可能不适合用于支持的用例参数集,但我想知道我应该使用什么模式和实践。
如果不使用参数集,如何正确定义这两个依赖项的使用语法?我觉得我必须避免在我的代码中使用测试来宣布未在 Get-Help 中定义的依赖项。
谢谢!
powershell - Powershell 参数集和可选参数
我正在编写一个函数,其中两个参数应该是独占的和可选的。
以下是有效输入:
这是一个无效的输入:
到目前为止,这是我的代码:
这是我打电话时得到的Get-Help
:
但是,当我尝试仅使用两个强制参数调用函数时,出现以下错误:
我在这里遗漏了一些东西,但我不知道是什么......
如何获得两个互斥且可选的参数?
powershell - 参数 - 需要一些但不是其他 - 正确使用参数集
所以我正在尝试使用 PowerShell 并且在理解参数时遇到了一些麻烦。从我读到的内容来看,如果我将一个参数指定为与另一个参数相同的位置,但将其放在单独的 ParameterSet 中,PowerShell 将只需要存在这些参数之一。
在此示例中按预期工作 -
但是,如果我想对此进行扩展,那么如上所述,您必须指定一个令牌,然后您必须指定一个用户名或一个用户名文件,但现在我想指定一个用户将加入的组。
现在让我们假设用户必须进入两个组之一,我不想担心处理用户输入组名的不同方式,所以我使用两个开关。我只希望用户在一个组中而不是两个组中,因此开关应该在相同的位置但在不同的参数集中(基于我读过的内容并且上面的示例有效)。
所以我的第二个例子看起来像这样 -
但是,这并没有按预期工作,这给了我一个错误-
有人可以解释为什么这不起作用并纠正我对 PowerShell 参数的理解吗?
谢谢!
powershell - PowerShell 无法确定正在使用的参数集
我有一个带有四个参数的函数,其中两个可以设置或不设置。我正在尝试使用参数集来识别已设置的参数,但我遇到了参数集解析的一些问题。这些是四个可能的参数集 -
- 既不是ErrorObject 也不是SplunkData
- ErrorObject 和 SplunkData
- 只有错误对象
- 只有SplunkData
当我使用下面的示例代码测试所有四个参数集时,只有一个错误对象和只有一些 Splunk 数据的测试都失败并出现以下错误 -
Test-ParameterSets :无法使用指定的命名参数解析参数集。
根据我的研究,这似乎失败了,因为 PowerSehll 无法确定 Parameter Set 应该是BothErrorObjectAndSplunkData
还是OnlyErrorObject
/ OnlySplunkData
,我可以理解。
如何更改我的代码以确定使用上述哪些参数集?如果参数集根本不可能,我还能如何实现我的目标?
示例代码
示例代码输出
既不是错误对象也不是 Splunk 数据 -
-- 参数集:NeitherErrorObjectOrSplunkDataTest-ParameterSets :无法使用指定的命名参数解析参数集。
在 line:31 char:1
+ Test-ParameterSets -Message "Only an error object" -ErrorObject (New- ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-ParameterSets], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Test-ParameterSetsTest-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
powershell - 有没有办法定义一个无参数的powershell参数集?
我为库模块编写了一些相当复杂的函数,可以通过多种不同的方式调用它。但是,实际上可以将它们全部默认,但是当我尝试不带参数调用我的函数时,调用失败,因为无法确定参数集。
我想定义一个不包含任何参数的参数集,这样不带参数的调用就会成功。这很难做到,因为 ParameterSetName 是 Parameter 属性的一个属性,并且不可能没有任何属性。
我尝试了放置在 param 块上的 CmdletBinding 属性的 DefaultParameterSet 属性,但似乎没有任何效果。似乎在那里定义的参数集名称必须实际存在,以便 Powershell 默认使用它。
目前,我对这个用例的最佳近似是定义其中一个参数集没有强制参数,但是当输入空字符串或空值时,这些参数集会失败,我希望不会出现这种情况。
这可能吗?
powershell - 如何隐藏 PowerShell 参数集?
假设您有旧的、已弃用的参数集和一个新的参数集:
我希望两个参数集继续工作,以保持与现有脚本的兼容性,但我不希望旧的不推荐使用的参数集出现在Get-Help
输出中。或者,至少,在 的SYNTAX
部分中明确标记为已弃用Get-Help
。
PowerShell 4.0 中的参数属性的DontShow
属性有点帮助,因为那时 IntelliSense/tab 补全不会使用它,但参数集仍然出现在Get-Help
输出中。
我们目前使用的是 PowerShell 3.0,但我不认为更新我们的目标 PowerShell 版本会成为障碍。