大家好!
短的问题:
为什么这样做:
(Get-CimClass Win32_Share).CimClassMethods['Create'].Parameters
但这不是:
(Get-CimClass Win32_Share).CimClassMethods.Create.Parameters
同样的结果可以通过:
((Get-CimClass Win32_Share).CimClassMethods|where-object {$_.name -match 'create'}).parameters
使用相同的逻辑,我预计同样适用于:
(Get-command *help*)['get-help']
Or
(Get-command *help*)['cmdlet']
Or
(Get-childitem)['test.txt']
但它没有。这里只有where-object方法是可能的
其他注意事项:
我知道这应该是从哈希表而不是pscustomobject中检索项目的默认方式,但我也想更好地了解我可以在其他地方使用此方法。我在谷歌上搜索了一整天,但什么也没找到。
提前感谢佛朗哥
基于字符串的索引(['Create']
)工作,因为它应用的Microsoft.Management.Infrastructure.Internal.Data.CimMethodDeclarationCollection
类型实现了一个参数化的Item
属性,该属性具有[string]
类型的参数(抽象;验证Get-Member Item -InputObject Get-CimClass Win32_Share).CimClassMethods
):
# {get;} indicates that the property is read-only.
Item ParameterizedProperty <T> Item(string key) {get;}
注意:严格地说,要接受像 类型也是如此。对于具有这种方法的类型,PowerShell,像c#一样,支持语法 通常,这样的类型也实现 至于为什么像下面这样的东西不起作用: (get命令帮助)("寻求帮助") 然而,考虑到PowerShell的成员访问枚举特性,期望 [1]一个['Create']
这样的东西,Item
属性参数是[object]
类型的就足够了,例如,对于非泛型的[hashtable]
['Create']
作为语法糖.Item('Create')
,以及含义是执行一个基于键的项查找.IDictionary
接口(例如,[hasthable]
),但这里不是这样。CimMethodDeclarationCollection
的行为类似于[ordered]
哈希表,因为它支持位置(例如,[0]
)和键基于索引(例如,['Create']
),[1],但有一个关键的区别:IDictionary
实现类型(您必须调用.GetEnumerator()
来实现这一点),而CimMethodDeclarationCollection
-由于没有实现IDictionary
-是枚举,像其他集合一样,如数组;也就是说,它的元素/表项通过管道一个接一个地发送。Get-command *help*
输出多个对象,(...)
自动将这些对象收集成一个常规PowerShell数组,类型为[object[]]
。[object[]]
(基于System.Array
),是否没有必要的参数化属性来支持['get-help']
语法-数组只支持位置索引(例如[0]
指向第一个元素),基于参数为[int]
类型为的参数化Item
属性。,作为IList
接口的一部分实现(抽象;验证Get-Member Item -InputObject @()
):# Note: IList.Item indicates that the property is implemented
# as part of the IList interface.
# {get;set;} indicates that the property is read-write.
Item ParameterizedProperty <T> IList.Item(int index) {get;set;}
['get-help']
应用于数组的单个元素是合理的,因为这就是它如何与.
,成员访问操作符(例如,(Get-Command *help*).Name
)一起工作。
从PowerShell 7.2.4开始,只有.
,而不是["someKey"]
执行这个枚举;这种令人惊讶的不对称是GitHub问题#17514的主题。[int]
类型的键不一定意味着位置语义,但在实现IList
或ICollection
接口(或它们的泛型等价)的上下文中,