有一个PowerShell cmdletInvoke-MgSubscribeGroup
,我想这样调用:
Invoke-MgSubscribeGroup -GroupId da2d17a7-64a5-43e5-9d95-7b70333dd78c
@{ UserId = "ed3d927d-7999-459f-955d-2afc272bd4d4" }
(为了更好的可读性分成多行)
调用它时,我得到一个错误消息:
无法找到接受参数"system . collections . hashtable"的位置形参。
由于我不深入PowerShell,我一定对如何传递哈希表有一些错误的理解,或者我误解了文档中所说的:
…要创建下面描述的参数,构造一个包含适当属性的散列表…
我的问题调用Invoke-MgSubscribeGroup
cmlet并传递用户ID的正确语法是什么?
详细说明自己的答案:
PowerShell的语法图-可通过Invoke-MgSubscribeGroup -?
或Get-Command -Syntax Invoke-MgSubscribeGroup
本地-包含所有相关信息。
也就是说,它们不容易阅读,特别是在本地,未来还有改进的空间。
引用Invoke-MgSubscribeGroup
的文档:
Invoke-MgSubscribeGroup
-GroupId <String>
# ...
Invoke-MgSubscribeGroup
-InputObject <IGroupsIdentity>
# ...
每个(部分)引号代表一个不同的参数集,即参数的唯一组合代表一个不同的特征组。
-GroupId
和-InputObject
在不同的参数集中,并且对每个都是互斥的,这告诉您不能在给定的调用中同时使用(您错误地尝试了这种方式),即它们互斥。 此外,考虑到参数名称按照惯例,命名为
-InputObject
的参数通常用于表示可以通过管道 提供的值,正如参数的描述通常,多个输入对象只能(有意义的)通过管道提供;也就是说,
-InputObject
通常只是一个实现细节,其目的是方便管道输入-参见GitHub issue #4242。GitHub issue #4135建议让语法图直接反映哪些参数接受管道输入。
-GroupId
和-InputObject
不是包含在[...]
中的,这意味着您只能将命名,而不是位置参数传递给它们——也就是说,您必须在参数之前使用参数名称绑定这些参数;例如,-GroupId foo
而不仅仅是foo
。
Accept pipeline input: True
所证明的那样-在本地,您可以使用Get-Help -Full Invoke-MgSubscribeGroup
或-参数-具体来说-使用Get-Help Invoke-MgSubscribeGroup -Parameter InputObject
看到这一点关于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" }
(为了更好的可读性分成多行)
我现在面临权限问题,但这超出了这个问题的范围,因为我只要求正确的语法。