2017-01-15 4 views
1

In this question haben wir unser Problem gelöst, aber es gab einen Punkt, den ich noch nicht gelernt habe.Ermitteln des Objekttyps

Unten Kommentare im obigen Beitrag:

Mein Ziel ist es - jeder Datei Daten basierend auf Indizierung von verschachtelten Array aufrufen und letzten drei Zeilen entfernen. So- $array = New-Object Sytem.Collections.Arraylist; Get-ChildItem C:\...\test | ForEach-Object { $array += ,@(Get-Content $_.FullName) }; $array[0].removerange($array[0].count-2,2) Aber es wirft Fehler, dass Entfernungsbereich nicht erkannt wird. Ich habe überprüft - $array[0] | gm und removeRange-Methode war in der Tat nicht da. Einfach entfernen und entfernen. Wie gehe ich vor? - iamsmith41 11. Januar bei 22:14

@ iamsmith41 Get-Content gibt ein System.Array, kein System.Collections.ArrayList. Ersteres hat keine RemoveRange() Methode. Bitte bewege das Ziel nicht. Wenn eine der Antworten das in Ihrer aktuellen Frage beschriebene Problem löst, denken Sie bitte daran, diese Antwort zu akzeptieren. Wenn Sie eine neue oder folgende Frage haben: Bitte posten Sie eine neue Frage. - Ansgar Wiechers Jan 11 um 23:33

Ok. Ich habe die Antwort markiert. Aber lassen Sie mich wissen, wie man es erledigt (removalrange() -Methode). Danke im Voraus. - iamsmith41 vor 2 Tagen

$array += ,[Collections.ArrayList]@(Get-Content $_.FullName) sollte wahrscheinlich ausreichen. Wenn Sie weitere Hilfe benötigen, schreiben Sie eine neue Frage. - Ansgar Wiechers vor 2 Tagen


Wie der Objekttyp wissen, wie oben, dass ich verwenden müssen Collections.ArrayList ist und so weiter? Wie zu wissen, dass dies ein System.Array und nicht System.Collections.ArrayList, etc. ist?

+1

'($ Ausdruck) .GetType(). FullName' oder' [Type] :: GetTypeArray ((, ($ Ausdruck))) [0] .FullName'. – PetSerAl

Antwort

0

für Aussehen Typ können Sie tun:

Ausdruck | get-member

aber wenn Sie den letzten 3 Zeilen entfernen können Sie es tun kann Datei:

$yourfile='c:\temp\histo3.txt' 
$content=Get-Content $yourfile 
$content[0..[Math]::abs($content.Count - 4)] | Set-Content $yourfile 
4

Sie können den Typ eines Objekts über seine GetType() Methode bestimmen:

PS C:\>(Get-Item '.').GetType() 

IsPublic IsSerial Name       BaseType 
-------- -------- ----       -------- 
True  True  DirectoryInfo     System.IO.FileSystemInfo 

PS C:\>(Get-Item '.').GetType().FullName 
System.IO.DirectoryInfo

oder durch das Get-Member Cmdlets:

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... 
...

erstere liefert Meta informieren ation über ein Objekt, wie sein Name, Basistyp, welche Assembly sein von, etc. (Pipe die Ausgabe von GetType() in Format-List *, um eine vollständige Liste zu erhalten).

Letzteres dient hauptsächlich zum Abrufen von Informationen über die Member (Eigenschaften und Methoden) eines Objekts (oder der statischen Member einer Klasse, wenn Sie den Parameter -Static verwenden). Beachten Sie, dass Sie, wenn Sie Informationen zu den Mitgliedern eines Sammlungsobjekts benötigen, Get-Member -InputObject $col anstelle von $col | Get-Member verwenden müssen, da die Verwendung der Pipeline die Sammlung auflösen würde und Sie die Elemente der Sammlungselemente statt denen des Sammlungsobjekts selbst erhalten würden.

Sobald Sie eine Klasse kennen, würden Sie normalerweise weitere Informationen in der documentation, z. indem Sie einen Klassen- oder Mitgliedsnamen in Ihre bevorzugte Suchmaschine eingeben.

Verwandte Themen