Cómo funcionan los bucles Foreach, While y otros de Powershell

Cómo funcionan los bucles Foreach, While y otros de Powershell

Un primer paso crucial en el aprendizaje de la programación es trabajar con bucles. Afortunadamente, PowerShell continúa creciendo con sus habilidades.





¿Puedo reembolsar un juego en Steam?

Puede enmarcar los comandos existentes que usa todos los días dentro de los bucles para ahorrar tiempo y esfuerzo. ¡Tus scripts hacen el trabajo pesado mientras tú haces el importante trabajo de leer más artículos sobre MakeUseOf!





Powershell ForEach Loops: la puerta al manejo avanzado de datos

ForEach es el alias de ForEach-Object. (Un alias es simplemente un atajo 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. Todo en PowerShell es un objeto, lo que significa que incluso las variables tienen propiedades y funciones extendidas . 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.

|_+_|

En algunos lenguajes, procesar 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 una con ForEach. Esto le ahorra varias líneas de código, lo cual es útil si tiene un script más largo. Por ejemplo, el siguiente es un pequeño script 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.

Creación de un sistema de archivo de archivos con bucles ForEach

Analicemos los pasos hacia abajo. Tu usas Get-ChildItem para obtener todos los archivos en la carpeta Documentos. La variable de entorno $ env: USERPROFILE ejecuta el script usando 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 por cada $ Doc en $ MyDocs .





|_+_|

Dentro del bucle, verificamos si cada archivo está LastAccessTime La propiedad tiene más de 30 días. Obtenemos esto con el Obtener la fecha cmdlet y usando el AddDays función con treinta negativo. Si es así, agregamos el archivo al $ myOldDocs formación. Una vez que se completa 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 comprende del todo, 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 con el nombre de la fecha de hoy para más de 30 días. Una vez que esa carpeta se construye, tenemos que crear el archivo ZIP del mismo nombre. Probaremos para asegurarnos de que el archivo se realizó correctamente y que el archivo .ZIP está allí, y luego eliminaremos la nueva carpeta. Establezca esto como una tarea programada para que se ejecute una vez al mes. Se ahorrará un poco de espacio y mantendrá limpia su carpeta Documentos.





Mientras y hacer mientras: bucles según la condición

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 del conteo, configúrelo primero.

|_+_|

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 del siguiente script de ejemplo. Entonces, en esos casos, desea usar un bucle Do-While. La sintaxis es ligeramente diferente.

|_+_|

Usarlos no es tan obvio para un programador novato. Al hacer scripts típicos del día a día, es posible que no se encuentre con ellos con tanta frecuencia. Donde son especialmente útiles es hacer un temporizador improvisado para probar el éxito de un proceso.

¿Puedes ver quién vio tu perfil de LinkedIn?

Vamos a crear una secuencia de comandos rápida para reiniciar una máquina remota y alertar si no vuelve a funcionar en 15 minutos. Este escenario asume que es un servidor doméstico u otra máquina que no se reinicia con mucha frecuencia. Siéntase libre de ajustar la hora si su computadora normalmente sube más rápido.

Reiniciar y comprobar: uso de un bucle de ejecución

Este script es un poco más sencillo. Primero, usa el Reiniciar-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, I y configúrelo en 0. A continuación, tiene su bucle Do con Start-Sleep deteniendo el script durante 300 segundos (cinco minutos). Un segundo comando agrega uno al contador.

|_+_|

Luego tenemos nuestros criterios While. Usamos una prueba O para asegurarnos de que una falla genera una alerta. La alternativa es la secuencia de comandos en bucle esperando interminablemente la máquina remota. Para verificar la máquina, estamos usando el Conexión de prueba cmdlet. Para simplificar, esto es Ping para PowerShell. Agregamos el parámetro -Tranquilo lo 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 se completa el ciclo, queremos crear la salida. Eso significa que tenemos que comprobar nuestro contador. Esta es una declaración rápida if / else. Si es mayor que tres, el script muestra que la máquina remota no responde. Si no es así, indica 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 se usan con tanta frecuencia. Un bucle For funciona de manera similar al ejemplo While. Establece todos sus criterios en la evaluación, luego establece sus cmdlets.

|_+_|

Los bucles Do until son como los bucles Do While, simplemente cambie la instrucción While a Until. En el script de ejemplo, sería lo mismo en cuanto al comportamiento. Es una elección de estilo, pero el Do While es más versátil en otras situaciones. Entonces, si solo recuerda uno, Do While es más útil.

PowerShell también tiene ayuda para cada uno de estos bucles. Puede obtener ayuda agregando sobre 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 se queda atascado.

Continuando creciendo contigo

En este punto, tiene la mayoría de las habilidades para comenzar a construir scripts robustos. Ya sea automatizando su equipo doméstico o ahorrando 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 hace que sus secuencias de comandos vayan más allá de lo básico. Esto abre la puerta a idiomas más avanzados.

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

Cuota Cuota Pío Correo electrónico Elimine estos archivos y carpetas de Windows para liberar espacio en disco

¿Necesita liberar espacio en el disco de su computadora con Windows? Estos son los archivos y carpetas de Windows que se pueden eliminar de forma segura para liberar espacio en el disco.

Leer siguiente
Temas relacionados
  • Programación
  • Potencia Shell
  • Scripting
Sobre el Autor Michael McConnell(44 Artículos publicados)

Michael no usó una Mac cuando estaban condenados, pero puede codificar en Applescript. Tiene títulos en Ciencias de la Computación e Inglés; ha estado escribiendo sobre Mac, iOS y videojuegos desde hace un tiempo; y ha sido un mono de TI durante el día durante más de una década, y se especializó en scripting y virtualización.

cómo eliminar fotos duplicadas en iphone
Más de Michael McConnell

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse