互斥的powershell参数

2024-03-29

SCENARIO

  • 我正在使用 Visual Studio 2008 和 .NET 3.5 为 Powershell 2.0 编写 cmdlet
  • 该 cmdlet 需要 3 个参数。

我想要的 cmdlet 语法是这样的:

cmdletname [foo|bar] p1, p2
  • 这意味着用户必须为“-foo”或“-bar”提供一个值,但不能同时提供两者。

有效输入示例

cmdletname -foo xxx -p1 hello  -p2 world
cmdletname -bar yyy -p1 hello  -p2 world

无效输入示例

cmdletname -foo xxx -bar yyy -p1 hello  -p2 world

我的问题

  • 我的问题是如何在 powershell 中执行此操作,以便它为我完成所有检查 - 或者如果这可能的话。
  • 我知道我可以只使用 foo 和 bar 的两个可选参数,然后手动进行错误检查。这就是我目前实施的方式。
  • 另外,我对不同方法的建议感兴趣。

您可以使用参数属性 http://msdn.microsoft.com/en-us/library/ms714348(VS.85).aspx声明多个参数集。然后,您只需将互斥的参数分配给不同的参数集即可。

EDIT:

这也记录在“about_Functions_Advanced_Parameters”中的“ParameterSetName 命名参数”部分下。这是使用 cmdlet 处理不同参数集的方式,例如Get-Random(具有互斥参数):

> get-random -input 4 -max 77
Get-Random : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:11
+ get-random <<<<  -input 4 -max 77
    + CategoryInfo          : InvalidArgument: (:) [Get-Random], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.GetRandomCommand

这是在函数中执行此操作的示例:

function exclusive_params() { 
    param( 
        [parameter(ParameterSetName="seta")]$one,
        [parameter(ParameterSetName="setb")]$two, 
        $three 
    )
    "one: $one"; "two: $two"; "three: $three" 
}

参数one and two位于不同的参数集中,因此不能一起指定:

> exclusive_params -one foo -two bar -three third
exclusive_params : Parameter set cannot be resolved using the specified named parameters.
At line:1 char:17
+ exclusive_params <<<<  -one foo -two bar -three third
    + CategoryInfo          : InvalidArgument: (:) [exclusive_params], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,exclusive_params

这与我在 Get-Random 中遇到的错误相同。但我可以独立使用参数:

> exclusive_params -one foo -three third
one: foo
two:
three: third

...or:

> exclusive_params -two bar -three third
one:
two: bar
three: third
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

互斥的powershell参数 的相关文章

随机推荐

  • Firefox 中 Window.getCompulatedStyle 未实现接口 Element 错误

    我想将一些数据附加到 HTML 元素 因此我使用了以下代码 bookListDiv append data HTMLString 一切都正常 但是我想在显示此元素时添加淡入动画 因此我将其修改为 data HTMLString hide a
  • 是否可以对任何文本分类应用 PCA?

    我正在尝试用 python 进行分类 我正在对网页使用朴素贝叶斯多项式NB分类器 将数据从网络检索到文本 稍后我对此文本进行分类 网络分类 现在 我尝试对这些数据应用 PCA 但 python 给出了一些错误 我的朴素贝叶斯分类代码 fro
  • Spark 选择 RDD 中的最高值

    原始数据集是 numbersofrating title avg rating newRDD 3 monster 4 4 minions 3D 5 我想在newRDD中选择前N个avg ratings 我使用以下代码 它有一个错误 sele
  • 模拟对象返回带有 Moq 的模拟列表

    我正在尝试测试以下代码 public void CleanUp List
  • 直接读取程序计数器

    Intel CPU 上的程序计数器可以在内核模式或其他模式下直接读取 即没有 技巧 吗 不 EIP IP 无法直接访问 但在位置相关代码中 它是链接时间常量 因此您可以使用附近 或远处 的符号作为立即数 mov eax nearby lab
  • 使用python(windows)创建两个子进程

    使用Python编程语言完成以下任务 创建两个进程 我们称之为 P1 和 P2 P1应该打印 我是P1 P2应该打印 我是P2 主进程 创建 P1 和 P2 的进程 应该等待它们 然后 P1和P2完成后 主进程应该打印 我是主进程 两个进程
  • 在特定行之后添加行

    我正在尝试将特定行添加到文件中的特定区域 我正在使用这个 new file open file txt r for line in new file if line Include below line line nIncluded tex
  • Find() 与Where().FirstOrDefault()

    我经常看到人们使用Where FirstOrDefault 进行搜索并获取第一个元素 为什么不直接使用Find 对方有优势吗 我看不出有什么不同 namespace LinqFindVsWhere class Program static
  • 使用正则表达式修剪电话号码

    可能是一个简单的正则表达式问题 如何从电话号码中删除除前导 之外的所有非数字 i e 012 3456 gt 0123456 1 234 56789 gt 123456789
  • 为什么模式匹配一​​个单词而有两个相同的单词?

    请看一下这个 如你所见 只有one匹配于regex101 但浏览器匹配two相同的单词 所以为什么regex101无法匹配第二个单词 无论如何我需要匹配这两个词 或更多 如果存在的话 注意到它与以下内容无关g旗帜 因为我在小提琴中使用过它
  • CreateProcessAsUser 和 LogonUser 无密码

    使用 WTSGetActiveConsoleSessionId 和 WTSQueryUserToken 我知道作为 SYSTEM 运行的服务可以在当前桌面上启动应用程序 http blog dcuktec com 2009 05 pytho
  • 防止 Azure B2C 自定义策略中的电子邮件更改

    有没有办法防止密码重置期间更改电子邮件 有密码恢复的标准政策 但我不喜欢在那里更改电子邮件 该电子邮件用作与其他应用程序集成的 ID 密码重置期间更改电子邮件不会更改用户的实际电子邮件 如果用户验证电子邮件但随后意识到这不是他们想要重置密码
  • python 使用 numpy 进行位移

    我正在使用 64 位无符号整数 并在位移后比较该值 然后再解码其余位值 我正在迭代数百万个值并尝试最大程度地减少处理时间 问题是 uint64 和 numpy uint64 都不支持位移位 我试图避免使用 int64 以避免负值 示例数据
  • PHP HTML 净化器和 MathML

    有没有什么简单的方法可以允许所有 MathML 标签在 HTML Purifier 中具有属性 我试图将所有 MathML 标签从https developer mozilla org en US docs Web MathML Eleme
  • 是否有实体框架 7 数据库优先 POCO 生成器?

    我一直在为我正在开发的一个新项目使用 Entity Framework 7 和 ASP NET 5 但遇到了障碍 我所在的团队使用 DBA 优先的开发方法 即数据库由 DBA 设计 然后开发人员更改代码以补偿模型更改 使用 EF6 效果很好
  • 如何使图像高度适合并置文本高度

    我有一个图像和一个并排的文本 图像在左边 文本在右边 关于如何根据文本段落高度 以及宽度与高度保持比例 调整图像高度的任何想法 而不是将文本环绕在图像周围 这是我所能做到的 div style display table width 100
  • Flask jsonify 支持 UTF-8 吗?

    我一直在使用 Flasks 和 jsonify 进行实验 有用 但不支持 utf 8 字符 土耳其字符 我正在使用字典 if api key in key list quotes ataturk Hayatta En Hakiki Murs
  • 如何在启动时完全停止 Android Studio 索引/扫描/构建?

    我怎样才能停止这个索引或任何这个启动过程 它是做什么用的 它为什么这么做 我可以在以后最需要的时候推迟加载这么大的进程吗 我通过无效并重新启动解决了这个问题 我在循环中遇到了这个问题 在没有运行或构建任何东西的情况下不停地索引 文件 gt
  • ModelAttribute 可以是原始的吗?

    我在 Spring MVC 3 0 中的 ModelAttribute 上遇到了一个奇怪的问题 当我在本地主机部署应用程序时 它工作正常 但是当我在远程服务器上部署该应用程序时 每次用户访问特定操作时它都会失败 并出现错误 ERROR my
  • 互斥的powershell参数

    SCENARIO 我正在使用 Visual Studio 2008 和 NET 3 5 为 Powershell 2 0 编写 cmdlet 该 cmdlet 需要 3 个参数 我想要的 cmdlet 语法是这样的 cmdletname f