Isso parece funcionar para o seu caso:
Get-Member -InputObject $a
Referência: link
Como posso encontrar quais métodos e propriedades a classe ArrayList possui?
Eu sou um administrador júnior, me ensinando o Powershell. Eu sei sobre codificação, o que um cão sabe sobre um relógio.
No Powershell, posso canalizar uma variável ou um comando para o cmdlet Get-Member
, e isso listará todos os métodos e propriedades disponíveis para mim.
No entanto, se eu fizer isso: $a = New-Object System.Collections.ArrayList
e $a | gm
Eu recebo o seguinte:
gm : You must specify an object for the Get-Member cmdlet....
Estou passando pela dica Technet Powershell dos guias semanais e eles mostram alguns métodos, como Remove
e RemoveRange
.
Como posso encontrar todos os métodos associados a uma classe .NET, com o Powershell? Isso está disponível ou preciso procurar em outro lugar? Eu teria que fazer uma pesquisa no Google, toda vez que eu quisesse usar os vários métodos?
Eu acho que estou dizendo, me ensine a pescar. Obrigado.
Da ajuda do Get-Member:
-- When you pipe a collection of objects to Get-Member, Get-Member gets the members of the individual objects in the collection, such as the properties of each string in an array of strings.
-- When you use InputObject to submit a collection of objects, Get-Member gets the members of the collection, such as the properties of the array in an array of strings.
Assim, você pode usar o seguinte para obter os membros do seu objeto ArrayList:
,$a | gm
Isso funciona porque você está passando Get-Member uma matriz de objetos ArrayList (somente um neste caso). Se você acabou de passar o ArrayList, Get-Member tentará executar nos membros do ArrayList, que está vazio, assim o erro.
Isto é um pouco mais óbvio quando o ArrayList tem alguns membros, como no seguinte:
$a = [System.Collections.ArrayList](1..3)
$a | gm
que retorna
TypeName: System.Int32
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(Syste...
Equals Method bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
...
Algumas coisas:
O PowerShell é bastante impressionante com ares fora da caixa, sem usar a ArrayList explícita.
$myArray = @()
$myArray += "Sam"
$myArray += "Tom"
Ou você pode fazer
$myArray = @("Sam", "Tom", "John")
Para remover um item, podemos fazer algumas coisas divertidas também.
$myArray = $myArray | ? {$_ -ne "Sam"}
Mas, se tudo o que você realmente quer é obter uma lista dos métodos e propriedades, você pode usar a reflexão (classe A .NET) para extrair essa informação, assim:
[reflection.assembly]::GetAssembly("System.Collections.ArrayList") | Get-Member
Ou apenas os nomes dos métodos e tipos
[reflection.assembly]::GetAssembly("System.Collections.ArrayList") | Get-Member | Select Name, MemberType
Isso vai te ajudar:
Name MemberType
---- ----------
ModuleResolve Event
CreateInstance Method
Equals Method
GetCustomAttributes Method
GetCustomAttributesData Method
GetExportedTypes Method
GetFile Method
GetFiles Method
GetHashCode Method
GetInterface Method
GetLoadedModules Method
GetManifestResourceInfo Method
GetManifestResourceNames Method
GetManifestResourceStreamMethod
GetModule Method
GetModules Method
GetName Method
GetObjectData Method
GetReferencedAssemblies Method
GetSatelliteAssembly Method
GetType Method
GetTypes Method
IsDefined Method
LoadModule Method
ToString Method
CodeBase Property
EntryPoint Property
EscapedCodeBase Property
Evidence Property
FullName Property
GlobalAssemblyCache Property
HostContext Property
ImageRuntimeVersion Property
IsDynamic Property
IsFullyTrusted Property
Location Property
ManifestModule Property
PermissionSet Property
ReflectionOnly Property
SecurityRuleSet Property
Ou como @PatrickS. mencionado, há um comando do PowerShell para pular a chamada da classe Reflection:
"System.Collections.ArrayList" | Get-Member
Tags powershell .net-framework