【问题标题】:How do I pass common powershell command line parameters between cmdlets on the pipeline?如何在管道上的 cmdlet 之间传递常用的 powershell 命令行参数?
【发布时间】:2011-01-08 08:24:47
【问题描述】:

假设我有两个 cmdlet,“new-foo”和“do-bar”。两个 cmdlet 都需要对服务进行身份验证才能执行它们的操作,并且 'do-bar' 需要一个 foo。今天,我可以做到:

new-foo -host localhost -username user -password password -whateverOtherArgs

我可以做到:

do-bar -host localhost -username user -password password -foo myFoo

我什至可以链接它们在管道上传递 foo,例如:

new-foo <blah blah> | do-bar -host localhost -username user -password password

但我不知道如何传递公共参数,例如服务位置和管道元素之间的凭据。如果我将一堆 cmdlet 链接在一起,我只想在第一次传递凭据,然后在管道的其余部分重新使用这些凭据。

我错过了什么,似乎这应该很明显......

【问题讨论】:

    标签: powershell powershell-2.0 cmdlets cmdlet


    【解决方案1】:

    您是在开发这个 cmdlet,还是只是在脚本中使用它们? 如果您使用任何 OOP 语言编写这些 cmdlet,我认为一种方法是您有一个基本 cmdlet 类,并且所有其他 cmdlet 都应该扩展该基本 cmdlet 类。在这种情况下,基本 cmdlet 类应该初始化一个存储您的凭据的对象,并有一个 cmdlet 来请求凭据,从而初始化该对象。因此,扩展基类的所有其他 cmdlet 都可以在此对象中查找凭据。

    【讨论】:

      【解决方案2】:

      您可以让 New-Foo 吐出一个对象,其中包含 do-bar 感兴趣的原始对象以及服务位置和凭据作为属性。接受此对象作为参数,然后提取您需要的数据如果用户不提供 ServiceLocation 或 Credential 参数。

      【讨论】:

      • 这就是我所做的。或者,如果 do-bar 是由 new-foo 直接调用的辅助函数,您可以使用 Powershell 2.0 的新 splat 运算符——在您自己投影的 psobject 上,或直接在 @args 上。
      • 呃,但如果我无法控制对象类型本身怎么办?我一直试图弄清楚如果从我的 cmdlet 内部调用 add-member(?) 是否可以工作,或者我是否可以动态地将属性添加到对象,比如 python 或 ruby​​,但我是一个 .NET 新手。也许使用 .net4 和动态类型?
      【解决方案3】:

      Get-Credential 是否满足您的需求。

      【讨论】:

      • 我很确定我可以用它来“捆绑”一些身份验证参数,但我仍然需要对管道中的每个命令说 -credential $cred ...
      猜你喜欢
      • 2010-11-12
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多