Usuario
Duda funcionamiento Pipe

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
Todas las respuestas
-
-
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
-
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
-
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