Quelques bases pour débuter en Powershell

Bonjour à tous,

Aujourd’hui je souhaite partager quelques notions pour débuter avec Powershell.

Pour rappel, Powershell est un langage de scripting mais aussi un interpréteur de commande. Tiré du Framework .NET, il détient une bibliothèque de classes et permet donc la manipulation d’objets, contrairement à bien d’autres langages de scripts.

C’est une mine d’or pour l’automatisation des tâches via la réalisation de scripts pour les administrateurs systèmes.

Je vais donc m’intéresser de plus près aux différentes commandes de bases, à mon avis, pour vous permettre de débuter avec ce langage.

Commandes de bases

Comme tout langage, Powershell dispose de commandes de bases permettant de développer nos scripts de façon optimale.

En voici quelques unes :

Commandes pour débuter

Ecrire un commentaire

# Commentaire ligne par ligne
<# Debut commentaire

COMMENTAIRES

Fin commentaire #>

 

Insérer le caractère « ` » permet de continuer l’écriture d’une commande sur plusieurs lignes

Write-host ` 
"Hello World"

Afficher du texte 

  Write-host "Hello World"

Entrer une valeur via le clavier

$Valeur = Read-Host 'Entrez une valeur'
Write-Host $Valeur

Lier deux fonctions grâce au « pipe » « | »

Get-Date | Get-Member -MemberType Methods

Par défaut sur Powershell, la déclaration du type n’est pas obligatoire

Pour déclarer le type directement, il suffit de le mettre entre crochets

[int] $nombre1

Stratégie d’exécution des scripts

Une stratégie d’exécution fait partie de la stratégie de sécurité PowerShell.

Elle détermine si vous pouvez charger des fichiers de configuration, tels que votre profil PowerShell, ou exécuter des scripts. Et si les scripts doivent être signés numériquement avant d’être exécutés.

Get-ExecutionPolicy -List

Voir la signature numérique d’un objet

Get-AuthenticodeSignature "C:\Windows\notepad.exe"

Changer l’autorisation de lancement des scripts – Signés ou non

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted

Manipulations de répertoires/fichiers, pour cet exemple dans le C:

Se situer dans le répertoire C :

Set-Location C:

Créer un répertoire

New-Item -ItemType Directory -Name Test

Afficher le contenu d’un répertoire

Get-ChildItem .\Desktop

Créer un fichier texte avec du contenu

New-Item -ItemType File -Path .\Test\fichier.txt -Value "SALUTATIONS"

Suppression

Remove-Item -Path .\Test -Recurse -Force

              

Variables d’environnement

Set-Location ENV :

$varENV =  $env:USERNAME

echo $varENV

Opérateurs

Les opérations de type calculs sont réalisables via les opérateurs suivants :  + – / * %

Exemple pour une somme :

[int]$nb1 = Read-Host 'Valeur du premier nombre '

[int]$nb2 = Read-Host 'Valeur du second nombre '

$somme=$nb1+$nb2

Write-Host 'La somme vaut ' $somme

Valeur du premier nombre  : 2

Valeur du second nombre  : 5

La somme vaut 7

 

Opérateurs de comparaison -eq -gt -ge -lt -le –ne

Exemple : sélection de tous les services qui sont en activité

Get-Service | Where-Object -Property Status -eq "Running" 

Get-Service | Where-Object -Property Status -eq "Running" | Select-Object -First 10

Opérateurs de comparaisons génériques : -like  -notlike

'powershell' -like 'power*'

Opérateurs de comparaisons pour des expressions régulières : -match –notmatch

‘powershell’ –match ‘power[trs]hell’

Quelques exemples

Le résultat d’une recherche telle que « tous les services » ou ‘tous les utilisateurs » est appelée « Collection ».

Ci-dessous, on cherche dans la collection Process l’objet dont le nom est « cmd »

Get-Process | Where-Object -Property Name -like "cmd*"

Stopper le process

Stop-Process -Name cmd

Get-Process | Where-Object -Property Name -like "cmd*" | Stop-Process

Démarrer/Arrêter un service

Start-Service -name AJRouter 

Stop-Service -name AJRouter

 

Opérateur de plage

$var = 25..39

$var[5] #Récupération de la 5e valeur de la plage - Début de plage 0

Opérateur d’incrémentation

Deux façon d’écrire l’incrémentation d’une variable

$i = $i + 1
$i++

Tableaux & chaînes de caractères

Les deux types fonctionnent de la même façon

$tableau = 'lundi','mardi','mercredi'
$tableau[1] #Lundi
$tableau += 'jeudi' #Ajout d'une nouvelle valeur à la dernière position

$chaine = 'matrice'
$chaine[2] #  Retourne la lettre 't'

 

Récupération des deux premier caractères d’une chaîne

$prenom=Read-Host "Tapez votre prénom"
$nom=Read-Host "Tapez votre nom"

#Récupération et mise en minuscule des variables prénoms et noms
$prenom=$prenom.ToLower()
$nom=$nom.ToLower()

#Récupérer les 2 premières lettres du prénom
$prenom2ftletters=$prenom.Substring(0,2)
Write-Host "@ = "$prenom2ftletters"."$nom"@benedicte-loriot.com"

 

Diviser en un tableau une chaîne selon un caractère spécifique

$info='blablabla;blablabi'
$tab = $info -split ";"
$mail="$tab[0].$tab[1]@benedicte-loriot.com"
$mail=$mail -replace '\s','' #Supprimer les espaces
$mail

Structures de contrôles

IF

if (condition)
    {
       instructions si condition vraie
    }

    elseif (condition)
    {
        instruction si condition du if fausse et condition elseif vraie  
    }

    else {instruction si condition fausse}

Exemples d’utilisation

$texte = Read-Host  'Entrez du texte commençant par a/A'
$texteMAJ = $texte.ToUpper()

if( $texteMAJ[0] -eq 'A') {
    Write-Host "Le texte commence par a/A" -ForegroundColor Green
}

else {
    Write-Host "Le texte ne commence pas par a/A" -ForegroundColor Red
}

$texte = Read-Host  'Entrez du texte commençant par a/A'

if( $texte[0] -match '[AB]') {
    Write-Host "Le texte commence par "$texte[0] -ForegroundColor Green
}

else {
    Write-Host "Le texte ne commence pas par a/A" -ForegroundColor Red
}


SWITCH

switch (Valeur testée) {
    Valeur1 { instruction si = à Valeur1 }
    Valeur2 { instruction si = Valeur2 }
    Default {Instructions pour tous les autres cas }
}

Exemples d’utilisation

$texte = Read-Host  'Entrez du texte commençant par a/A'
$texteMAJ = $texte.ToUpper()
switch ($texteMAJ[0]) {
    A {
        Write-Host "Le texte commence par a/A"
     }

    B {
        Write-Host "Le texte commence par b/B"
    }

    Default {
       Write-Host "Le texte ne commence ni par A ni par B"
    }
}


[int]$nombre = Read-Host "Donner un nombre entre 0 et 10 (inclus)"

switch ($nombre) {

    {$_ -lt 5} {
        Write-Host "Plus petit que 5 :"$nombre
     }

     5 {
         Write-Host "Egale à 5 :"$nombre
     }

     {$_ -gt 5 -and $_ -lt 10 }{
        Write-Host "Nombre supérieur à 5 :"$nombre
     }

    Default {
        Write-Host "Ne remplit pas les conditions" -ForegroundColor red -BackgroundColor Black
    }
}

BOUCLES FOR et FOREACH

FOR

  for (valeur initiale; condition_arret ; incrémentation ) {
    instructions de la boucle
}

Exemples d’utilisation

Addition des nombres de 1 à 10

$somme = 0
for ($i = 0; $i -le 10; $i++) {
    $somme= $somme + $i
}
$somme #le résultat doit être égal à 55

FOREACH

foreach(item in collection/tableau){
    instructions de boucle
}

Exemples d’utilisation

Addition des nombres de 1 à 10

$somme=0
foreach($i in 1..10)
{
    $somme=$somme+$i
}

WHILE / DO WHILE / UNTIL

WHILE

$somme = 0
$i=1
while ($i -le 10) {
    $somme = $somme + $i
    $i++
}
$somme

DO UNTIL

$somme = 0
$i=1
do {
    $somme = $somme + $i
    $i ++
} until(
    $i -gt 10
)
$somme

Structure d’une fonction

function NomFonction {
    param (
        $param1,$param2
    )
    instructions de la fonction
}

Exemples d’utilisation

function addition {
    param (
        [int]$nb1,[int]$nb2
    )
    $somme = $nb1+$nb2
    $nb1+$nb2
}
#Appel de la fonction (simple)
addition -nb1 5 -nb2 10

Sources

Documentation Powershell, Microsoft – https://docs.microsoft.com/en-us/powershell/scripting/how-to-use-docs?view=powershell-7

PowerShell Core et Windows PowerShell, Les fondamentaux du langage, Editions Eni – https://www.editions-eni.fr/

0 réponses

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *