如何找到 ArrayList 类具有哪些方法和属性?
我是一名初级系统管理员,正在自学 Powershell。我对编码的了解,就如同狗对时钟的了解一样。
在 Powershell 中,我可以将变量或命令通过管道传输到 cmdlet Get-Member
,这将列出我可以使用的所有方法和属性。
但是,如果我这样做:
$a = New-Object System.Collections.ArrayList
$a | gm
我得到以下信息:
gm : You must specify an object for the Get-Member cmdlet....
我正在阅读 Technet Powershell 每周提示指南,它们展示了几种方法,例如Remove
和RemoveRange
。
如何使用 Powershell 找到与 .NET 类相关的所有方法?这可用吗,还是我需要在其他地方查找?每次我想使用各种方法时,我是否都必须进行 Google 搜索?
我想说的是,教我钓鱼。谢谢。
答案1
这似乎适用于您的情况:
Get-Member -InputObject $a
答案2
来自 Get-Member 帮助:
——当您将对象集合通过管道传输到 Get-Member 时,Get-Member 会获取集合中各个对象的成员,例如字符串数组中每个字符串的属性。
-- 当使用InputObject提交对象集合时,Get-Member获取该集合的成员,例如字符串数组中的数组的属性。
因此,您可以使用以下方法从 ArrayList 对象中获取成员:
,$a | gm
这是因为您向 Get-Member 传递了一个 ArrayList 对象数组(本例中只有一个)。如果您只传递了 ArrayList,Get-Member 将尝试在 ArrayList 的成员上运行,但 ArrayList 为空,因此会出现错误。
当 ArrayList 有一些成员时,这一点更加明显,如下所示:
$a = [System.Collections.ArrayList](1..3)
$a | gm
返回
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)
...
答案3
一些东西:
PowerShell 的数组功能非常棒,无需使用显式的 ArrayList。
$myArray = @()
$myArray += "Sam"
$myArray += "Tom"
或者你可以
$myArray = @("Sam", "Tom", "John")
要删除一个物品,我们也可以做一些有趣的事情。
$myArray = $myArray | ? {$_ -ne "Sam"}
但是,如果您真正想要的是获取方法和属性的列表,则可以使用反射(.NET 类)来提取该信息,如下所示:
[reflection.assembly]::GetAssembly("System.Collections.ArrayList") | Get-Member
或者仅有的方法和类型的名称
[reflection.assembly]::GetAssembly("System.Collections.ArrayList") | Get-Member | Select Name, MemberType
这将让你:
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
或者,正如 @PatrickS. 提到的,有一个 PowerShell 命令可以跳过调用 Reflection 类:
"System.Collections.ArrayList" | Get-Member