Propaganda
Um primeiro passo crucial Aprender programação está trabalhando com loops Os princípios absolutos da programação para iniciantes (parte 2)Na parte 2 do nosso guia para iniciantes em programação, falarei sobre o básico de funções, valores de retorno, loops e condicionais. Certifique-se de ler a parte 1 antes de abordar isso, onde expliquei o ... consulte Mais informação . Felizmente, o PowerShell continua a crescer com suas habilidades.
Você pode enquadrar os comandos existentes que você usa todos os dias dentro de loops para economizar tempo e esforço. Seus scripts fazem o trabalho pesado enquanto você faz o importante trabalho de ler mais artigos sobre MakeUseOf!
Powershell ForEach Loops: a porta para o tratamento avançado de dados
ForEach é o alias do ForEach-Object. (Um alias é apenas um atalho para um comando no PowerShell.) Este é um bom momento para falar sobre a maneira como o PowerShell lida com dados.
Como a maioria das linguagens de programação modernas, O PowerShell é orientado a objetos
De onde veio a programação "orientada a objetos"?Orientado a objetos não é apenas uma palavra-chave aleatória que você ouve nos círculos de programação. Há uma razão por trás do nome - mas o que? Junte-se a mim enquanto eu exploro alguns dos fundamentos dos conceitos de programação e explico ... consulte Mais informação . Tudo no PowerShell é um objeto, o que significa que mesmo variáveis possuem propriedades e funções estendidas Cmdlets do PowerShell que melhorarão suas habilidades de administrador do WindowsO Powershell é uma ferramenta de linha de comando e linguagem de script de partes iguais. Permite automatizar seu computador através dos mesmos comandos que você usa para administrá-lo. consulte Mais informação . Essa propriedade é a razão pela qual você pode definir suas pesquisas para uma variável e terminar com uma matriz dos resultados.$ yourVar = Get-ChildItem * foreach ($ arquivo em $ yourVar) {Suas etapas. }
Em alguns idiomas, o processamento dessa matriz seria um processo de várias etapas. Primeiro, obtenha o comprimento e depois conte cada etapa.
No PowerShell, você percorre a matriz e executa a ação em cada uma delas usando o ForEach. Isso economiza várias linhas de código, o que é útil se você tiver um script mais longo. Por exemplo, a seguir está um pequeno script que usaria alguns loops do Powershell ForEach. Ele cria um arquivo ZIP de todos os seus arquivos que você não abre há 30 dias.
Construindo um sistema de arquivamento de arquivos usando loops ForEach
Vamos quebrar os degraus. Você usa Get-ChildItem para obter todos os arquivos na pasta Documentos. A variável de ambiente O que são variáveis de ambiente e como posso usá-las? [Janelas]De vez em quando, aprendo uma pequena dica que me faz pensar "bem, se eu soubesse disso há um ano, isso me salvaria horas". Lembro-me vividamente de aprender a ... consulte Mais informação $ env: USERPROFILE executa o script usando o perfil atual. Essa variável é mais portátil que um caminho codificado. Os resultados dessa pesquisa são atribuídos à variável $ MyDocs. Em seguida, criamos nosso loop ForEach, fazendo com que ele percorra cada $ Doc em $ MyDocs.
$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurso. foreach ($ doc em $ MyDocs) {if ($ doc. LastAccessTime -lt $ (Get-Date) .addDays (-30)) {$ oldDocs + = $ doc} } $ ArchiveFolder = New-Item -Path "$ ($ env: USERPROFILE) \ Documents \ $ ((Get-Date -Format MMddyy) .toString ())" -ItemType Diretório. foreach ($ doc em $ oldDocs) {Move-Item -Path $ doc. FullName -Destination "$ ($ ArchiveFolder. Nome completo) \ $ ($ doc. Nome) "-Confirme $ false. } $ source = $ ArchiveFolder. Nome completo. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Name) .zip " Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ source, $ destination) if (caminho de teste $ destino) {Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false. }
Dentro do loop, verificamos se cada arquivo LastAccessTime A propriedade tem mais de 30 dias. Nós entendemos isso com o Get-Date cmdlet e usando o AddDays função com trinta negativos. Se for, adicionamos o arquivo ao $ myOldDocs array. Depois que a classificação do arquivo é concluída, pegamos nossa matriz concluída e criamos um arquivo zip. Esse processo é um pouco mais complicado, pois envolve a invocação de um pouco do .NET. Não se preocupe se você não entender bem - você pode roubar o código de este documento de ajuda do TechNet.
Para detalhar o que está acontecendo aqui: moveremos todos os nossos arquivos antigos para um novo diretório nomeado para a data de hoje por mais de 30 dias. Depois que a pasta for criada, precisamos criar o arquivo ZIP com o mesmo nome. Testaremos para garantir que o arquivo seja bem-sucedido e o arquivo .ZIP esteja lá e excluiremos a nova pasta. Defina isso como uma tarefa agendada para ser executada uma vez por mês. Você economizará um pouco de espaço e manterá a pasta Documentos limpa.
While e Do While: Loops na condição
Se você deseja executar um loop apenas quando uma condição específica for atendida, use um loop While. Se você estiver usando uma variável para rastrear a contagem, defina-a primeiro.
i = 0. while (i <10) {Seus passos i + = 1. }
O problema é que, se você não estiver usando um contador, convém que seu código seja executado pelo menos uma vez, mesmo que o teste seja verdadeiro. Este é o caso do script de exemplo abaixo. Então, nesses casos, você deseja usar um loop Do-While Como funcionam os loops de folga na programação de computadoresOs loops são um dos primeiros tipos de controle que você aprenderá em programação. Você provavelmente conhece os loops while e for, mas o que um loop do-while realiza? consulte Mais informação . A sintaxe é um pouco diferente.
faça {Seus passos. } while (declaração condicional)
Usá-los não é tão óbvio para um programador iniciante. Ao criar scripts típicos do dia a dia, talvez você não os encontre com tanta frequência. Onde eles são especialmente úteis é fazer um temporizador improvisado para testar o sucesso de um processo.
Vamos criar um script rápido para reiniciar uma máquina remota e alertar se ela não voltar em 15 minutos. Esse cenário supõe que seja um servidor doméstico ou outra máquina que não é reiniciada com muita frequência. Sinta-se à vontade para ajustar a hora, se o computador normalmente chegar mais rápido.
Reinicialização e verificação: usando um loop do while
Este script é um pouco mais simples. Primeiro, você usa o Reinicialização do computador comando para reiniciar a máquina remota. (Aqui usamos um IP falso para os comandos de reinicialização, substitua-o pelo DNS / IP do seu computador). Em seguida, crie a variável do contador, Eu e defina-o como 0. Em seguida, você tem seu loop Do com Start-Sleep interrompendo o script por 300 segundos (cinco minutos). Um segundo comando adiciona um ao contador.
Reinicie-Computer -ComputerName 127.0.0.1. i = 0. do {Start-Sleep -Segonds 300 $ i + = 1. } while ((! (Conexão de teste 127.0.0.1 -Quiet)) -ou $ i -gt 3) if ($ i -gt 3) {Write-Ouput "A máquina remota não está respondendo, verifique." } else {Gravação-Saída "Reinicialização bem-sucedida" }
Então, temos os nossos critérios While. Usamos um teste Or para garantir que uma falha gere um alerta. A alternativa é o script repetidamente aguardando a máquina remota. Para verificar a máquina, estamos usando o Conexão de teste cmdlet. Para simplificar, este é o Ping for PowerShell. Nós adicionamos o parâmetro -Quieto que o força a retornar True ou False, em vez dos resultados dos pacotes. A segunda parte da instrução Or verifica se o contador é superior a três.
Depois que o loop for concluído, queremos criar a saída. Isso significa que precisamos verificar nosso contador. Esta é uma declaração if / else rápida. Se for maior que três, o script mostra que a máquina remota não está respondendo. Caso contrário, resulta que a reinicialização foi bem-sucedida.
Outros Loops
Existem outros dois tipos de loops disponíveis no PowerShell. Eles estão um pouco relacionados aos dois loops anteriores, mas não são tão comumente usados. Um loop For funciona de maneira semelhante ao exemplo While. Você define todos os seus critérios na avaliação e define seus cmdlets.
para ($ i = 0; $ i -lt 10; $ i ++) {Suas etapas. }
Os loops Do Até são como loops Do While, basta alterar a instrução While para Até. No script de exemplo, seria o mesmo em relação ao comportamento. É uma escolha de estilo, mas o Do While é mais versátil em outras situações. Portanto, se você se lembrar apenas de um, o Do While é mais útil.
O PowerShell também tem ajuda para cada um desses loops. Você pode obter ajuda adicionando sobre antes do nome do loop em Get-Help. Você pode ver exemplos e outras dicas para cada tipo. Isso deve ser útil se você ficar preso.
Continuando a crescer com você
Neste ponto, você tem a maioria das habilidades para começar a criar scripts robustos. Se automatizando seu equipamento doméstico 15 Tarefas avançadas que o PowerShell pode manipular no Windows 10O PowerShell é semelhante ao prompt de comando, mas melhor. É uma poderosa ferramenta de administração de sistemas. Reunimos 15 tarefas, algumas simples e outras complexas, que se beneficiam da magia do PowerShell. consulte Mais informação ou economizando tempo no trabalho, os loops ajudam seus scripts a fazer mais. Combinando esses loops com a manipulação de erros move seus scripts além do básico Lidar com erros do PowerShell como um chefe com essas dicasO tratamento de erros do PowerShell possui quatro partes. Aprenda a corrigir erros e muito mais no Microsoft PowerShell. consulte Mais informação . Isso abre as portas para idiomas mais avançados.
O que é um script inteligente do PowerShell que você criou usando loops? Compartilhe conosco nos comentários.
Michael não usou um Mac quando eles estavam condenados, mas ele pode codificar em Applescript. Ele é formado em Ciência da Computação e Inglês; ele escreve sobre Mac, iOS e videogames há algum tempo; e ele é um macaco de TI diurno há mais de uma década, especializado em scripts e virtualização.