如何称呼"Invoke-MgSubscribeGroup"?



有一个PowerShell cmdletInvoke-MgSubscribeGroup,我想这样调用:

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

(为了更好的可读性分成多行)

调用它时,我得到一个错误消息:

无法找到接受参数"system . collections . hashtable"的位置形参。

由于我不深入PowerShell,我一定对如何传递哈希表有一些错误的理解,或者我误解了文档中所说的:

…要创建下面描述的参数,构造一个包含适当属性的散列表…

我的问题调用Invoke-MgSubscribeGroupcmlet并传递用户ID的正确语法是什么?

详细说明自己的答案:

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

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

引用Invoke-MgSubscribeGroup的文档:

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

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

  • 此外,考虑到参数名称-GroupId-InputObject不是包含在[...]中的,这意味着您只能将命名,而不是位置参数传递给它们——也就是说,您必须在参数之前使用参数名称绑定这些参数;例如,-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)似乎没有自己的文档;它只在"注释"中有描述。部分,接受哈希表(@{ ... }),以及支持的项(键和值类型)的列表。

也就是说:您可以通过管道传递哈希表,如下所示:

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

与传递参数-InputObject相比,这种方法的优点是,它允许您传递多个散列表来执行操作。

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

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

(为了更好的可读性分成多行)

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

最新更新