确定对象类型

时间:2017-01-15 07:17:29

标签: powershell object-type

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等?

3 个答案:

答案 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