我想循环一个静态类的属性。
[EnvDTE.Constants] | get-member -static | where-object {$_.MemberType -eq "Property" -and $_.Name -like 'vsP*'}
而不是去手动输入名称,如:
[EnvDTE.Constants]::vsProjectItemKindMisc
尝试:
| Select-Object {$_.Value}
| Select-Object {$([EnvDTE.Constants]::$_.Name)}
| Invoke-Expression "[EnvDTE.Constants]::$_.Name"
答案 0 :(得分:3)
首先,过滤器离开(这里它可能没有太大变化,但它的好习惯):
[EnvDTE.Constants] | Get-Member -Static -MemberType Property -Name vsP*
你有MemberDefinition
个对象:
| Foreach-Object { [EnvDTE.Constants]::"$($_.Name)" }
如果您在那里使用子表达式,那么您的最后一次尝试是可行的(尽管我建议不要使用它,但只有在必要时才应使用Invoke-Expression
。)
答案 1 :(得分:1)
您可以使用.NET BCL路线:
[EnvDTE.Constants].UnderlyingSystemType.GetFields('Static,Public').Where({$_.Name -match 'vsP*'}).Foreach({$_.Name + " = " + $_.GetValue($null)})
或许还有一点PowerShelly:
[EnvDTE.Constants].UnderlyingSystemType.GetFields('Static,Public') |
Where Name -match vsP* | Foreach {$_.Name + " = " + $_.GetValue($null)}
或者:
[EnvDTE.Constants] | gm -static -MemberType Property -Name vsP* |
Foreach { invoke-expression "'$($_.Name) = ' + [$($_.TypeName)]::$($_.Name)" }
答案 2 :(得分:0)
您提供的第一个示例是正确的,但似乎不适用于该命名空间。这两项工作都是:
[system.math] | Get-Member
[system.net.webrequest] | Get-Member
如果您有dll文件,可以load it manually。