none
Duda funcionamiento Pipe RRS feed

  • Pregunta

  • Buenas tardes:

    Soy nuevo en Powershell y no termino de entender el exacto funcionamiento del Pipe.

    Mi pregunta es sencilla:

    ¿Porqué funciona el siguiente comando?

    Get-ChildItem  -Filter "*.txt"  -Recurse | Copy-Item -Destination c:\

    La salida de mi comando 'Get-ChildItem  -Filter "*.txt"  -Recurse' es del tipo : TypeName: System.IO.FileInfo

    PS C:\Users\Naveganti\test> Get-ChildItem  -Filter "*.txt"  -Recurse | gm
       TypeName: System.IO.FileInfo

    Los unicos parametros de Copy-Item que aceptan Pipe son:

    -Credential <PSCredential>  , true (ByPropertyName)

     -Destination <String>   true (ByPropertyName)

     -LiteralPath <String[]>    true (ByValue, ByPropertyName)

      -Path <String[]>    true (ByValue, ByPropertyName)

    El pipe primero busca entrada ByValue entre sus parametros que aceptan pipe. Si no la encuentra, intenta buscar alguna Property en la entrada del Pipe con el mismo nombre que alguno de sus parametros que aceptan Pipe (ByPropertyName)

    En el comando Get-ChildItem  -Filter "*.txt"  -Recurse | Copy-Item -Destination c:\ lo que llega al pipe es una TypeName: System.IO.FileInfo , no aceptada ByValue por ningun comando del Pipe, y tampoco existe ninguna Property en comando  'Get-ChildItem  -Filter "*.txt"  -Recurse | gm' que coincida en nombre con cualquiera de los parametros que aceptan Pipe. El nombre de la Property mas parecido es PSPath.


    Alguien puede explicarme, porqué funciona el pipe en el comando:

    Get-ChildItem  -Filter "*.txt"  -Recurse | Copy-Item -Destination c:\

    Muchas gracias por la paciencia con un novato!!!


    • Editado Jamoncito viernes, 11 de marzo de 2016 17:26
    viernes, 11 de marzo de 2016 17:06

Todas las respuestas

  • Alguna idea?

    Muchas gracias

    lunes, 14 de marzo de 2016 9:31
  • Jamoncito,

    ¿Como estas? Esta funcionando ya que le esta llegando un objeto (estructura en realidad) del tipo System.String, el cual es aceptado por el cmdlet Copy-Item:

    https://technet.microsoft.com/en-us/library/hh849793.aspx

    Saludos!!


    This posting is provided AS IS with no warranties and confers no rights! Always test ANY suggestion in a test environment before implementing! Mi blog http://nicolasgranata.com

    miércoles, 16 de marzo de 2016 0:48
  • Gracias por la respuesta Nivolas:

    Pero la salida de de C-Member es un System.IO.FileInfo

    PS C:\Users\Naveganti\test> Get-ChildItem  -Filter "*.txt"  -Recurse | gm
       TypeName: System.IO.FileInfo  (No es System.string)

    Cuando la salida de Get-Member es una String, apatece como TypeName :String o algo parecido.

    Pero la salida de Get-Member en este caso es System.IO.FileInfo , estiendo que para  Powershell no es una String.No entiendo porque dices que al Pipe le llega un string, si la salida de Get-Member es System.IO.FileInfo.

    Puedes explicarme eso?

    Muchas Gracias


    viernes, 18 de marzo de 2016 11:28
  • Jamoncito,

    ¿Como estas? Cuando se invoca a Get-ChildItem  -Filter "*.txt"  -Recurse | gm, si bien es cierto que es del tipo System.IO.FileInfo, las propiedas dentro del objeto, son del tipo string:

    PS C:\New folder> Get-ChildItem  -Filter "*.txt"


        Directory: C:\New folder


    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    -a----     24/03/2016  05:55 p.m.              0 New Text Document.txt

    Si te fijas bien, devuelve el nombre el cual es un string, ya que el Property "Name", del objeto del tipo System.IO.FileInfo devuelve un tipo string:

    Name                      Property       string Name {get;}

    Saludos!!


    This posting is provided AS IS with no warranties and confers no rights! Always test ANY suggestion in a test environment before implementing! Mi blog http://nicolasgranata.com

    jueves, 24 de marzo de 2016 21:01