Come funzionano Powershell Foreach, While e Other Loops
Un primo passo cruciale nell'apprendimento della programmazione sta lavorando con i loop. Le basi assolute della programmazione per principianti (parte 2) Le basi assolute della programmazione per principianti (parte 2) Nella parte 2 della nostra guida assoluta ai principianti alla programmazione, mi occuperò del basi di funzioni, valori di ritorno, loop e condizioni. Assicurati di aver letto la parte 1 prima di affrontare questo, dove ho spiegato il ... Per saperne di più. Fortunatamente, PowerShell continua a crescere con le tue capacità.
Puoi incorniciare i comandi esistenti che usi ogni giorno all'interno di cicli per risparmiare tempo e fatica. I tuoi copioni fanno il lavoro pesante mentre fai l'importante lavoro di leggere più articoli su MakeUseOf!
Powershell ForEach Loops: The Door to Advanced Data Handling
ForEach è l'alias di ForEach-Object. (Un alias è semplicemente una scorciatoia per un comando in PowerShell.) Questo è un buon momento per parlare del modo in cui PowerShell gestisce i dati.
Come la maggior parte dei moderni linguaggi di programmazione, PowerShell è orientato agli oggetti. Da dove viene la programmazione "Object Oriented"? Da dove viene la programmazione "Object Oriented"? Orientato agli oggetti non è solo una parola d'ordine casuale che senti nei circoli di programmazione. C'è una ragione dietro il nome - ma cosa? Unisciti a me mentre esploro alcuni dei fondamenti dei concetti di programmazione e spieghiamo ... Per saperne di più. Tutto in PowerShell è un oggetto, il che significa che anche le variabili hanno proprietà e funzioni estese. Cmdlet di PowerShell miglioreranno le competenze di Windows Admin Cmdlet di PowerShell che miglioreranno le tue abilità di amministrazione di Windows Powershell è lo stesso strumento da riga di comando e linguaggio di scripting. Ti dà la possibilità di automatizzare il tuo computer tramite gli stessi comandi che usi per amministrarlo. Leggi di più . Questa proprietà è il motivo per cui è possibile impostare le ricerche su una variabile e terminare con una serie di risultati.
$ yourVar = Get-ChildItem * foreach ($ file in $ yourVar) I tuoi passi
In alcune lingue, l'elaborazione di questo array sarebbe un processo a più fasi. In primo luogo, ottenendo la lunghezza e quindi contando ogni passo.
In PowerShell, si passa attraverso la matrice e si esegue l'azione su ciascuno utilizzando ForEach. Questo ti consente di risparmiare diverse righe di codice, il che è utile se hai uno script più lungo. Ad esempio, il seguente è un piccolo script che utilizza un paio di loop ForEach di PowerShell. Crea un archivio ZIP di tutti i tuoi file che non hai aperto in 30 giorni.
Costruire un sistema di archiviazione di file usando i cicli ForEach
Rompiamo i gradini. Usate Get-ChildItem per ottenere tutti i file nella cartella Documenti. La variabile d'ambiente Cosa sono le variabili d'ambiente e come posso usarle? [Windows] Quali sono le variabili d'ambiente e come posso usarle? [Windows] Ogni tanto apprendo un piccolo consiglio che mi fa pensare "beh, se lo sapessi, un anno fa, mi avrebbe risparmiato ore di tempo". Ricordo vividamente di aver imparato come ... Per saperne di più $ ENV: USERPROFILE esegue lo script utilizzando il profilo corrente. Questa variabile è più portatile di un percorso hardcoded. I risultati di tale ricerca sono assegnati alla variabile $ MyDocs. Creiamo quindi il ciclo ForEach facendolo scorrere tra di loro $ Doc in $ 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) "-Conferma $ false $ origine = $ 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
All'interno del ciclo, controlliamo se ogni file è presente LastAccessTime la proprietà è più vecchia di 30 giorni. Otteniamo questo con il Get-Date cmdlet e utilizzando il AddDays funzione con trenta negativo. Se lo è, aggiungiamo il file al $ myOldDocs array. Una volta completato l'ordinamento dei file, prendiamo il nostro array completato e creiamo un file zip. Questo processo è un po 'più complicato in quanto comporta il richiamo di un po' di .NET. Non preoccuparti se non riesci a capirlo: puoi rubare il codice da questo documento della guida di TechNet.
Per analizzare cosa sta succedendo qui: sposteremo tutti i nostri vecchi file in una nuova directory denominata per la data odierna da oltre 30 giorni. Una volta creata la cartella, dobbiamo creare l'archivio ZIP con lo stesso nome. Verificheremo per assicurarsi che l'archivio abbia avuto successo e che il file .ZIP sia presente, quindi eliminare la nuova cartella. Impostalo come operazione pianificata da eseguire una volta al mese. Ti risparmierai un po 'di spazio e manterrai pulita la tua cartella Documenti.
While and Do While: Loop on Condition
Se si desidera eseguire un ciclo solo quando viene soddisfatta una particolare condizione, si utilizza un ciclo While. Se stai usando una variabile per tracciare il conto alla rovescia, impostalo prima.
i = 0 mentre (i<10) Your Steps i+=1
Il problema è che se non si utilizza un contatore, è possibile che il codice venga eseguito almeno una volta anche se il test è true. Questo è il caso con lo script di esempio qui sotto. Quindi, in questi casi, si desidera utilizzare un ciclo Do-While. Come funzionano i cicli operativi durante la programmazione del computer. Come funzionano i cicli operativi durante i cicli di programmazione del computer I cicli sono uno dei primi tipi di controllo che impari nella programmazione. Probabilmente sai su while e for loops, ma cosa fa un ciclo do-while? Leggi di più . La sintassi è leggermente diversa.
fare I tuoi passi mentre (Dichiarazione condizionale)
L'utilizzo di questi non è così ovvio per un programmatore principiante. Facendo tipicamente gli scripting giornalieri, potresti non incontrarli spesso. Dove sono particolarmente utili è creare un timer improvvisato per testare il successo di un processo.
Creeremo uno script rapido per riavviare una macchina remota e avviseremo se non ritorna in funzione entro 15 minuti. Questo scenario presuppone che si tratti di un server di casa o di un'altra macchina che non si riavvia molto spesso. Sentiti libero di regolare l'orario se il tuo computer si presenta in genere più velocemente.
Riavvia e verifica: utilizzando un ciclo Do-While
Questo script è un po 'più semplice. Innanzitutto, usi il Riavvia il computer comando per riavviare il computer remoto. (Qui abbiamo usato un IP fittizio per i comandi di riavvio, assicurati di sovrascriverlo con il DNS / IP del tuo computer). Quindi creare la variabile contatore, io e impostalo su 0. Quindi, hai il ciclo Do con Start-Sleep che interrompe lo script per 300 secondi (cinque minuti). Un secondo comando aggiunge uno al contatore.
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 "Remote Machine non risponde, per favore controlla." else Write-Output "Riavvia riuscito"
Quindi abbiamo i nostri criteri While. Usiamo un test O per garantire che un errore generi un avviso. L'alternativa è lo script che si interrompe all'infinito in attesa della macchina remota. Per verificare la macchina, stiamo usando il Test-Connection cmdlet. Per semplicità, questo è Ping per PowerShell. Aggiungiamo il parametro -Silenzioso che lo costringe a restituire True o False piuttosto che i risultati dei pacchetti. La seconda parte della dichiarazione O verifica se il contatore è più di tre.
Una volta completato il ciclo, vogliamo creare l'output. Ciò significa che dobbiamo controllare il nostro contatore. Questa è una breve istruzione if / else. Se è maggiore di tre, lo script restituisce che la macchina remota non risponde. Se non lo è, emette che il riavvio ha avuto successo.
Altri loop
Ci sono altri due tipi di loop disponibili in PowerShell. Sono in qualche modo legati ai precedenti due cicli, ma non sono così comunemente usati. Un ciclo For funziona in modo simile all'esempio While. Impostare tutti i criteri nella valutazione, quindi impostare i cmdlet.
for ($ i = 0; $ i -lt 10; $ i ++) I tuoi passi
I loop Do Until sono come i loop Do While, basta cambiare l'istruzione While a Until. Nello script di esempio, sarebbe lo stesso per quanto riguarda il comportamento. È una scelta di stile, ma Do While è più versatile in altre situazioni. Quindi, se ne ricordi uno, Do While è più utile.
PowerShell ha anche una guida per ciascuno di questi loop. Puoi ottenere l'aiuto aggiungendo di prima del nome del ciclo in Get-Help. È quindi possibile visualizzare esempi e altri suggerimenti per ciascun tipo. Questi dovrebbero essere utili se rimani bloccato.
Continuare a crescere con te
A questo punto, hai la maggior parte delle abilità per iniziare a creare script robusti. Che si tratti di automatizzare l'impianto di casa 15 Task avanzati PowerShell può gestire in Windows 10 15 Attività avanzate PowerShell può gestire in Windows 10 PowerShell è simile al prompt dei comandi, ma è meglio. È un potente strumento di amministrazione del sistema. Abbiamo compilato 15 compiti, alcuni semplici, alcuni complessi, che traggono vantaggio dalla magia di PowerShell. Leggi di più o risparmia tempo sul lavoro, i loop aiutano gli script a fare di più. Combinare questi loop con la gestione degli errori sposta il tuo scripting oltre le nozioni di base Gestisci errori PowerShell come un boss con questi suggerimenti Gestisci errori PowerShell come un boss con questi suggerimenti Ci sono quattro parti nella gestione degli errori di PowerShell: il parametro Error Action, i blocchi Try / Catch, il Errore Variabile parametro e registrazione. Impara come farli tutti. Leggi di più . Questo apre la porta a lingue più avanzate.
Che cos'è uno script di PowerShell intelligente che hai creato utilizzando i loop? Condividilo con noi nei commenti.
Scopri di più su: PowerShell, Scripting.