Parte 2 UD2. Powershell y CMD • INTRODUCCION PowerShell es un entorno en línea de comandos y scripting. Suple las deficiencias y limitaciones de CMD y BATCH. Aprovecha la tecnología Framework para formar parte de un entorno de trabajo común con otras aplicaciones desarrolladas en entorno Microsoft. Resultado de esta integración, el lenguaje de PowerShell utiliza sintaxis y palabras clave de C#. Presenta una estructura común para todos los comandos PowerShell (cmdlets) simplificando su aprendizaje. A modo de ejemplo, para la obtención de la ayuda, otros lenguajes en línea de comandos utilizan /?, -?, /H, HELP… El método de obtención de ayuda dependía del comando, no del entorno. En PowerShell es el entorno el que establece en método. El conjunto de comandos es ampliable. Es posible programar nuevos cmdlets. UD2. Powershell y CMD • ORIENTACION A OBJETOS El sistema operativo Windows 10 lo constituyen un conjunto de objetos que, mediante los servicios, interactúan entre ellos y con el usuario. Los objetos están compuestos por tres elementos: - Atributos - Métodos - Desencadenadores Pongamos por ejemplo un objeto "tarjeta de red". En este objeto, los atributos son la mac, la ip, la puerta de enlace… Los métodos son las acciones que realiza el objeto: interpretar una trama, definir una trama para enviarla… Los desencadenadores son las acciones externas que estimulan el objeto: petición de la orden ping para que se envíe una trama de verificación, peticiones de la orden net use para que se intente comunicar con un equipo… UD2. Powershell y CMD • LOS CMDLETS Los cmdlets de PowerShell son comandos que trabajan sobre los objetos de Windows. Cuando utilizamos un comando para saber el nombre UPN de un usuario del directorio activo, estamos accediendo al objeto que representa al usuario y recuperando el valor del parámetro UPN. Esta metodología de trabajo permite una interacción integrada entre diferentes comandos, ya que PowerShell controla la salida de un comando para poder suministrárselo a otro comando. Otros sistemas, como cmd, se basan en listados de texto, en los que un comando devuelve un listado que puede ser facilitado a otro comando para que lo interprete. El maquetado de la información es más sencillo porque la salida de un comando se puede redirigir a comandos de maquetación. Estos comandos de maquetación son comunes al sistema, no al comando que ha devuelto la información. UD2. Powershell y CMD • ESTRUCTURA DE LOS CMDLET Los cmdlets utilizan una estructura verbo-sustantivo. El nombre del comando está compuesto por un verbo que establece la acción y un sustantivo que define el tipo de objeto sobre el que se va a actuar, separados por un guion. Esta estructura simplifica el aprendizaje. A modo de ejemplo estudiemos el siguiente comando: New-Alias New es el verbo. Parece evidente que el comando creará algo nuevo. Alias es un sustantivo. El comando va a trabajar sobre los alias. Entendemos fácilmente que alias se refiere a diferentes formas de llamar a un comando. Uniendo ambos conceptos, new-alias va a crear una nueva forma de llamar a un comando UD2. Powershell y CMD • ESTRUCTURA DE LOS CMDLET Cualquier cmdlet que vaya a crear algo, utilizará el verbo new. Si se trata de interactuar con los alias del sistema, utilizará el sustantivo alias. Ejemplos de comandos:
Puedes obtener un listado de los comandos con el verbo
New o con al sustantivo Alias con estas dos órdenes: Get-Command –Verb New Get-Command –Noun Alias UD2. Powershell y CMD • LA AYUDA EN POWERSHELL La orden Get-Command nos devuelve la ayuda resumida de los comandos. • Get-Command. Muestra un listado de todos los comandos disponibles • Get-Command –Verb verbo. Muestra ayuda resumida de todos los comandos que tiene por verbo el especificado. • Get-Command –Noun sustantivo. Muestra ayuda resumida de todos los comandos que tiene por sustantivo el especificado, • Get-Command –Name cmdlet. Muestra la ayuda resumida del cmdlet especificado. El parámetro –name se puede omitir. • Get-Command –Syntax cmdlet. Muestra la sintaxis del comando con todos los parámetros admisibles. UD2. Powershell y CMD • LA AYUDA EN POWERSHELL La ayuda detallada por defecto no está instalada. Para instalarla debes ejecutar Update-Help desde una consola PS lanzada como administrador. La obtención de ayuda detallada se consigue con la orden Get-Help o con el parámetro -? • Get-help comando. Muestra la ayuda básica del comando especificado. • Comando -?. Igual que el anterior. • Get-Help comando –Online. Te redirige a una página de Microsoft con la ayuda detallada y ejemplos de utilización. • Get-Help comando –Examples. Muestra ejemplos de utilizacion. • Get-Help comando –Detailed. Muestra ayuda detallada. • Get-Help comando –Full. Muestra toda la ayuda. UD2. Powershell y CMD • LOS ALIAS Los alias son formas de llamar a un cmdlet con otro nombre. Sirven para abreviar sentencias de uso habitual. Podemos gestionar los alias con los comandos de nombre alias.
Los verbos asociados son:
o Export. Para llevar a un fichero. o Import. Para cargar desde un fichero. o New. Para crear un nuevo alias. o Get. Para obtener información de un alias. o Set. Para modificarlo. UD2. Powershell y CMD • LOS ALIAS Para facilitar el aprendizaje de PowerShell, el sistema interpreta comandos de otras plataformas como si fueran propios. Pongamos un par de ejemplos: Comando PS Comando CMD Comando Linux Move-Item Move mv Clear-Host Cls clear
Se hace una traducción del comando a un cmdlet. Esto
implica que solo funcionan los parámetros y modificadores compatibles con PowerShell. Si ejecutas ‘dir’, funciona correctamente. Observa que el listado devuelto no es que te daría un dir en cmd, si no que es lo que devolvería un ‘Get-Cliditem‘ en PowerShell. Si ejecutas ‘dir /s’, da error porque no interpreta /s como un modificador sino que lo hace como una ruta absoluta. Muchos cmdlets aceptan la abreviatura de la/s inicial/es del verbo y la del nombre. La abreviatura de ‘New-Item’ es ‘ni’. UD2. Powershell y CMD • AUTOCOMPLETADO Recordarás que en CMD, al escribir el inicio de una ruta y pulsar el tabulador, la ruta es autocompleta con rutas válidas que comiencen por los caracteres que has escrito. Si hay varios que cumplen con el patrón, pulsado sucesivamente el tabulador se van mostrando sucesivamente. En PS, este autocompletado se extiende a los cmdlets. Puedes autocompletar el cmdlet y también los parámetros. UD2. Powershell y CMD • CANALIZACIÓN DE OBJETOS Las canalizaciones en cmd envían el listado de texto del resultado de un comando a otro comando. En PS, se envían objetos. La ventaja es que recibimos un objeto completo del que podemos extraer, modificar, aplicar información. Los objetos se transfieren individualmente, lo que permite tratarlos secuencialmente. Al igual que el CMD, utilizamos la pipeline (tubería) | para canalizar. Estudiemos este ejemplo: Get-Childitem –Recurse | Out-host –Pagin Resulta evidente que va a hacer el cmdlet: obtener (get) los elementos hijos (childitem). ¿De quién? De la ruta actual (no hemos especificado otra). Recurse lo que hará es buscar también en los subdirectorios. Todo este conjunto de objetos se envía a Out-host (Sacar en anfitrión) que va a mostrar en nuestro equipo la información. ¿Cómo? Paginada (Pagin) UD2. Powershell y CMD • CANALIZACIÓN DE OBJETOS En el ejemplo debemos tener en cuenta que get- childitem envía el listado de los objetos que cuelgan del directorio actual y es out-host el que los muestra uno a uno controlando la paginación. Get-Childitem –Recurse | Format-List –Property FullName En este caso, el conjunto de objetos es el mismo, pero el cmdlet va a formatear la información en modo lista y solo va a mostrar la propiedad fullname de cada objeto. Si en get-childitem añadimos el parámetro –attributes directory, get-childitem solo localiza los directorios, y este es el conjunto de objetos que pasa a format-list. UD2. Powershell y CMD • FORMATO DE LA INFORMACION Como hemos visto, estamos manejando objetos con muchos atributos. Esto implica que la cantidad de información es grande. Para facilitar la lectura o interpretación de la información, PS nos provee de una serie de comandos de formato: o Format-Wide. Se muestra el valor de la propiedad predeterminada de cada objeto en un panel de dos columnas. o Format-Wide –Property propiedad. Muestra la propiedad seleccionada. o Format-Wide –Colum N. Muestra un panel con tantas columnas como indiquemos en el número N. Si el texto no cabe, se truca indicándolo con puntos suspensivos. o Format-Wide –Autosize. Muestra el panel ajustando la cantidad de columnas a la tamaño del texto a mostrar. UD2. Powershell y CMD • FORMATO DE LA INFORMACION o Format-List. Se muestra una lista con las propiedades del objeto agrupadas por objeto. o Format-List –Property prop1,prop2, … ,propN. Muestra solo las propiedades indicadas en el listado. o Format-List –Property patrón. Se mostrarán las propiedades que cumplan con el patrón definido con caracteres comodín ? y *. o Format-List –Groupby propiedad. Agrupa todos los objetos que tienen el mismo valor en la propiedad indicada. o Format-Table. Se muestra una tabla en la que cada registro es un objeto y cada campo es una propiedad. Se pueden seleccionar las propiedades a mostrar con –Property. Se puede ajustar el ancho con –Autosize. –Groupby también es aplicable. UD2. Powershell y CMD • FORMATO DE LA INFORMACION Los cmdlets tienen un destino predeterminado al que enviar el resultado de su ejecución. En la mayoría de los casos es la pantalla. Podemos controlar el destino con los cmdlets de verbo Out. o Out-Default. Lleva a la salida por defecto del cmdlet. o Out-File fichero. Lleva al fichero especificado o Out-File fichero –Encoding ASCII. Codifica el texto según ASCII. Por defeco lo hace en Unicode. o Out-Host. Lleva a la pantalla. o Out-Host –Paging. Muestra por pantalla paginando. o Out-Null. Lleva a dispositivo nulo o Out-Printer. Lleva a la impresora. o Out-String. Muestra como un listado de texto plano UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Una de las funciones del sistema operativo es gestionar el sistema de archivos. Esta abstracción del hardware idealiza el disco duro como un contenedor de carpetas y archivos en lugar de mostrarlo como es: un conjunto numerado de celdas memoria. Por una parte se encarga de decidir donde guarda físicamente cada dato para luego poder recuperarlo. Esta información no es accesible directamente por el usuario porque no es relevante él. Por otra parte ofrece una interfaz basada en una estructura arborescente de carpetas y ficheros. El sistema operativo Windows permite la generación de hasta 24 árboles que identifica con una letra del abecedario. En cada una de ellas se puede montar un sistema de archivos. Otra opción para montar un sistema de archivos es incluirlo como una subcarpeta de un árbol existente. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Al igual que en CMD, tenemos unidad actual y ubicación actual. La unidad actual solo puede ser una de todas las disponibles en el sistema. En cada unidad hay una ubicación actual. La orden para conocer la ubicación actual es Get- Location: o Get-Location. Devuelve la ruta actual completa incluida la unidad, o Get-Location | fw –Property Drive. Devuelve la letra de la unidad actual Es interesante observar que el comando CD de CMD sirve para cambiar de directorio y mostrar la ruta actual, sin embargo, en PS, sí cambia la ruta actual, pero no muestra la ubicación actual UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Para cambiar la ubicación actual se utiliza Set-Location: o Set-Location ruta. Cambia la ubicación a la ruta especificada. La ruta puede ser absoluta o relativa. o Set-Location C:\DATOS. Cambia la ubicación actual a C:\DATOS. Cambia la ruta y la unidad actual. o Set-Location D:. Cambia la unidad actual a D: y se coloca en la ubicación actual de esa unidad. o F:. Cambia a la ubicación actual de la unidad F: o CD CONTABILIDAD. Cambia la ubicación actual a un directorio que cuelga del directorio actual y que denomina CONTABILIDAD (ruta relativa). o Set-Location ..\CONTABILIDAD. Cambia a un directorio llamado CONTABILIDAD que cuelga de nuestro directorio padre (ruta relativa) o CD \DATOS. Cambia la ubicación al directorio DATOS que cuelga de mi directorio raiz. (ruta absoluta). UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Para cambiar obtener información sobre un objeto del sistema de archivos aplicamos el cmdlet Get-Item: o Get-Item . . Muestra información sobre el directorio en el que me encuentro. o Get-Item unidad: . Muestra información sobre el directorio actual de la unidad especificada. o Get-Item ruta . Muestra información sobre el directorio indicado en la ruta. o Get-Item * . Muestra información sobre todos los items del directorio actual. o Get-Item patrón. Muestra información sobre todos los items del directorio actual que cumplan con el patrón. La ruta, unidad y patrón se pueden combinar. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Para obtener un listado del contenido de una ubicación utilizamos Get-ChildItem. Lo podemos leer como ‘obtener (verbo Get) los elementos hijos (sustantivo ChildItem). o Get-ChildItem. Muestra el contenido de la ubicación actual. Se puede utilizar ls y dir de Linux y CMD respectivamente. o Get-ChildItem –Path Ruta. Muestra los objetos ubicados en la ruta especificada. Se pueden utilizar caracteres comodín *, ?, [ ]. o Get-ChildItem –Recurse. Muestra el contenido de la ubicación actual y el de cada uno de los subdirectorios. o Get-ChildItem –Depth N. Muestra el contenido de la ubicación actual y los subdirectorios hasta el nivel de profundidad indicado. o Get-ChildItem –Directory. Muestra sólo los directorios. o Get-ChildItem –File. Muestra sólo los ficheros. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS o Get-ChildItem –Hidden. Muestra sólo los archivos ocultos. o Get-ChildItem –ReadOnly. Muestra solo los objetos de sólo lectura o Get-ChildItem –System. Muestra solo los objetos de con el atributo de sistema. o Get-ChildItem –Attributes atributo1,atributo2… atributoN Muestra los objetos que posean el atributo especificado. Algunos atributos: • ReadOnly, Directory, Archive, System, Hidden, Compressed, Encrypted, Temporary… o Get-ChildItem –Name. Muestra solo el nombre de los objetos. o Get-ChildItem –Exclude patrón1,patrón2…patrónN. Excluye del listado los objetos que cumplen con alguno de los patrones. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Para verificar si un objeto existe dentro de sistema de archivos, disponemos del cmdlet Test-Path. o Test-Path –Path Ruta. Devuelve cierto o falso según el objeto especificado en la ruta exista o no. El objeto puede ser un directorio o un fichero. o Test-Path –Path Ruta –ItemType Leaf. Devuelve cierto o falso si el objeto especificado existe y es un fichero. o Test-Path –Path Ruta –ItemType Directory. Devuelve cierto o falso si el objeto especificado existe y es un directorio. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Hemos visto cómo ubicarnos en el árbol de directorios y cómo obtener información sobre los objetos contenidos en los directorios. Ahora vamos a ver como crear objetos. o New-Item –Name nombre. Crea un objeto tipo archivo. o New-Item nombre –ItemType Directory. Crea un directorio. o New-Item –Path C:\DATOS –Name PRUEBA.TXT – ItemType File. Crea un fichero en C:\DATOS con el nombre PRUEBA.TXT. o New-Item PRUEBA –Value "Hola mundo". Crea el fichero PRUEBA en la ubicación actual. El fichero contiene el texto ‘Hola mundo’. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Para renombrar objetos utilizamos Rename-Item: o Rename-Item –Path fichero1.txt fichero2.txt. Renombra el fichero fichero1.txt ubicado en el directorio actual a fichero2.txt. El fichero renombrado se mantiene en la ubicación original. Para mover objetos utilizamos Move-Item: o Move-Item -Path C:\DATOS\Fichero1.txt – Destination E:\COPIA. Mueve el fichero de c:\datos a e:\copia. El directorio de destino debe existir. Si no existe, se toma como nuevo nombre para el fichero. o Move-Item C:\DATOS\PRUEBA .\. Mueve el fichero Prueba de c:\datos a la ubicación actual. o Move-Item C:\PRUEBA. Igual que el anterior. Al no especificar destino, lo mueve a la ubicación actual. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS La copia en PS es diferente a la que se hace en otros entornos en línea de comandos. Cuando copiamos un directorio solo se copia el objeto directorio, no su contenido. Para copiar directorio y contenido debemos añadir el parámetro –Recurse. o Copy-Item –Path C:\DATOS E:\COPIA. Copia el objeto Datos en el directorio raíz de E: con el nombre de COPIA. Solo el objeto. o Copy-Item –Path C:\DATOS E:\COPIA -Recurse. Copia el objeto Datos y todo su contenido en el directorio raíz de E:. Se genera el objeto COPIA que contiene los mismos elementos que el objeto DATOS. UD2. Powershell y CMD • EL SISTEMA DE ARCHIVOS Para la eliminación, CMD utiliza del, erase y rd, según sea fichero o directorio. En PS, los componentes del sistema de archivos son objetos, por lo que existe un único comando para borrar objetos, independientemente de si se trata de un fichero o un directorio. o Remove-Item objeto. Elimina el objeto indicado. Puede ser un fichero o un directorio. Se pueden utilizar caracteres comodín. o Remove-item C:\DATOS\P*.* -Exclude Paco.txt. Elimina todos los ficheros que empiecen por P del directorio datos a excepción de Paco.txt. Si lo que deseamos es eliminar un directorio que no esté vacío, el cmdlet nos pedirá confirmación. Para evitar que se pida confirmación se utilizará el parámetro –Recurse o Remove-Item C:\DATOS -Recurse. Elimina el directorio Datos y todo su contenido sin pedir confirmación UD2. Powershell y CMD • CMDLETS DE GESTION DE FECHAS El comando para gestionar fechas es Get-Date. Podemos especificar una fecha determinada o solicitar la del sistema. o Get-Date. Devuelve la fecha actual. o (Get-Date).DayOfWeek. Devuelve el día de la semana de la fecha actual. o Get-Date –Day 7 –Moth 7 –Year 2000. Devuelve un mensaje con los datos de fecha del 7 de Julio de 2020. o Get-Date –Format T. Devuelve la hora actual en formato hora:minutos:segundos. o Get-Date -uFormat "%Y/%m/%d %Z " . Devuelve año, mes, día y desplazamiento respecto a hora UTC
En la ayuda del comando puedes ver los parámetros
para format y uformat. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS Como hemos comentado, estamos trabajando con objetos y estos tienen métodos y propiedades. Para obtener un listado de estas características de un objeto utilizamos el comando Get-Member. o Get-childItem | Get-Member. PowerShell detecta el tipo de objeto que ha encontrado la orden Get- ChildItem y muestra los métodos y propiedades definidos para ese tipo de objeto. En este ejemplo, Get-ChildItem puede haber localizado ficheros y / o directorios, con diferentes características. Mostrará un listado por cada tipo de objeto. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS Existe una familia de comandos para la modificación genérica de propiedades de objetos. Son los cmdlet de nombre Itemproperty.
o Get-childItem | Get-ItemProperty –name extension,
isreadonly. Recupera todos los objetos que hay en el directorio actual y de ellos muestra las propiedades Extension e IsReadOnly. o Get-Item *.txt | set-ItemProperty -name attributes - Value "readonly,archive". Recupera todos los objetos que tienen extensión txt y cambia sus atributos a solo lectura y archivo.
Algunas propiedades son de solo lectura y no se pueden
modificar con este comando. Para saber cuales son modificables podemos utilizar Get-Member. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS En ocasiones, hacemos una selección de objetos y deseamos depurar el listado eliminando los que cumplan cierta característica. En este caso utilizaremos Where-Object. o Get-ChildItem | Where-Object { $_.PSIsContainer – eq $True}. Esta sentencia localiza archivos en la ubicación actual. El listado (objetos tipo fichero y objetos tipo directorio), se pasa a Where-Object que aplica el criterio de que la propiedad PSIsContainer esté activada. Eliminará los ficheros del listado. $_ es una forma relativa de hacer referencia al objeto enésimo que se recibe por la canalización. Si Get- ChildItem ha encontrado el fichero prueba.txt, en el momento de procesar este objeto, en la canalización se sustituye $_.PSIsContainer por prueba.txt.PSIsContainer. La respuesta a la consulta será cierto o falso. Si el resultado es cierto, el objeto se mantiene en el listado. En caso contrario se elimina del conjunto . UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS Los comparadores que se pueden utilizar son: o -eq. Comprueba si son iguales. o -ne. Comprueba si son diferentes. o -lt. Comprueba si es menor. o -le. Comprueba si es menor o igual. o -gt. Comprueba si es mayor. o -ge. Comprueba si es mayor o igual. o -like. Comprueba si cumple con un patrón. "Hola.txt" –like "H??.txt". o -notlike. Comprueba si no cumple con un patrón. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS En el caso de que deseemos utilizar varios criterios, se pueden concatenar condiciones lógicas con and, or y not. o Get-ChildIten | Where-Object { ( $_.name –like "p*.txt) –and ($_name –notlike "pa*,txt) }. Selecciona los ficheros que empiezan por ‘p’, pero excluyendo a los que empiezas por ‘pa’. También podemos canalizar un Where-Object sobre otro Where-Object haciendo un filtrado progresivo. o Get-ChildIten | Where-Object {$_.name –like "p*.txt)} | Where-Object {$_name –notlike "pa*,txt) }. Da el mismo resultado que la sentencia anterior. Los valores comparables son números, cadenas o propiedades lógicas. Podemos utilizar Get-Member para comprobar de que tipo es la propiedad por la que queremos cribar. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS Otra situación que se nos puede dar es que, tras una canalización, deseemos ejecutar una o varias órdenes, incluso partiendo de algún atributo del objeto que recibimos. o Get-ChildIten | Foreach-Object { Write-Host "El fichero " $_.name " fue modificado por última vez el día " $_.LastWriteTime ; Write-Host -------------- }. Selecciona los objetos del directorio actual y se los pasa a Foreach-Object. Por cada objeto recibido escribe una línea con en nombre y la fecha de modificación con un formato personalizado. Además añade una línea de guiones. o $cnt=0 ; get-content .\POESIA.TXT | Foreach-Object { $cnt++ ; $fich=$_.PSchildname } ; Write-Host "El fichero" $fich "tiene" $cnt "líneas". Inicializa un contador, lee el fichero poesía.txt línea a línea. Por cada línea, Foreach incrementa el contador. Tras leer la última línea se muestra un mensaje maquetado. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE OBJETOS Para ordenar los objetos de una colección por una propiedad determinada utilizaremos el cmdlet Sort-object. o Get-ChildIten *.txt | Sort-Object -Property LastAccessTime. Smuestra los objetos con extensión txt ordenados por la fecha del último acceso. Dentro de un listado es posible excluir ciertos objetos. o Get-Content poesia.txt | Sort-Object | Select- Object –Last 5. Ordena las líneas del fichero y muestra las 5 últimas. o Get-Content poesia.txt | Select-Object –unique. Muestra las líneas del fichero poesia.txt excluyendo repeticiones. o Get-Content poesia.txt | Select-Object –skip4. Muestra las líneas del fichero poesia.txt excluyendo las 4 primeras líneas. UD2. Powershell y CMD • CMDLETS DE TRATAMIENTO DE TEXTO Para obtener el contenido de un fichero utilizamos el cmdlet Get-Content. o Get-Content .\Poesía.txt. Muestra el contenido del fichero Poesía.txt o Get-Content .\Poesía.txt -TotalCount 5. Lee las 5 primera líneas del fichero Poesía.txt. o Get-Content .\Poesía.txt -Tail 5. Lee las 5 últimas líneas del fichero Poesía.txt. o (Get-content .\Poesía.txt –TotalCount 5)[4]. Se genera una variable temporal con 5 ubicaciones. Get-Content recupera las 5 primeras líneas y las guarda línea a línea en las 5 ubicaciones de la variable temporal. [4] obtiene el quinto valor de la variable temporal, que es la quinta línea. Observa que las ubicaciones dentro de la variable temporal se enumeran desde 0. UD2. Powershell y CMD