Question Pipeline et Get-Content (Résolu)

Plus d'informations
il y a 17 ans 3 mois #3359 par blanc
Réponse de blanc sur le sujet Re:pipeline et get-content
alors si j'ai un peu compris :
get-item \"c:\\" --> renvoie un object .net enrichi du PSObject
(get-item \"c:\\").GetFiles(\"boot.ini\") --> renvoi un objet .net uniquement, donc sans le PSObject et sans ses propriétés qu'utilisent souvent les cmdlet.
Et pour faire un \" xxx | gc\", il faut que l'objet xxx dispose de la propriété \"path\" (ou d'une des 2 autres).
Comme (get-item \"c:\\").GetFiles(\"boot.ini\") n'en dispose pas, on peut lui \"ajouter\" la propriété qui manque avec un select-objet et une propriété calculée (voir l'aide). En fait, select-object crée un nouvel object de type PSCustomObject. Et alors le gc marche !
(get-item \"c:\\").GetFiles(\"boot.ini\") |select-object @{Name=\"Path\";Expression={$_.fullName} } | gc
ou avec cette notation tableau qui m'échappe complètement
(get-item \"c:\\").GetFiles(\"boot.ini\")[0].fullName |select-object @{Name=\"Path\";Expression={$_} } | gc
Un dernier détail mais le chapitre \"...PSBase...PSObject\" du livre de référence met juste \"l'eau à la bouche\".
Encore merci pour vos efforts qui relève de la formation. Et de pointer l'aide en ligne, le réflexe sur venir.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 3 mois #3360 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:pipeline et get-content
noel écrit:

alors si j'ai un peu compris :
get-item \"c:\\" --> renvoie un object .net enrichi du PSObject

J'aurais plutot dit \"renvoie un object .net, plus précisément un PSObject enrichi\". La classe PSObject encapsule un objet .NET.
noel écrit:

(get-item \"c:\\").GetFiles(\"boot.ini\") --> renvoi un objet .net uniquement, donc sans le PSObject et sans ses propriétés qu'utilisent souvent les cmdlet.
Et pour faire un \" xxx | gc\", il faut que l'objet xxx dispose de la propriété \"path\" (ou d'une des 2 autres).

Tout à fait.
noel écrit:

Comme (get-item \"c:\\").GetFiles(\"boot.ini\") n'en dispose pas, on peut lui \"ajouter\" la propriété qui manque avec un select-objet et une propriété calculée (voir l'aide). En fait, select-object crée un nouvel object de type PSCustomObject. Et alors le gc marche !

Oui, bien qu'à mon avis l'approche soit un peu alambiquée, mais le principe est là.
noel écrit:

Ou avec cette notation tableau qui m'échappe complètement

La méthode GetFiles() renvoi un tableau d'instances de FileInfo: System.IO.FileInfo[].
Du coup l'indexation est possible :
[code:1]
PS > (get-item \"c:\\"«»).GetFiles

MemberType : Method
OverloadDefinitions : {System.IO.FileInfo[] GetFiles(String searchPattern),
[/code:1]
Visu du type tableau :
[code:1]
(get-item \"c:\\"«»).GetFiles(\"boot.ini\"«»).GetType()
(get-item \"c:\\"«»).GetFiles(\"boot.ini\"«»).Count
(get-item \"c:\\"«»).GetFiles().count
[/code:1]
Je devrais ajouter cette manière de faire dans mon tutoriel sur les objets personnalisés :
[code:1]
Select-Object @{Name=\"Path\";Expression={$_} }
[/code:1]
;-)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.071 secondes
Propulsé par Kunena