Anuncio
Un primer paso crucial en la programación de aprendizaje funciona con bucles 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, cubriré los conceptos básicos de funciones, valores de retorno, bucles y condicionales. Asegúrate de haber leído la parte 1 antes de abordar esto, donde expliqué el ... Lee mas . Afortunadamente, PowerShell continúa creciendo con sus habilidades.
Puede enmarcar los comandos existentes que usa todos los días dentro de los bucles para ahorrar tiempo y esfuerzo. ¡Tus guiones hacen el trabajo pesado mientras haces el trabajo importante de leer más artículos en MakeUseOf!
Powershell ForEach Loops: la puerta al manejo avanzado de datos
ForEach es el alias del ForEach-Object. (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"?Orientado a objetos no es solo una palabra de moda al azar que escuchas en los círculos de programación. Hay una razón detrás del nombre, pero ¿qué? Únete a mí mientras exploro algunos de los fundamentos de los conceptos de programación y explico ... Lee mas . 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 administrativas de WindowsPowershell es una herramienta de línea de comandos en partes iguales y lenguaje de script. Le brinda la capacidad de automatizar su computadora mediante 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 resultados.$ yourVar = Get-ChildItem * foreach ($ file en $ yourVar) {Tus pasos. }
En algunos idiomas, 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 uno con ForEach. Esto le ahorra varias líneas de código, lo cual es útil si tiene una secuencia de comandos más larga. 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.
Construyendo un Sistema de Archivo de Archivos Usando ForEach Loops
Bajemos los pasos. 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]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 horas de tiempo". Recuerdo vívidamente aprender a ... Lee mas $ env: PERFIL DE USUARIO 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 haciendo que pase por cada $ Doc en $ MyDocs.
$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse. foreach ($ doc en $ 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 en $ oldDocs) {Move-Item -Path $ doc. FullName -Destination "$ ($ ArchiveFolder. Nombre completo) \ $ ($ doc. Nombre) "-Confirme $ false. } $ source = $ ArchiveFolder. Nombre completo. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Nombre) .zip " Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ fuente, $ destino) if (test-path $ destination) {Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false. }
Dentro del bucle, verificamos si cada archivo LastAccessTime La propiedad tiene más de 30 días. Obtenemos esto con el Obtener la fecha cmdlet, y usando el AddDays funcionan con treinta negativos. 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, puede robar el código de este documento de ayuda de TechNet.
Para desglosar lo que está sucediendo aquí: trasladaremos todos nuestros archivos antiguos a un nuevo directorio con el nombre de 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. Probamos para asegurarnos de que el archivo se haya realizado correctamente y que el archivo .ZIP esté allí, y luego eliminaremos la nueva carpeta. Establezca esto como una tarea programada para ejecutarse una vez al mes. Se ahorrará un poco de espacio y mantendrá limpia su carpeta Documentos.
While y do while: bucles en 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 rastrear el conteo, configúrelo primero.
i = 0. while (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 script de ejemplo a continuación. Entonces en esos casos, quieres usar un bucle Do-While Cómo funcionan los bucles Do-While en la programación de computadorasLos bucles son uno de los primeros tipos de control que aprenderá en la programación. Probablemente conozca los bucles while y for, pero ¿qué logra un bucle do-while? Lee mas . La sintaxis es ligeramente diferente.
hacer {Tus pasos. } while (declaración condicional)
El uso de estos no es tan obvio para un programador novato. Al realizar secuencias de comandos típicas del día a día, es posible que no se las encuentre con tanta frecuencia. Lo que les resulta especialmente útil es hacer un temporizador improvisado para probar el éxito de un proceso.
Vamos a crear un script rápido para reiniciar una máquina remota y alertar si no vuelve a aparecer en 15 minutos. Este escenario supone que es un servidor doméstico u otra máquina que no se reinicia muy a menudo. Siéntase libre de ajustar el tiempo si su computadora generalmente sube más rápido.
Reiniciar y verificar: usar un bucle Do-While
Este script es un poco más simple. Primero, usas 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 contador, yo y ponerlo a 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.
Reiniciar-Computadora-Nombre del equipo 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 {Salida de escritura "Reinicio exitoso" }
Entonces tenemos nuestros criterios Mientras. Usamos una prueba O para garantizar que una falla genere una alerta. La alternativa es la secuencia de comandos en bucle sin parar esperando la máquina remota. Para verificar la máquina, estamos utilizando el Conexión de prueba cmdlet Por simplicidad, este 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 verifica si el contador es más de tres.
Una vez que se completa el ciclo, queremos crear la salida. Eso significa que necesitamos revisar 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í, da como resultado que el reinicio se realizó correctamente.
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 configura sus cmdlets.
for ($ i = 0; $ i -lt 10; $ i ++) {Tus pasos. }
Los bucles Do Hasta son como los bucles Do While, solo cambia la instrucción While a Hasta. En el script de ejemplo, sería lo mismo en cuanto a comportamiento. Es una opció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 la ayuda agregando acerca de antes del nombre del bucle en Get-Help. Luego puede ver ejemplos y otros consejos para cada tipo. Esto debería ser útil si te quedas atascado.
Continuando creciendo contigo
En este punto, tiene la mayoría de las habilidades para comenzar a construir scripts robustos. Ya sea automatizando su plataforma de casa 15 tareas avanzadas que PowerShell puede manejar en Windows 10PowerShell es similar al símbolo del sistema, pero mejor. Es una poderosa herramienta de administración del sistema. Hemos compilado 15 tareas, algunas simples, otras complejas, que se benefician de la magia de PowerShell. Lee mas o ahorrando tiempo en el trabajo, los bucles ayudan a sus scripts a hacer más. Combinando estos bucles con el manejo de errores mueve sus scripts más allá de lo básico Maneje los errores de PowerShell como un jefe con estos consejosEl manejo de errores de PowerShell tiene cuatro partes. Aprenda a solucionar errores y más en Microsoft PowerShell. Lee mas . Esto abre la puerta a idiomas más avanzados.
¿Qué es un script inteligente de PowerShell que has creado usando bucles? Compártelo con nosotros en los comentarios.
Michael no usó una Mac cuando estaban condenados, pero puede codificar en Applescript. Tiene títulos en Informática e Inglés; lleva un tiempo escribiendo sobre Mac, iOS y videojuegos; y ha sido un mono de TI durante el día durante más de una década, especializándose en secuencias de comandos y virtualización.