如何调用"Invoke-MgSubscribeGroup"?

How to call "Invoke-MgSubscribeGroup"?

有一个 PowerShell cmdlet Invoke-MgSubscribeGroup 我想这样调用:

Invoke-MgSubscribeGroup -GroupId da2d17a7-64a5-43e5-9d95-7b70333dd78c 
                        @{ UserId = "ed3d927d-7999-459f-955d-2afc272bd4d4" }

(分成多行以提高可读性)

调用它时,我收到错误消息:

A positional parameter cannot be found that accepts argument "System.Collections.Hashtable".

因为我没有深​​入了解 PowerShell,所以我一定对如何传递哈希表有一些错误的理解,或者我误解了 the documentation 说:

...To create the parameters described below, construct a hash table containing the appropriate properties...

我的问题

调用 Invoke-MgSubscribeGroup cmdlet 并传递用户 ID 的正确语法是什么?

在进一步调查和反复阅读文档后,我找到了正确的语法:

Invoke-MgSubscribeGroup -InputObject @{ 
    UserId = "ed3d927d-7999-459f-955d-2afc272bd4d4"; 
    GroupId = "da2d17a7-64a5-43e5-9d95-7b70333dd78c" }

(分成多行以提高可读性)

我现在面临权限问题,但这超出了这个问题的范围,因为我只要求提供正确的语法。

详细说明

PowerShell 的 syntax diagrams - 通过 Invoke-MgSubscribeGroup -?Get-Command -Syntax Invoke-MgSubscribeGroup 在本地可用 - 包含所有相关信息。

尽管如此,它们并不容易阅读,尤其是在本地,并且还有未来改进的空间。

引用自Invoke-MgSubscribeGroup's documentation

Invoke-MgSubscribeGroup
      -GroupId <String>
      # ...
Invoke-MgSubscribeGroup
      -InputObject <IGroupsIdentity>
      # ...
  • 每个(部分)引用代表一个不同的 parameter set,即代表不同特征组的参数的唯一组合。

  • -GroupId-InputObject 不同的 参数集中 排他性 对于每个,告诉您不能在给定的调用中同时使用它们 both(它们是您错误尝试的方式),即它们是 互斥的 .

  • 此外,假设参数 names -GroupId-InputObjectnot包含在 [...] 中意味着您只能将 named,而不是 positional 参数传递给它们 - 也就是说,您必须在参数之前使用参数名称 绑定到这些参数 ;例如,-GroupId foo 而不仅仅是 foo.

  • 按照惯例,名为 -InputObject 的参数通常用于表示可以通过管道 提供的值,如参数的说明说明 Accept pipeline input: True - 在本地,您可以使用 Get-Help -Full Invoke-MgSubscribeGroup 或 - 具体参数 - 使用 Get-Help Invoke-MgSubscribeGroup -Parameter InputObject

    来查看
    • 通常,多个输入对象可以(有意义地)通过管道提供;也就是说,-InputObject 通常只是一个 实现细节 ,其目的是促进 管道输入 - 请参阅 GitHub issue #4242

    • GitHub issue #4135建议制作语法图直接反映哪些参数接受管道输入。

关于 Invoke-MgSubscribeGroup 的文档,具体来说(这似乎非常稀疏):

  • 帮助主题包含无示例(您通常可以在本地使用Get-Help -Examples Invoke-MgSubscribeGroup请求)

  • -InputObject参数的数据类型,<IGroupsIdentity>(Microsoft.Graph.PowerShell.Models.IGroupsIdentity)好像没有自己的文档;它仅在帮助主题的“注释”部分中描述为接受 hashtable (@{ ... }),以及支持的条目列表(键和值类型)。

综上所述:您可以通过管道传递哈希表,如下所示:

@{ 
  UserId = 'ed3d927d-7999-459f-955d-2afc272bd4d4'
  GroupId = 'da2d17a7-64a5-43e5-9d95-7b70333dd78c'
} | Invoke-MgSubscribeGroup

与将 参数 传递给 -InputObject 相比,这种方法的优势在于它允许您传递 多个 哈希表采取行动。