[POWERSHELL] La boucle FOREACH

Hello à tous !
Voici une instruction de Powershell qui sert énormément.

Aujourd’hui, notre exemple est le suivant :
Nous devons récupérez les logs d’une vingtaine de poste.

Pour ce faire, nous allons récupérer nos postes et les mettre dans un fichier txt. Notez les uns sous les autres.

$PCS = Get-Content "C:\OneDrive\Script\list.txt"

Ici, nous définissons notre variable $PCS avec le cmdlet Get-Content.
La valeur de notre variable  est égale au contenu de notre fichier “C:\OneDrive\Script\list.txt”.
Maintenant, réfléchissons à la manière de récupérer les logs désirés.
Voici le script :

Copy-Item -filter *.log "\\$PC\c$\program Files\NPortAdminSuite\bin\" "C:\OneDrive\Script\$PC\" -Recurse

Le cmdlet Copy-Item nous permet de copier des fichiers.
L’option -filter *.log permet de prendre uniquement les fichiers avec l’extension .log
Le 1er chemin correspond à la source.
Le 2nd correspond à la destination.

Maintenant, nous devons faire en sorte que chaque ligne de notre fichier texte, où sont inscrit les postes, soit traitée pour que nous puissions récupérer nos logs.

foreach ($PC in $PCS) {}

Nous utiliserons la boucle foreach.
Entre (), nous déclarons une nouvelle variable $PC.
Elle correspond à chaque ligne de notre fichier texte.

Maintenant, mettons tout cela en ordre :

$PCS = Get-Content "C:\OneDrive\Script\list.txt"
foreach ($PC in $PCS) {
Copy-Item -filter *.log "\\$PC\c$\program Files\NPortAdminSuite\bin\" "C:\OneDrive\Script\$PC\" -Recurse
}

Tous les PC présents dans notre fichier texte seront traités.
Ainsi, nous récupérerons tous les fichiers logs en un clic !

C’est merveilleux !

[POWERSHELL] Compter le nombre d’objet

Hello à tous !
Il peut arrivé que l’on vous demande le nombre d’objet présent dans un groupe de sécurité (ou de distribution).
Plusieurs solutions possibles :

  • Compter tous les objets 1 par 1 (peut être très fatiguant 🙂 et peut comporter des erreurs)
  • Faire une extraction Excel et sélectionner ce que l’on souhaite
  • Compter avec PowerShell. Nous allons plutôt utiliser cette méthode.

Nous allons utiliser les fonctions “Measure” et “Count”.
Nous allons compter les membres présents dans le groupe SHINPOGroupeTEST
Voici le script :

#####Définissons notre variable
$USERS = Get-ADGroupMember -Identity SHINPOGroupeTEST | Select-Object Name | measure
#####Commande qui permet d'afficher le nombre d'objet trouvé
Write-Host $USERS.Count

Get-ADGroupMember : Permet de voir le contenu d’un groupe
Identity : Permet de cibler le groupe voulu
Select-Object : Permet de récupérer la valeur voulue
measure : Indique que nous souhaitons compter
Write-Host : Permet d’afficher le résultat

#####Vérifions cela "en ajoutant une ligne en plus à notre script" :
Get-ADGroupMember -Identity SHINPOGroupeTEST | Select-Object Name
Nous pouvons voir ici que le compte est bon.

Notre cher ami PowerShell a bien compté les membres présents dans notre groupe.

[POWERSHELL] Récupérer la date

Powershell a de base cette cmdlet qui permet d’avoir la date et l’heure de la machine.

Cela peut être très utilise pour dater des logs, ou nommer certains fichiers.
La commande est la suivant :


Get-Date

Ce qui donne le résultat suivant :


Nous avons récupéré la date au format DATE et HEURE

Nous pouvons utiliser la fonction -Format pour récupérer une date plus simple :


ATTENTION, bien mettre MM (pour le mois) et non mm (qui sera pour les minutes)

Si nous souhaitons avoir la date en lettre et chiffre ou uniquement l’heure, nous utiliserons la fonction -DisplayHint :

Et voilà, rien de compliqué, mais il faut juste le savoir.

[POWERSHELL] Retrouver un cmdlet

Hello à tous,

A force de tripoter notre outil préféré et de tester plusieurs cmdlet, nous pouvons nous y perdre.

Exemple :

Je dois retrouver un cmdlet et pas moyen de le retrouver.

Mais comment faire !?

Il existe un cmdlet pour ça aussi (Powershell sait tout faire !)


Get-command

Disons que nous devons trouver un cmdlet pour chercher tous nos enregistrements DNS.


Get-Command -Name '*dns*'

Maintenant, nous avons toutes les commandes disponibles de Powershell concernant DNS.

Il nous reste juste à chercher la bonne, c’est fou non ?

[POWERSHELL] Copie de fichier

Nous pouvons dire pleins de choses avec PowerShell.
Revenons au basique avec une simple copie de fichier.


#####Copie UNIQUEMENT LES DOSSIERS, LES FICHIERS NE SONT PAS PRIS EN COMPTES
Copy-Item -Path C:\TEMP\POUBELLE\* -Destination C:\TEMP\APPLICATION
#####PRENDS EN COMPTE LES FICHIERS
Copy-Item -Path C:\TEMP\POUBELLE\* -Destination C:\TEMP\APPLICATION -Recurse

Comme dit plus haut, nous sommes sur du basique.
Mais qui n’a jamais eu besoin d’une copie de fichier….:-)

[POWERSHELL] Création en MASSE d’utilisateurs

Donc oui, créer un utilisateur, c’est bien !
Mais en créer plusieurs d’un clic, c’est mieux !

Car oui, on peut nous demande 10, 20, 50 … comptes pour un projet particulier.
Des comptes de Services pour du SQL, IIS, Accès BDD, etc… et franchement, se les taper à la mano….ca serai fatiguant.

Je vous laisse le script :


#####Définition des variables
$USERS = Import-Csv -path 'C:\TEMP\CreateADUsers\UsersAD.csv' -Delimiter ','
$PATH = "OU=Utilisateurs,OU=HOME,DC=shinpo,DC=fr"

#####Création d'une boucle pour traiter toutes les lignes présentes du fichier
foreach ($USER in $USERS) {
New-ADUser -Name $USER.Name  -GivenName $USER.Prenom -Surname $USER.Nom -SamAccountName $USER.SamAccountName -UserPrincipalName $USER.UPN -Path $PATH -description $USER.description -Enabled $true -AccountPassword (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -force) -passThru
}

Après exécution de ce script, tous les utilisateurs présents dans le fichier CSV seront ajoutés dans notre AD.

Création du fichier CSV.
La 1ere ligne de votre fichier DOIT contenir les en-têtes (vous les choisissez, dès l’instant que vous vous retrouvez. Nous pourrions très bien mettre TATA, TOTO, TUTU et LaRéponseDJeanPierre) :
Nom,Prenom,SamAccountName,Name,UPN,Description
Tout est explicite sauf “Name”, j’aurai pu choisir ‘Nom d’affichage’ mais c’était très long à écrire, bref.

Voici le reste du fichier CSV.
RORONOA,Zoro,Zoro.RORONOA,Zoro RORONOA,Zoro.RORONOA@shinpo.fr,Compte de Pirate
USHIWA,Sasuke,Sasuke.USHIWA,Sasuke USHIWA,Sasuke.USHIWA@shinpo.fr, Survivant des USHIWA
VEGATA,VEGATA,VEGATA,VEGETA,VEGATA@shinpo.fr,Roi de la planete VEGETA
HATATE,Kakashi,Kakashi.HATATE,Kakashi HATATE,Kakashi.HATATE@shinpo.fr,Utilisateur du Sharingan
LIGHT,Yagami,Yagami.LIGHT,Yagami LIGHT,Yagami.LIGHT@shinpo.fr,Possesseur du DeathNote


Nous avons notre contenu (mais nous aurions pu aller plus loin en ajoutant des adresses Mails, postales, numéro de TEL, le service, l’organisation, et encore d’autres attributs à ne plus savoir qu’en faire.

Notre fichier CSV terminé, passons aux explications du script PowerShell.

Commençons par la boucle FOREACH :


foreach ($USER in $USERS)

FOREACH crée une variable pour chaque ligne ($USER) du fichier CSV ($USERS).
Nous utiliserons juste cette nouvelle variable : $USER.”l’option que nous avons besoin”.
Nous pourrons voir que cette option fait référence aux colonnes de notre fichier CSV.
Donc, nous pouvons mettre ce que nous souhaitons dans ce fichier.

Je vous laisse découvrir les autres options, qui ne sont pas essentielles mais bien pratique.
Maintenant, vérifions que nos utilisateurs ont bien été créer avec notre script.
Nous avons 2 méthodes, aller dans l’AD et vérifier la présence de nos utilisateurs.
Ou juste faire une petit ligne de commande pour vérifier cela.


$PATH = "OU=Utilisateurs,OU=HOME,DC=shinpo,DC=fr"
Get-ADUser -SearchBase $PATH -Filter * -Properties * | Select-Object SamAccountName,UserPrincipalName,description

[POWERSHELL] Création de Groupe de Sécurité

Hello à vous,
Oui, la création de groupe de sécurité être très facile graphiquement.
Mais vu que nous pouvons le faire en PowerShell, pourquoi s’en priver ?
La commande est simple.
La voici :


#####Création d'un Groupe de Sécurité
New-ADGroup -SamAccountName "SHINPOGroupeTEST" -DisplayName "[SHINPO] Groupe TEST" -GroupCategory Security -GroupScope Global -Name "[SHINPO] Groupe TEST" -Path "OU=Groupes,OU=HOME,DC=shinpo,DC=fr" -Description "Groupe de TEST"

Si vous ne savez pas quelle option mettre derrière votre cmdlet, vous pouvez regarder dans les attributs d’un groupe existant :

Par partir des attributs, vous avez toutes les options et à quoi elles se réfèrent.
Exécutons notre script et regardons le résultat avec la commande suivant :


Get-ADGroup -SearchBase "OU=Groupes,OU=HOME,DC=shinpo,DC=fr" -Filter * -Properties * | Select-Object Name,SamAccountName,Description
Notre Groupe de Sécurité a bien été créé.

[POWERSHELL] Création d’un utilisateur AD

Nous allons voir comment créer un utilisateur AD via POWERShell.
Il est toujours intéressant de savoir faire ce genre de chose, et surtout, le faire en masse, mais cela sera pour plus tard.


####### Definition des variables
$VILLE = 'Karakura'
 
####### Création Utilisateur dans AD
New-ADUser -Name "Ichigo KUROSAKI" -GivenName "Ichigo" -Surname "KUROSAKI" -SamAccountName "Ichigo.KUROSAKI" -UserPrincipalName "Ichigo.KUROSAKI@shinpo.fr" -Path "OU=Utilisateurs,OU=HOME,DC=shinpo,DC=fr" -City $VILLE -description 'Shinigami Remplacant' -AccountPassword(Read-Host -AsSecureString "Input Password") -Enabled $true

Explications

# : Permet de commenter ce qu’il y a après.
$ : Permet de définir une variable
New-ADUser : CMDLET qui permet de créer un nouveau compte utilisateur
-Name : Nom d’affichage
 -GivenName : Prénom
-Surname : NOM
-SamAccountName : Nom de session de l’utilisateur
-UserPrincipalName : UPN de l’utilisateur
-Path : Chemin où sera créé l’utilisateur dans l’AD
-City : Ville
-description : Description
-AccountPassword : Création d’un mot de passe pour l’utilisateur fraîchement créé
-Enabled $true : Active le compte (il est désactivé par défaut)

Et voilà, ce n’est pas sorcier.
Bien sûr, cette cmdlet a beaucoup plus d’options que je vous laisserai découvrir par vous-même.