如何解决 PowerShell 在调用 BeginProcessing 之前不绑定管道参数的问题?

StackOverflow https://stackoverflow.com/questions/1303282

  •  19-09-2019
  •  | 
  •  

我正在编写一个可以在管道中间调用的 Cmdlet。对于此 Cmdlet,有一些参数具有 来自管道的值按属性名称 定义属性,以便 Cmdlet 可以使用与管道中先前定义的名称相同的参数。

我遇到的悖论在于被重写 开始处理() 方法中,我利用可以从管道获取其值绑定的参数之一。根据 Cmdlet 处理生命周期, ,管道参数的绑定不会发生,直到 开始处理() 叫做。因此,如果管道绑定参数试图用于以下情况,我似乎无法依赖它们 开始处理().

我考虑过把东西搬到 进程记录() 方法。不幸的是,需要进行一项相对昂贵的一次性操作。发生这种情况的最佳地点似乎是 开始处理() 方法来帮助确保它只在管道中发生一次。

A 几个问题 围绕这个的问题:

  1. 有没有 好的 绕过这个?
  2. 这些相同的参数也有 强制的 对它们设置属性。我怎样才能做到这一点而不让 PowerShell 抱怨没有这些必需的参数呢?

预先感谢您的想法。


更新

我拿出了问题的第二部分,因为我意识到我对管道绑定参数的理解不够好。我错误地认为管道绑定参数来自 以前的 命令行工具 在管道中执行的。实际上来自于 目的 正在通过管道传递!我参考了一个 基思·希尔发表的文章 帮助理解这一点。

有帮助吗?

解决方案

您可以在 BeginProcessing 中将实例字段 bool (Init) 设置为 false。然后检查BeginProcessing中是否设置了该参数。如果是,则调用执行一次性初始化的方法 (InitMe)。在 ProcessRecord 中检查 Init 的值,如果为 false,则调用 InitMe。InitMe 应在返回之前将 Init 设置为 true。

关于第二个问题,如果您已将该参数标记为强制参数,则必须将其作为参数或通过管道提供。您是否使用多个参数集?如果是这样,那么即使某个参数被标记为强制参数,只有当关联的参数集是 PowerShell 确定用于 cmdlet 的特定调用的参数集时,该参数才是强制的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top