在this question我们解决了我们的问题,但有一点我还没有学到。
以上帖子中的评论:
我的目标是 - 根据嵌套数组的索引调用每个文件数据,并删除最后三行。所以-
$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
返回System.Array
,而不是System.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
等?
答案 0 :(得分:10)
您可以通过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 *
以获得完整列表)。< / p>
后者主要用于获取有关对象(或类的静态成员,如果使用参数-Static
)的成员(属性和方法)的信息。请注意,如果您需要有关集合对象成员的信息,则必须使用Get-Member -InputObject $col
而不是$col | Get-Member
,因为使用管道会展开集合并且您将获得集合元素的成员而不是集合对象本身的那些。
一旦你知道了一门课程,你通常会在documentation中查找更多信息,例如通过将类或成员名称输入您首选的搜索引擎。
答案 1 :(得分:0)
你可以做的外观类型:
表达式|得到构件
但如果您可以删除最后3行文件,则可以执行此操作:
$yourfile='c:\temp\histo3.txt'
$content=Get-Content $yourfile
$content[0..[Math]::abs($content.Count - 4)] | Set-Content $yourfile
答案 2 :(得分:0)
要获取对象的类型名称:(Get-Service | Get-Member)[0] .TypeName