Comment Powershell Foreach, While et autres boucles fonctionnent

Comment Powershell Foreach, While et autres boucles fonctionnent / La programmation

Une première étape cruciale dans l’apprentissage de la programmation consiste à utiliser des boucles. Principes de base absolus de la programmation pour débutants (2ème partie) Principes de base absolus de la programmation pour débutants (2ème partie) Dans la deuxième partie de notre guide de programmation pour débutants absolus, je traiterai de la bases de fonctions, valeurs de retour, boucles et conditions. Assurez-vous d'avoir lu la partie 1 avant d'aborder cette question, où j'ai expliqué… Read More. Heureusement, PowerShell continue de croître avec vos compétences.

Vous pouvez encadrer les commandes existantes que vous utilisez tous les jours à l'intérieur de boucles pour gagner du temps et de l'effort. Vos scripts font le gros du travail pendant que vous faites le travail important de lire plus d'articles sur MakeUseOf!

Powershell ForEach Loops: la porte du traitement avancé des données

ForEach est l'alias de l'objet ForEach. (Un alias est simplement un raccourci pour une commande dans PowerShell.) C’est le bon moment pour parler de la façon dont PowerShell traite les données..

Comme la plupart des langages de programmation modernes, PowerShell est orienté objet. D'où la programmation "orientée objet" tire-t-elle son nom? D'où la programmation "orientée objet" tire-t-elle son nom? Orienté objet n'est pas simplement un mot à la mode aléatoire que vous entendez dans les cercles de programmation. Il y a une raison derrière le nom - mais quoi? Rejoignez-moi pour explorer les principes fondamentaux des concepts de programmation et expliquer… Lire la suite. Tout dans PowerShell est un objet, ce qui signifie que même les variables ont des propriétés et des fonctions étendues. Cmdlets Powershell permettant d'améliorer vos compétences Windows Admin Cmdlets qui améliorent vos compétences Windows Admin. Powershell est un outil de ligne de commande et un langage de script similaires. Il vous donne la possibilité d'automatiser votre ordinateur via les mêmes commandes que vous utilisez pour l'administrer. Lire la suite . Cette propriété est la raison pour laquelle vous pouvez définir vos recherches sur une variable et obtenir un tableau des résultats..

$ yourVar = Get-ChildItem * foreach ($ fichier dans $ yourVar) Vos étapes 

Dans certaines langues, le traitement de ce tableau serait un processus en plusieurs étapes. D'abord, obtenir la longueur et ensuite compter chaque étape.

Dans PowerShell, vous parcourez le tableau et effectuez l'action sur chacun d'eux à l'aide de ForEach. Cela vous permet d'économiser plusieurs lignes de code, ce qui est utile si vous avez un script plus long. Par exemple, voici un petit script qui utilise deux boucles Powershell ForEach. Il crée une archive ZIP de tous vos fichiers que vous n'avez pas ouverts depuis 30 jours..

Construire un système d'archivage de fichiers à l'aide de boucles ForEach

Brisons les marches. Tu utilises Get-ChildItem pour obtenir tous les fichiers du dossier Documents. La variable d'environnement Que sont les variables d'environnement et comment puis-je les utiliser? [Windows] Que sont les variables d'environnement et comment puis-je les utiliser? [Windows] De temps en temps, j'apprendrai un petit conseil qui me fait penser "bon, si je le savais il y a un an, cela m'aurait épargné des heures de temps". Je me souviens très bien d'avoir appris à… Read More $ env: USERPROFILE exécute le script en utilisant le profil actuel. Cette variable est plus portable qu'un chemin codé en dur. Les résultats de cette recherche sont affectés à la variable $ MyDocs. Nous créons ensuite notre boucle ForEach en la faisant passer pas à pas $ Doc dans $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse foreach ($ doc dans $ MyDocs) if ($ doc.LastAccessTime -lt $ (Get-Date) .addDays (-30)) $ oldDocs + = $ doc $ ArchiveFolder = Nouvel-Item -Path "$ ($ env: USERPROFILE) \ Documents \ $ ((Get-Date -Format MMddyy) .toString ()) "-ItemType Directory foreach ($ doc dans $ oldDocs) Move-Item -Path $ doc.FullName -Destination" $ ($ ArchiveFolder.FullName) \ $ ($ doc.Name) "-Confirm $ false $ source = $ ArchiveFolder.FullName $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder.Name) .zip" Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile] :: CreateFromDirectory ($ source, $ destination) if (chemin_test $ destination) Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false 

Dans la boucle, nous vérifions si chaque fichier est LastAccessTime la propriété a plus de 30 jours. Nous obtenons cela avec le Avoir un rendez-vous cmdlet, et en utilisant le AddDays fonctionner avec négatif trente. Si c'est le cas, nous ajoutons le fichier au $ myOldDocs tableau. Une fois le tri terminé, nous prenons notre tableau complet et créons un fichier zip. Ce processus est un peu plus compliqué car il implique l'invocation d'un peu de .NET. Ne vous inquiétez pas si vous ne le comprenez pas bien. Vous pouvez voler le code de ce document d'aide TechNet..

Pour décomposer ce qui se passe ici: Nous allons déplacer tous nos anciens fichiers vers un nouveau répertoire nommé pour la date d'aujourd'hui datant de plus de 30 jours. Une fois ce dossier créé, nous devons créer l’archive ZIP du même nom. Nous allons tester pour nous assurer que l'archive a réussi et que le fichier .ZIP est présent, puis supprimons le nouveau dossier. Définissez cette tâche comme une tâche planifiée à exécuter une fois par mois. Vous économiserez de l'espace et garderez votre dossier Documents propre.

While and While While: boucles en condition

Si vous souhaitez exécuter une boucle uniquement lorsqu'une condition particulière est remplie, utilisez une boucle While. Si vous utilisez une variable pour suivre le compte, définissez cette première.

i = 0 alors que (i<10) Your Steps i+=1  

Le problème est que si vous n'utilisez pas de compteur, vous voudrez peut-être que votre code s'exécute au moins une fois, même si le test est vrai. C'est le cas de l'exemple de script ci-dessous. Dans ces cas, vous souhaitez utiliser une boucle Do-While. Comment les boucles Do-While fonctionnent-elles en programmation informatique? Comment les boucles Do-While fonctionnent-elles en programmation informatique? Les boucles sont l'un des premiers types de contrôle que vous apprendrez en programmation. Vous connaissez probablement les boucles while et for, mais que produit une boucle do-while? Lire la suite . La syntaxe est légèrement différente.

do Vos étapes while (Déclaration conditionnelle) 

Leur utilisation n’est pas aussi évidente pour un programmeur débutant. En effectuant des scripts quotidiens typiques, vous ne pouvez pas les rencontrer aussi souvent. Là où ils sont particulièrement utiles, c'est de créer un chronomètre de fortune pour tester le succès d'un processus..

Nous allons créer un script rapide pour redémarrer une machine distante et alerter si elle ne revient pas dans les 15 minutes. Ce scénario suppose que c'est un serveur domestique ou un autre ordinateur qui ne redémarre pas très souvent. N'hésitez pas à ajuster le temps si votre ordinateur est généralement plus rapide.

Redémarrage et vérification: utilisation d'une boucle Do-While

Ce script est un peu plus simple. Tout d'abord, vous utilisez le Redémarrer l'ordinateur commande pour redémarrer la machine distante. (Nous avons utilisé une adresse IP fictive ici pour les commandes de redémarrage, assurez-vous de l'écraser avec l'adresse DNS / IP de votre ordinateur). Puis créez la variable compteur, je et réglez-le sur 0. Ensuite, votre boucle Do avec Start-Sleep arrête le script pendant 300 secondes (cinq minutes). Une deuxième commande ajoute un au compteur.

Redémarrez-l'ordinateur -nomordinateur 127.0.0.1 i = 0 do Start-Sleep -Seconds 300 $ i + = 1 while ((! (Test-Connection 127.0.0.1 -Quiet)) -or $ i -gt 3) if ( $ i -gt 3) Write-Ouput "La machine distante ne répond pas, veuillez vérifier."  else Write-Output "Reboot Succeeded" 

Ensuite, nous avons nos critères While. Nous utilisons un test Ou pour nous assurer qu'une défaillance génère une alerte. L’alternative est le script qui boucle en boucle, attendant sans fin pour la machine distante. Pour vérifier la machine, nous utilisons le Test de connexion cmdlet. Pour plus de simplicité, il s’agit de Ping pour PowerShell. Nous ajoutons le paramètre -Silencieux ce qui l'oblige à retourner Vrai ou Faux plutôt que les résultats des paquets. La deuxième partie de l'instruction Or vérifie si le compteur est supérieur à trois..

Une fois la boucle terminée, nous voulons créer la sortie. Cela signifie que nous devons vérifier notre comptoir. Ceci est une déclaration rapide if / else. S'il est supérieur à trois, le script indique que l'ordinateur distant ne répond pas. Si ce n'est pas le cas, il indique que le redémarrage a réussi.

Autres boucles

Deux autres types de boucles sont disponibles dans PowerShell. Ils sont quelque peu liés aux deux boucles précédentes, mais ils ne sont tout simplement pas aussi couramment utilisés. Une boucle For fonctionne de manière similaire à l'exemple While. Vous définissez tous vos critères dans l'évaluation, puis définissez vos cmdlets.

pour ($ i = 0; $ i -lt 10; $ i ++) Vos démarches 

Les boucles Do Until sont comme les boucles Do While, vous modifiez simplement l'instruction While jusqu'à Until. Dans l'exemple de script, ce serait la même chose pour le comportement. C'est un choix de style, mais le Do While est plus polyvalent dans d'autres situations. Donc, si vous ne vous en souvenez que, Do While est plus utile.

PowerShell a également de l'aide pour chacune de ces boucles. Vous pouvez obtenir de l'aide en ajoutant sur avant le nom de la boucle dans Get-Help. Vous pouvez ensuite voir des exemples et d'autres astuces pour chaque type. Ceux-ci devraient être utiles si vous êtes bloqué.

Continuer à grandir avec vous

À ce stade, vous avez la plupart des compétences pour commencer à créer des scripts robustes. Qu’il s’agisse d’automatiser votre plate-forme domestique 15 Tâches avancées que PowerShell peut gérer dans Windows 10 15 Tâches avancées que PowerShell peut traiter dans Windows 10 PowerShell est similaire à l’invite de commande, mais meilleur. C'est un puissant outil d'administration système. Nous avons compilé 15 tâches, simples ou complexes, qui tirent parti de la magie de PowerShell. Lire plus ou gagner du temps au travail, les boucles aident vos scripts à en faire plus. La combinaison de ces boucles avec la gestion des erreurs déplace votre script au-delà des bases. Gestion des erreurs PowerShell comme un patron avec ces astuces Gestion des erreurs PowerShell comme un patron avec ces astuces La gestion des erreurs PowerShell se compose de quatre éléments: le paramètre Erreur Action, blocs Try / Catch, Paramètre d'erreur de variable et journalisation. Apprenez à les faire tous. Lire la suite . Cela ouvre la porte à des langues plus avancées.

Qu'est-ce qu'un script PowerShell intelligent que vous avez créé à l'aide de boucles? Partagez-le avec nous dans les commentaires.

Explorer plus sur: PowerShell, Scripting.