Annuncio pubblicitario
Un primo passo cruciale l'apprendimento della programmazione funziona con i loop Le basi assolute della programmazione per principianti (parte 2)Nella parte 2 della nostra guida assoluta alla programmazione per principianti, tratterò le basi di funzioni, valori di ritorno, loop e condizionali. Assicurati di aver letto la parte 1 prima di affrontare questo, dove ho spiegato il ... Leggi di più . Per fortuna, PowerShell continua a crescere con le tue capacità.
È possibile inquadrare i comandi esistenti che si utilizzano ogni giorno all'interno di loop per risparmiare tempo e fatica. I tuoi script fanno il duro lavoro mentre fai l'importante lavoro di leggere più articoli su MakeUseOf!
Powershell ForOach Loops: la porta alla gestione avanzata dei dati
ForEach è l'alias per ForEach-Object. (Un alias è semplicemente una scorciatoia per un comando in PowerShell.) È un buon momento per parlare del modo in cui PowerShell gestisce i dati.
Come la maggior parte dei linguaggi di programmazione moderni,
PowerShell è orientato agli oggetti Da dove ha preso il nome la programmazione "orientata agli oggetti"?Orientato agli oggetti non è solo una parola d'ordine casuale che senti nelle cerchie di programmazione. C'è un motivo dietro il nome - ma cosa? Unisciti a me mentre esploro alcuni dei fondamenti dei concetti di programmazione e spiego ... Leggi di più . Tutto in PowerShell è un oggetto, ovvero anche variabili hanno proprietà e funzioni estese Cmdlet Powershell che miglioreranno le tue capacità di amministratore di WindowsPowershell è lo strumento da riga di comando e il linguaggio di scripting in parti uguali. 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 puoi impostare le tue ricerche su una variabile e finire con un array 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. Innanzitutto, ottenendo la lunghezza e poi contando ogni passo.
In PowerShell, si passa attraverso l'array e si esegue l'azione su ciascuno di essi utilizzando ForEach. Questo ti fa risparmiare diverse righe di codice, il che è utile se hai uno script più lungo. Ad esempio, di seguito è riportato un piccolo script che utilizza un paio di loop Powershell ForEach. Crea un archivio ZIP di tutti i tuoi file che non hai aperto da 30 giorni.
Creazione di un sistema di archiviazione file utilizzando ForEach Loops
Rompiamo i passaggi. 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? [Finestre]Ogni tanto imparerò un piccolo suggerimento che mi fa pensare "bene, se lo sapessi un anno fa, mi avrebbe risparmiato ore di tempo". Ricordo vividamente di aver imparato a ... Leggi di più $ env: USERPROFILE esegue lo script utilizzando il profilo corrente. Questa variabile è più portatile di un percorso hardcoded. I risultati di quella ricerca sono assegnati alla variabile $ MyDocs. Quindi creiamo il nostro ciclo ForEach facendolo scorrere attraverso ciascuno di essi $ 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) {Sposta-Item -Path $ doc. FullName -Destination "$ ($ ArchiveFolder. FullName) \ $ ($ doc. Nome) "-Confirm $ false. } $ source = $ ArchiveFolder. Nome e cognome. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Nome) .zip" Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ source, $ destination) if (test-path $ destination) {Rimuovi-Item -Path $ ArchiveFolder -Recurse -Confirm $ false. }
All'interno del ciclo, controlliamo se ogni file è LastAccessTime la proprietà è più vecchia di 30 giorni. Lo capiamo con il Get-Date cmdlet e utilizzando il AddDays funzione con trenta negativo. In tal caso, aggiungiamo il file a $ myOldDocs Vettore. Una volta completato l'ordinamento dei file, prendiamo il nostro array completo 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 lo afferri abbastanza: puoi rubare il codice questo documento di aiuto di TechNet.
Per analizzare ciò che sta accadendo qui: trasferiremo tutti i nostri vecchi file in una nuova directory denominata per la data odierna per più di 30 giorni. Una volta compilata quella cartella, dobbiamo creare l'archivio ZIP con lo stesso nome. Verificheremo che l'archivio abbia avuto esito positivo e che il file .ZIP sia presente, quindi elimineremo la nuova cartella. Impostalo come attività pianificata da eseguire una volta al mese. Ti risparmierai un po 'di spazio e manterrai la cartella Documenti pulita.
While and Do While: cicli a condizione
Se si desidera eseguire un ciclo solo quando viene soddisfatta una particolare condizione, si utilizza un ciclo While. Se stai utilizzando una variabile per tracciare il conto alla rovescia, impostalo prima.
i = 0. while (i <10) {I tuoi passaggi i + = 1. }
Il problema è che se non si utilizza un contatore, è possibile che il codice venga eseguito almeno una volta anche se il test è vero. Questo è il caso con lo script di esempio di seguito. Quindi in quei casi, vuoi usare un ciclo Do-While Come funzionano i loop Do-While nella programmazione del computerI loop sono uno dei primi tipi di controllo che imparerai in programmazione. Probabilmente conosci il ciclo while e for, ma cosa compie un ciclo do-while? Leggi di più . La sintassi è leggermente diversa.
fai {I tuoi passi. } while (Dichiarazione condizionale)
L'uso di questi non è così ovvio per un programmatore principiante. Facendo script tipici di tutti i giorni, potresti non incontrarli così spesso. Dove sono particolarmente utili è creare un timer improvvisato per testare il successo di un processo.
Costruiremo uno script rapido per riavviare un computer remoto e avvisare se non viene ripristinato entro 15 minuti. Questo scenario presuppone che si tratti di un server principale o di un altro computer che non si riavvia molto spesso. Sentiti libero di regolare l'ora se il tuo computer arriva in genere più velocemente.
Riavvio e controllo: utilizzo di un ciclo Do-While
Questo script è un po 'più semplice. Innanzitutto, usi il Riavvia il computer comando per riavviare il computer remoto. (Abbiamo usato un IP fittizio qui per i comandi di riavvio, assicurati di sovrascriverlo con il DNS / IP del tuo computer). Quindi crea la variabile contatore, io e impostarlo su 0. Successivamente, hai il tuo ciclo Do con Start-Sleep che interrompe lo script per 300 secondi (cinque minuti). Un secondo comando ne aggiunge uno al contatore.
Restart-Computer -ComputerName 127.0.0.1. i = 0. do {Start-Sleep -Secondi 300 $ i + = 1. } while ((! (Test-Connection 127.0.0.1 -Quiet)) -o $ i -gt 3) if ($ i -gt 3) {Write-Ouput "La macchina remota non risponde, controlla." } else {Scrittura-output "Riavvio riuscito" }
Quindi abbiamo i nostri criteri While. Utilizziamo un test Or per garantire che un errore generi un avviso. L'alternativa è lo script in loop che attende all'infinito la 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 anziché i risultati dei pacchetti. La seconda parte dell'istruzione Or 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 è un'istruzione if / else rapida. Se è maggiore di tre, lo script mostra che il computer remoto non risponde. In caso contrario, genera che il riavvio ha avuto esito positivo.
Altri loop
Esistono altri due tipi di loop disponibili in PowerShell. Sono in qualche modo correlati ai due precedenti loop, ma non sono così comunemente usati. Un ciclo For funziona in modo simile all'esempio While. Tutti i criteri sono stati impostati nella valutazione, quindi i cmdlet.
per ($ i = 0; $ i -lt 10; $ i ++) {I tuoi passi. }
I loop Do Until sono come i loop While While, basta cambiare l'istruzione While in 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 solo uno, Do While è più utile.
PowerShell ha anche un aiuto per ciascuno di questi loop. Puoi ottenere 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.
Continuando a crescere con te
A questo punto, hai la maggior parte delle competenze per iniziare a creare script robusti. Se automatizzare il tuo impianto di casa 15 Attività avanzate che PowerShell può gestire in Windows 10PowerShell è simile al prompt dei comandi, ma meglio. È un potente strumento di amministrazione del sistema. Abbiamo compilato 15 attività, alcune semplici, altre complesse, che beneficiano della magia di PowerShell. Leggi di più o risparmiando tempo sul lavoro, i loop aiutano i tuoi script a fare di più. Combinando questi loop con la gestione degli errori sposta gli script oltre le nozioni di base Gestisci gli errori di PowerShell come un boss con questi suggerimentiLa gestione degli errori di PowerShell ha quattro parti. Scopri come correggere gli errori e altro in Microsoft PowerShell. Leggi di più . Questo apre le porte a lingue più avanzate.
Che cos'è uno script PowerShell intelligente che hai creato usando i loop? Condividilo con noi nei commenti.
Michael non usava un Mac quando erano condannati, ma può scrivere il codice in Applescript. Ha una laurea in Informatica e inglese; da un po 'scrive di Mac, iOS e videogiochi; ed è stato una scimmia IT diurna per oltre un decennio, specializzato in scripting e virtualizzazione.