Cómo funciona Powershell Foreach, While y otros bucles

Cómo funciona Powershell Foreach, While y otros bucles / Programación

Un primer paso crucial en el aprendizaje de la programación es trabajar con los bucles Los fundamentos absolutos de la programación para principiantes (Parte 2) Los fundamentos absolutos de la programación para principiantes (Parte 2) En la parte 2 de nuestra guía absoluta de programación para principiantes, estaré cubriendo el Conceptos básicos de funciones, valores de retorno, bucles y condicionales. Asegúrese de haber leído la parte 1 antes de abordar esto, donde expliqué la ... Leer más. Afortunadamente, PowerShell sigue creciendo con tus habilidades.

Puede encuadrar los comandos existentes que usa todos los días dentro de los bucles para ahorrar tiempo y esfuerzo. Sus scripts hacen el trabajo pesado mientras realiza el importante trabajo de leer más artículos en MakeUseOf!

Powershell ForEach Loops: La puerta al manejo avanzado de datos

ForEach es el alias del objeto ForEach. (Un Alias ​​es simplemente un acceso directo para un comando en PowerShell). Este es un buen momento para hablar sobre la forma en que PowerShell maneja los datos..

Como la mayoría de los lenguajes de programación modernos, PowerShell está orientado a objetos ¿De dónde obtuvo su nombre la programación orientada a objetos? ¿De dónde obtuvo su nombre la programación orientada a objetos? Orientado a objetos no es solo una palabra de moda aleatoria que escuchas en los círculos de programación. Hay una razón detrás del nombre, pero ¿qué? Únase a mí mientras exploro algunos de los fundamentos de los conceptos de programación y explico ... Leer más. Todo en PowerShell es un objeto, lo que significa que incluso las variables tienen propiedades y funciones extendidas Cmdlets de Powershell que mejorarán sus habilidades de administración de Windows Cmdlets de Powershell que mejorarán sus habilidades de administración de Windows Powershell es una herramienta de línea de comandos de partes iguales y lenguaje de scripts. Le brinda la capacidad de automatizar su computadora a través de los mismos comandos que usa para administrarla. Lee mas . Esa propiedad es la razón por la que puede establecer sus búsquedas en una variable y terminar con una matriz de los resultados.

$ yourVar = Get-ChildItem * foreach ($ file in $ yourVar) Your Steps 

En algunos idiomas, el procesamiento de esta matriz sería un proceso de varios pasos. Primero, obteniendo la longitud y luego contando cada paso.

En PowerShell, recorre la matriz y realiza la acción en cada uno usando ForEach. Esto te ahorra varias líneas de código, lo cual es útil si tienes un script más largo. Por ejemplo, la siguiente es una pequeña secuencia de comandos que usaría un par de bucles Powershell ForEach. Crea un archivo ZIP de todos sus archivos que no ha abierto en 30 días.

Construyendo un sistema de archivo de archivos usando ForEach Loops

Vamos a romper los pasos hacia abajo. Tu usas Get-ChildItem para obtener todos los archivos en la carpeta Documentos. La variable de entorno ¿Qué son las variables de entorno y cómo puedo usarlas? [Windows] ¿Qué son las variables de entorno y cómo puedo usarlas? [Windows] De vez en cuando aprenderé un pequeño consejo que me hace pensar "bueno, si lo supiera hace un año, me habría ahorrado muchas horas". Recuerdo vívidamente cómo aprender a ... Leer más $ env: USERPROFILE ejecuta el script utilizando el perfil actual. Esta variable es más portátil que una ruta codificada. Los resultados de esa búsqueda se asignan a la variable. $ MyDocs. Luego creamos nuestro bucle ForEach haciéndolo pasar a través de cada $ Doc en $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse foreach ($ doc in $ MyDocs) if ($ doc.LastAccessTime -lt $ (Get-Date) .addDays (-30)) $ oldDocs + = $ doc $ ArchiveFolder = New-Item -Path "$ ($ env: USERPROFILE) \ Documents \ $ ((Get-Date -Format MMddyy) .toString ()) "-ItemType Directory foreach ($ doc in $ oldDocs) Move-Item -Path $ doc.FullName -Destination" $ ($ ArchiveFolder.FullName) \ $ ($ doc.Name) "-Confirm $ false $ source = $ ArchiveFolder.FullName $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder.Name) .zip" Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile] :: CreateFromDirectory ($ source, $ destination) if (test-path $ destination) Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false 

Dentro del bucle, verificamos si cada archivo está LastAccessTime La propiedad tiene más de 30 días. Lo conseguimos con el Obtener la fecha cmdlet, y usando el AddDays Funcionar con el negativo treinta. Si es así, añadimos el archivo a la $ myOldDocs formación. Una vez que finaliza la clasificación de archivos, tomamos nuestra matriz completa y creamos un archivo zip. Este proceso es un poco más complicado, ya que implica invocar un poco de .NET. No se preocupe si no lo entiende, puede robar el código de este documento de ayuda de TechNet.

Para desglosar lo que está sucediendo aquí: moveremos todos nuestros archivos antiguos a un nuevo directorio nombrado para la fecha de hoy por más de 30 días. Una vez que se construye esa carpeta, tenemos que crear el archivo ZIP del mismo nombre. Probaremos para asegurarnos de que el archivo haya tenido éxito y el archivo .ZIP esté allí, y luego eliminaremos la nueva carpeta. Establézcalo como una tarea programada para ejecutarse una vez al mes. Te ahorrarás un poco de espacio y mantendrás tu carpeta de documentos limpia.

While y Do While: Loops on Condition

Si desea ejecutar un bucle solo cuando se cumple una condición particular, use un bucle While. Si está utilizando una variable para realizar un seguimiento de la cuenta, configurar primero.

i = 0 mientras (i<10) Your Steps i+=1  

El problema es que si no está utilizando un contador, es posible que desee que su código se ejecute al menos una vez, incluso si la prueba es verdadera. Este es el caso con el siguiente script de ejemplo. Entonces, en esos casos, desea utilizar un bucle Do-While Cómo funcionan los bucles Do-While en la programación de computadoras Cómo funcionan los bucles Do-While en la programación de computadoras Los bucles son uno de los primeros tipos de control que aprenderá en la programación. Probablemente sepa sobre el tiempo y para los bucles, pero ¿qué hace un bucle do-while? Lee mas . La sintaxis es ligeramente diferente..

do Your Steps while (Declaración condicional) 

El uso de estos no es tan obvio para un programador novato. Haciendo scripts típicos del día a día, es posible que no los encuentre tan a menudo. Cuando son especialmente útiles es hacer un temporizador improvisado para probar el éxito de un proceso.

Vamos a construir una secuencia de comandos rápida para reiniciar una máquina remota y alertar si no vuelve a activarse en 15 minutos. Este escenario asume que es un servidor doméstico u otra máquina que no se reinicia muy a menudo. Siéntase libre de ajustar la hora si su computadora normalmente se acelera.

Reinicie y compruebe: utilizando un bucle Do-While

Este script es un poco más simple. Primero, usas el Reiniciar la computadora comando para reiniciar la máquina remota. (Usamos una IP ficticia aquí para los comandos de reinicio, asegúrese de sobrescribir esto con el DNS / IP de su computadora). Luego crea la variable de contador, yo y configúrelo en 0. A continuación, tiene su bucle Do con Start-Sleep que detiene el script durante 300 segundos (cinco minutos). Un segundo comando agrega uno al contador..

Restart-Computer -ComputerName 127.0.0.1 i = 0 do Start-Sleep -Seconds 300 $ i + = 1 while ((! (Test-Connection 127.0.0.1 -Quiet)) -o $ i -gt 3) if ( $ i -gt 3) Write-Ouput "La máquina remota no responde, verifique".  else Write-Output "Reboot Success" 

Entonces tenemos nuestros criterios de mientras. Utilizamos una prueba O para asegurarnos de que una falla genere una alerta. La alternativa es la secuencia de comandos que espera infinitamente a la máquina remota. Para comprobar la máquina, estamos utilizando el Conexión de prueba cmdlet. Para simplificar, esto es Ping para PowerShell. Añadimos el parámetro. -Tranquilo que lo obliga a devolver Verdadero o Falso en lugar de los resultados de los paquetes. La segunda parte de la instrucción Or comprueba si el contador es más de tres.

Una vez que el bucle se completa, queremos crear la salida. Eso significa que tenemos que revisar nuestro contador. Esta es una declaración rápida si / else. Si es mayor que tres, la secuencia de comandos indica que la máquina remota no responde. Si no lo es, se obtiene que el reinicio fue exitoso.

Otros bucles

Hay otros dos tipos de bucles disponibles en PowerShell. Están algo relacionados con los dos bucles anteriores, simplemente no son tan comúnmente utilizados. Un bucle For funciona de manera similar al ejemplo While. Usted establece todos sus criterios en la evaluación, luego establece sus cmdlets.

para ($ i = 0; $ i -lt 10; $ i ++) Tus pasos 

Los bucles Do Until son como los bucles Do While, solo cambia la instrucción While a Until. En el script de ejemplo, sería lo mismo en cuanto a comportamiento. Es una opción de estilo, pero Do While es más versátil en otras situaciones. Así que si solo recuerdas uno, Do While es más útil.

PowerShell también tiene ayuda para cada uno de estos bucles. Puedes obtener la ayuda añadiendo acerca de antes del nombre del bucle en Get-Help. A continuación, puede ver ejemplos y otros consejos para cada tipo. Estos deberían ser útiles si te quedas atascado..

Seguir creciendo contigo

En este punto, tiene la mayoría de las habilidades para comenzar a construir scripts robustos. Ya sea que automatice su equipo de casa 15 Tareas avanzadas que PowerShell puede manejar en Windows 10 15 Tareas avanzadas que PowerShell puede manejar en Windows 10 PowerShell es similar a la línea de comandos, pero mejor. Es una poderosa herramienta de administración de sistemas. Hemos compilado 15 tareas, algunas simples, otras complejas, que se benefician de la magia de PowerShell. Lea más o ahorre tiempo en el trabajo, los bucles ayudan a sus scripts a hacer más. La combinación de estos bucles con el manejo de errores mueve sus secuencias de comandos más allá de lo básico Manejar los errores de PowerShell como un jefe con estos consejos Manejar los errores de PowerShell como un jefe con estos consejos Hay cuatro partes en el manejo de errores de PowerShell: el parámetro Error Action, los bloques Try / Catch, el Parámetro variable de error, y el registro. Aprende a hacerlas todas. Lee mas . Esto abre la puerta a lenguajes más avanzados..

¿Qué es un script inteligente de PowerShell que has creado usando bucles? Compártelo con nosotros en los comentarios..

Explorar más sobre: ​​PowerShell, Scripting.