Tutoriels powershell

Powershell - Gestion des disques et des volumes

Obtenir l’espace disque restant

La commande suivante permet de récupérer l’espace disque restant sur le disque C:/.

J’y applique un formatage pour que le résultat soit lisible par un humain via le paramètre /1GB.

Sans ce paramètre, le résultat donné est en Bits, ici il sera en Go.

(Get-Volume -DriveLetter C).sizeRemaining /1Gb

Vérification des erreurs de volumes

Il est possible de vérifier l’état de santé des volumes de nos disques.

Powershell - Interaction avec la couche réseau

Déterminer le nom de l’interface réseau active

Dans un premier temps, je stocke dans une variable le nom de l’interface réseau.

La variable utilisée se nomme $InterfaceName.

$InterfaceName = (Get-NetAdapter -Name * -Physical | Where {$_.Status -eq "Up"}).Name

Cette commande va permettre de sélectionner l’interface physique et non virtuelle via le paramètre -Physical la carte réseau qui est actuellement active et utilisée via l’argument de recherche Where {$_.Status -eq “Up”})

Récupération de détails concernant la carte réseau

Ensuite, la fonction Get-NetIPConfiguration permet de récupérer une bonne partie des paramètres de la carte réseau.

Powershell - Création de logs pour votre programme

Créer le fichier de log

Nous allons créer une fonction nommée CreationFichierLog.

Function CreationFichierLog
{
}

Dans un premier temps, nous allons assigner un nom à notre fichier :

$nomFichier = "fichierLog.log"

Puis tenter la création du fichier via un Try Catch :

Try { 
    New-Item -type file $nomFichier -Force
}
catch { 
    Write-Host "Impossible de créer le fichier log" -ForegroundColor Red
    Write-Host $_ # Affiche le message d'erreur généré par Powershell
}

Et retourner le nom du fichier nouvellement créé :

Powershell - Création de logs pour votre programme

Date de publication : January 4, 2025
Temps de lecture estimé : 3 minutes
Auteur : Axel Agnan

Créer le fichier de log

Nous allons créer une fonction nommée CreationFichierLog.

Function CreationFichierLog
{
}

Dans un premier temps, nous allons assigner un nom à notre fichier :

$nomFichier = "fichierLog.log"

Puis tenter la création du fichier via un Try Catch :

Try { 
    New-Item -type file $nomFichier -Force
}
catch { 
    Write-Host "Impossible de créer le fichier log" -ForegroundColor Red
    Write-Host $_ # Affiche le message d'erreur généré par Powershell
}

Et retourner le nom du fichier nouvellement créé :

return $nomFichier

La structure finale de notre fonction est la suivante :

Function  CreationFichierLog
{
    $nomFichier = "fichierLog.log"
    Try { 
        New-Item -type file $nomFichier -Force
    }
    catch { 
        Write-Host "Impossible de créer le fichier log" -ForegroundColor Red
        Write-Host $_ # Affiche le message d'erreur généré par Powershell
    }
    return $nomFichier
}

Ecrire dans le fichier de log

La prochaine étape consiste à écrire dans le fichier de log.

Dans cette fonction, nous allons créer des paramètres permettant d’indiquer si nous voulont aussi une sortie console via le Write-Host ainsi que le niveau du message (Alerte, Erreur etc…)

Création de la fonction WriteLog :

Function WriteLog
{
}

Ajout des paramètres pour sélectionner le niveau, le debug console et le message à écrire :

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True)]$fichier,
    [Parameter(Mandatory=$True)][Bool]$mode,
    [Parameter(Mandatory=$True)][String]$niveau,
    [Parameter(Mandatory=$True)][String]$message
)

Et enfin, le code pour écrire dans le fichier :

switch($niveau)
{
    "alerte" {
        $Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
        if($mode -eq $True)
        {
            Write-Host $Message -ForegroundColor "Yellow" 
        }
        Add-Content $fichierLog -Value "<$Stamp> <warn>  $Message"
    }
    "erreur" {
        $Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
        if($mode -eq $True)
        {
            Write-Host $Message -ForegroundColor "Red" 
        } 
        Add-Content $fichierLog -Value "<$Stamp> <error> $Message"
    }
}

Une explication concernant les paramètres s’impose :

  • le paramètre $fichier représente le nom du fichier précédemment créé.
  • Le paramètre $mode prend uniquement un booléen comme valeur. Dans notre code, si le mode est True, alors nous écrirons un retour dans la console.
  • Concernant le paramètre $niveau, celui-ci accepte n’importe quel string du moment que sa valeur est présente dans le switch.
  • Enfin, le paramètre $message représente le message à écrire dans le log et dans la console, il faut lui donner un string également.

Lors de l’affichage du message en mode console, une couleur d’arrière plan est utilisée via le paramètre -ForeGroundColor.

La fonction complète est donc :

Function WriteLog
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)][Bool]$mode,
        [Parameter(Mandatory=$True)][String]$niveau,
        [Parameter(Mandatory=$True)][String]$message
    )
    switch($niveau)
    {
        "alerte" {
            $Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
            if($mode -eq $True)
            {
                Write-Host $Message -ForegroundColor "Yellow" 
            }
            Add-Content $global:fichierLog -Value "<$Stamp> <warn>  $Message"
        }
        "erreur" {
            $Stamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss")
            if($mode -eq $True)
            {
                Write-Host $Message -ForegroundColor "Red" 
            } 
            Add-Content $global:fichierLog -Value "<$Stamp> <error> $Message"
        }
    }
}