La détermination du type d'objet
Dans cette question nous avons résolu notre problème mais il y a un point que je n'ai pas encore appris.
Ci-dessous les commentaires dans le post ci-dessus:
Mon but, c'est - À appeler chaque fichier de données basé sur l'indexation de 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 il déclenche une erreur que removerange n'est pas reconnu. J'ai vérifié -$array[0] | gm
et removerange méthode n'était pas vraiment là. Il suffit de Retirer et Removeat. Comment procéder pour cela? - iamsmith41 Jan 11 à 22:14@iamsmith41
Get-Content
renvoie uneSystem.Array
, pas unSystem.Collections.ArrayList
. Les anciens n'ont pas deRemoveRange()
méthode. Aussi, merci de ne pas déplacer la cible. Si l'une des réponses résout le problème décrit dans votre question: veuillez envisager d'accepter cette réponse. Si vous avez des nouvelles ou de suivi question: veuillez poster une nouvelle question. - Ansgar Wiechers Jan 11 à 23:33Ok. J'ai marqué la réponse. Mais laissez-moi savoir comment la faire( removerange() la méthode ). Merci à l'avance. - iamsmith41 2 jours il ya
$array += ,[Collections.ArrayList]@(Get-Content $_.FullName)
devrait probablement suffire. Si vous avez besoin d'une aide supplémentaire, veuillez poster une nouvelle question. - Ansgar Wiechers 2 jours il ya
Comment connaître le type d'objet, comme ci-dessus que j'ai utiliser est Collections.ArrayList
et ainsi de suite? Comment savoir que c'est un System.Array
et pas System.Collections.ArrayList
, etc.?
($expression).GetType().FullName
ou[Type]::GetTypeArray((,($expression)))[0].FullName
.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez déterminer le type d'un objet par l'intermédiaire de son
GetType()
méthode:ou à l'aide de la
Get-member
applet de commande:La première fournit des méta-informations sur un objet, comme son nom, type de base, de l'assemblage de son, etc. (tuyau de la sortie de
GetType()
enFormat-List *
pour obtenir une liste complète).Le second est principalement pour 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 souhaitez obtenir des informations sur les membres d'un objet de collection, vous devez utiliserGet-Member -InputObject $col
plutôt juste$col | Get-Member
, parce que l'utilisation du pipeline serait dérouler la collection et vous obtenez les membres de la collecte des éléments plutôt que celles de la collection de l'objet lui-même.Une fois que vous savez la classe que vous auriez normalement rechercher plus d'informations dans le la documentation, par exemple par l'alimentation d'une classe ou un nom de membre dans votre moteur de recherche préféré.
(Get-Item '.').GetType() -eq [System.IO.FileSystemInfo])
, au moins dans la PS5(Get-Item .) -is [System.IO.FileSystemInfo]
. C'est uniquement pour vérifier si l'objet est d'un type spécifique, cependant, pas pour trouver le type lorsque vous ne savez pas à l'avance.-eq
ne sont pas, à savoir$value -is [PSCustomObject]
(alors que déjà l'orthographe (comme dans$value.GetType() -eq [System.Management.Automation.PSCustomObject]
) qui serait autrement nécessaire.pour regarder le type que vous pouvez faire:
expression | get-member
mais si vous pouvez supprimer les 3 dernières lignes d'un fichier, vous pouvez le faire: