首页 > 解决方案 > 如何调用“Invoke-MgSubscribeGroup”?

问题描述

我想以这种方式调用一个 PowerShell cmdlet :Invoke-MgSubscribeGroup

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

(拆分为多行以提高可读性)

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

找不到接受参数“System.Collections.Hashtable”的位置参数。

由于我对PowerShell 的了解并不深入,因此我必须对如何传递哈希表有一些错误的理解,或者我误解了文档中的内容:

...要创建下面描述的参数,请构建一个包含适当属性的哈希表...

我的问题

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

标签: powershellmicrosoft-graph-apioffice365cmdlet

解决方案


要详细说明您自己的答案

PowerShell 的语法图- 通过Invoke-MgSubscribeGroup -?或本地可用Get-Command -Syntax Invoke-MgSubscribeGroup- 包含所有相关信息。

也就是说,它们不容易阅读,尤其是在本地,而且还有未来改进的空间。

引用Invoke-MgSubscribeGroup的文档

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

  • -GroupId并且在不同-InputObject的参数集中并且对每个参数集都是专有的,告诉您不能在给定的调用中同时使用它们(它们是您错误地尝试的方式),即它们是互斥的

  • 此外,鉴于参数名称 -GroupId-InputObject未包含在意味着您只能将命名参数传递给它们,不是位置参数 - 也就是说,您必须在参数之前使用参数名称绑定到这些参数;例如,而不仅仅是.[...]-GroupId foofoo

  • 按照惯例,一个名为的参数-InputObject通常用于表示可以通过管道提供的值,正如参数的描述所证明的那样Accept pipeline input: True- 在本地,您可以使用Get-Help -Full Invoke-MgSubscribeGroupor - parameter-specifically - withGet-Help Invoke-MgSubscribeGroup -Parameter InputObject

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

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

关于 's 的文档的复杂问题Invoke-MgSubscribeGroup,特别是(通常看起来非常稀疏):

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

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

所有这一切:您可以通过管道传递您的哈希表,如下所示:

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

与传递参数相比,这种方法的优势-InputObject在于它允许您传递多个哈希表以进行操作。


推荐阅读