在这个问题中我们解决了我们的问题,但有一点我还没有学到.
以下帖子中的评论如下:
我的目标是 - 根据嵌套数组的索引调用每个文件数据并删除最后三行.所以 -
$array = New-Object Sytem.Collections.Arraylist; Get-ChildItem C:\...\test | ForEach-Object { $array += ,@(Get-Content $_.FullName) }; $array[0].removerange($array[0].count-2,2)
但它会抛出错误,即无法识别removerange.我检查了 -$array[0] | gm
并且删除范围的方法确实不存在.只需删除并删除.怎么办? - iamsmith41 1月11日22:14@ iamsmith41
Get-Content
返回aSystem.Array
,而不是aSystem.Collections.ArrayList
.前者没有RemoveRange()
方法.另外,请不要移动目标.如果其中一个答案解决了您当前问题中描述的问题:请考虑接受该答案.如果您有新的或后续问题:请发布一个新问题. - Ansgar Wiechers 1月11日23:33好.我标记了答案.但是,让我知道如何完成它(removerange()方法).提前致谢. - iamsmith41 2天前
$array += ,[Collections.ArrayList]@(Get-Content $_.FullName)
应该足够了.如果您需要进一步的帮助,请发布一个新问题. - Ansgar Wiechers 2天前
如何知道我必须使用的上述对象类型Collections.ArrayList
等等?怎么知道这是一个System.Array
而不是System.Collections.ArrayList
等等?
您可以通过其GetType()
方法确定对象的类型:
PS C:\> (Get-Item '.').GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True DirectoryInfo System.IO.FileSystemInfo PS C:\> (Get-Item '.').GetType().FullName System.IO.DirectoryInfo
或者使用Get-Member
cmdlet:
PS C:\> Get-Item '.' | Get-Member TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- Mode CodeProperty System.String Mode{get=Mode;} Create Method void Create(), void Create(System.Securi... CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObj... CreateSubdirectory Method System.IO.DirectoryInfo CreateSubdirecto... ...
前者提供关于对象的元信息,如它的名称,基本类型,其装配其从等.(管的输出GetType()
成Format-List *
以得到一个完整的列表).
后者主要用于获取有关对象(或类的静态成员,如果使用参数-Static
)的成员(属性和方法)的信息.请注意,如果你想了解一个集合的成员信息对象,你必须使用Get-Member -InputObject $col
,而不是仅仅$col | Get-Member
因为使用管道将展开收集,你会得到的集合元素,而不是那些集合对象本身的成员.
一旦你知道了一个课程,你通常会在文档中查找更多信息,例如通过将一个班级或成员名称输入你喜欢的搜索引擎.