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 unSystem.Array
, pas unSystem.Collections.ArrayList
. Le premier n'a pas de méthodeRemoveRange()
. 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:33D'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.?
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é.
Pour obtenir le nom de type d'un objet: (Get-Service | Get-Member) [0] .TypeName
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