【问题标题】:How to call "Invoke-MgSubscribeGroup"?如何调用“Invoke-MgSubscribeGroup”?
【发布时间】:2021-09-25 22:48:45
【问题描述】:

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

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

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

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

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

由于我对 PowerShell 的了解并不那么,因此我一定对如何传递哈希表有一些错误的理解,或者我误解了 the documentation 所说的:

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

我的问题

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

【问题讨论】:

  • 正在喷你想要的东西吗? $MyVar = @{ GroupId = 'da2d17a7-64a5-43e5-9d95-7b70333dd78c' }; Invoke-MgSubscribeGroup @MyVar.

标签: powershell microsoft-graph-api office365 powershell-cmdlet


【解决方案1】:

详述your own answer:

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 位于不同 参数集中,并且对于每个参数集专有,这告诉您不能同时使用它们两者 在给定的调用中(您错误地尝试了它们),即它们是互斥的。

  • 另外,鉴于参数names -GroupId 和-InputObject not 包含在[...] 中意味着您只能通过 named em>,而不是它们的 位置 参数 - 也就是说,您必须在参数之前使用参数名称绑定到这些参数 ;例如,-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参数的数据类型&lt;IGroupsIdentity&gt;(Microsoft.Graph.PowerShell.Models.IGroupsIdentity)好像没有自己的文档;它仅在帮助主题的“注释”部分中描述为接受 hashtable (@{ ... }),以及支持的条目列表(键和值类型)。

说了这么多:您可以通过管道传递您的哈希表,如下所示:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 2011-05-02
      • 2021-06-06
      • 2017-09-23
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多