TUTOS.EU

PowerShell - Faire une boucle For

Utiliser une boucle For en PowerShell

Il y a 2 façons de faire une boucle de type for each en powershell.

Voici la première avec foreach :

#Version du 20 fevrier 2013

Clear-Host
$MonTableau = @()

$MonTableau += "Ligne 1"
$MonTableau += "Ligne 2"
$MonTableau += "Ligne 3"
$MonTableau += "Ligne 4"

#Méthode 1
foreach ($UneLigne in $MonTableau){
	Write-Host $UneLigne
}
Lien vers le fichier : cliquez ici Copier le code

Notez que pour quitter la boucle vous pouvez faire

foreach ($UneLigne in $MonTableau){
	Write-Host $UneLigne
	break
}
Lien vers le fichier : cliquez ici Copier le code

La seconde :

#Version du 20 fevrier 2013

Clear-Host
$MonTableau = @()

$MonTableau += "Ligne 1"
$MonTableau += "Ligne 2"
$MonTableau += "Ligne 3"
$MonTableau += "Ligne 4"

for ($MonCompteur = 0; $MonCompteur -le $MonTableau.Length; $MonCompteur++){
	Write-Host $MonTableau[$MonCompteur]
}
Lien vers le fichier : cliquez ici Copier le code

La commande ForEach-Object est elle à utiliser pour effectuer une boucle derrière un | dont elle tire ses données.

Ci-dessous un exemple pour récupérer l'adresse mail des membres d'un groupe AD.
Get-ADGroupMember ne permet pas de récupérer directement l'adresse mail d'un membre de groupe, c'est pour cela que pour chaque membre, avec l'aide de la commande ForEach-Object, on fait appel à Get-ADUser pour avoir un complément d'information pour chaque user :

Import-Module ActiveDirectory

Get-ADGroupMember -identity "Nom groupr AD" | ForEach-Object {Get-ADUser -Identity $_.SamAccountName -property mail} | select name, SamAccountName, UserPrincipalName, mail | sort-object -property name | format-table
Lien vers le fichier : cliquez ici Copier le code

Notez que l'on peut stocker le résultat d'une commande dans un objet puis lister chaque résultat un à un si l'objet n'est pas nul.

Exemple :

$Date = (Get-Date).AddDays(-2)
$objEvents = Get-WinEvent Application | Where-Object {$_.TimeCreated -ge $Date} | Select-Object -first 5 | Format-Table TimeCreated, LogName, Level, Id, ProviderName, Message

#if (!($objEvents -eq $null)){
#if ($objEvents){
if ($objEvents -ne $null){
	add-content $MonFichier "Erreur détectée"
	foreach ($OneVent in $objEvents){
		$OneVent
		#write-host $OneVent.LogName
	}
}
Lien vers le fichier : cliquez ici Copier le code

Pages Web

Site WebDescription
Foreach et ForEach-ObjectDifférence entre PowerShell Foreach et ForEach-Object

Article(s) suivant(s)

2