web-dev-qa-db-fra.com

Déterminer le type d'objet

En cette question nous avons résolu notre problème mais il y avait un point que je n'ai pas encore appris.

Ci-dessous les commentaires dans le post ci-dessus:

Mon objectif est - d'appeler les données de chaque fichier en fonction de l'indexation à partir du tableau imbriqué et de supprimer les trois dernières lignes. 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) Mais cela renvoie une erreur que removerange n'est pas reconnu. J'ai vérifié - $array[0] | gm Et la méthode removerange n'était effectivement pas là. Il suffit de retirer et de supprimer. Comment procéder pour cela? - iamsmith41 11 janvier à 22:14

@ iamsmith41 Get-Content renvoie un System.Array, pas un System.Collections.ArrayList. Le premier n'a pas de méthode RemoveRange(). De plus, veuillez ne pas déplacer la cible. Si l'une des réponses résout le problème décrit dans votre question actuelle: veuillez envisager d'accepter cette réponse. Si vous avez une nouvelle question ou une question de suivi: veuillez poster une nouvelle question. - Ansgar Wiechers 11 janvier à 23:33

D'accord. J'ai marqué la réponse. Mais laissez-moi savoir comment le faire (méthode removerange ()). Merci d'avance. - iamsmith41 il y a 2 jours

$array += ,[Collections.ArrayList]@(Get-Content $_.FullName) devrait probablement suffire. Si vous avez besoin d'aide, veuillez poster une nouvelle question. - Ansgar Wiechers il y a 2 jours


Comment savoir le type d'objet comme ci-dessus que je dois utiliser est Collections.ArrayList Et ainsi de suite? Comment savoir qu'il s'agit d'un System.Array Et non System.Collections.ArrayList, Etc.?

5
iamsmith41

Vous pouvez déterminer le type d'un objet via sa méthode GetType() :

PS C: \> (Get-Item '.'). GetType ()
 
 IsPublic IsSerial Name BaseType 
 -------- -------- ---- -------- 
Vrai vrai DirectoryInfo                  System.IO.FileSystemInfo 
 
 PS C: \> (Get-Item '.'). GetType (). FullNameSystem.IO.DirectoryInfo

ou en utilisant la cmdlet Get-Member :

PS C: \> Obtenir l'article '.' | Get-Member
 
 TypeName: System.IO.DirectoryInfo
 
 Nom MemberType Définition 
 ---- ---------- ---------- 
 Mode CodeProperty System .String Mode {get = Mode;} 
 Méthode Create void Create (), void Create (System.Securi ... 
 CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObj ... 
 Méthode CreateSubdirectory System.IO.DirectoryInfo CreateSubdirecto ... 
 ...

Le premier fournit des méta-informations sur un objet, comme son nom, le type de base, l'assemblage duquel il provient, etc. (canalisez la sortie de GetType() dans Format-List * Pour obtenir une liste complète).

Ce dernier sert principalement à obtenir des informations sur les membres (propriétés et méthodes) d'un objet (ou les membres statiques d'une classe si vous utilisez le paramètre -Static). Notez que si vous voulez des informations sur les membres d'un objet collection, vous devez utiliser Get-Member -InputObject $col À la place juste $col | Get-Member, Car l'utilisation du pipeline déroule la collection et vous obtiendrez les membres des éléments de la collection plutôt que ceux de l'objet de collection lui-même.

Une fois que vous connaissez une classe, vous devriez normalement rechercher plus d'informations dans le documentation , par ex. en introduisant un nom de classe ou de membre dans votre moteur de recherche préféré.

14
Ansgar Wiechers

Pour obtenir le nom de type d'un objet: (Get-Service | Get-Member) [0] .TypeName

0
Maylife

pour le type de look que vous pouvez faire:

expression | get-member

mais si vous pouvez supprimer les 3 dernières lignes du fichier, vous pouvez le faire:

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