Automatisation de l'administration avec Windows PowerShell
Automatisation de l'administration avec Windows
PowerShell
Version 24.07
Ahmed Abdelwahed
ahmed@abdelwahed.
me LinkedIn
Automatisation de l'administration avec Windows PowerShell
Premiers pas avec Windows PowerShell
Syntaxe de base
Automatisation de l'administration avec Windows PowerShell
Syntaxe de commande de base: Verbe-Nom -Paramètre1 valeur1 -Paramètre2 valeur2
o Verbe: Action standard, telle que Get (Obtenir), Set (Définir), Start (Démarrer), Stop (Arrêter),
Add (Ajouter), Remove (Supprimer), etc.
o Nom: L'objet ou la ressource sur lequel l'action est effectuée, tel que Processus, Service,
Item , etc.
o Paramètres: Indicateurs ou options facultatifs qui modifient le comportement de l'applet de
commande.
Applets de commande généraux
Get-Help: Récupère une documentation détaillée sur les applets de commande, les fonctions, les
scripts et les concepts d'utilisation PowerShell.
Get-Command: Répertorie toutes les applets de commande, fonctions, alias et scripts disponibles
dans la session ou récupère les commandes spécifiques correspondant aux critères.
Get-Member: Affiche les propriétés et les méthodes des objets générés par les commandes
PowerShell, aidant ainsi à comprendre la structure et le comportement des objets.
$PSVersionTable: Affiche des détails sur la version et l'environnement de PowerShell.
Update-Help: Télécharge et met à jour les fichiers d'aide pour les modules PowerShell, garantissant
que le contenu de l'aide est le plus récent.
Opérations du système de fichiers
Cd ~, mkdir d1, d2, d3: Remplace le répertoire par le répertoire personnel de
l'utilisateur et crée trois répertoires nommés d1, d2 et d3.
New-Item -Path 'C:\NewFolder' -ItemType Directory: Crée un nouveau
répertoire au chemin spécifié.
Copy-Item -Path 'C:\Source\[Link]' -Destination 'C:\Dest': Copie un
fichier d'un emplacement à un autre.
Remove-Item -Path 'C:\OldFolder' -Recurse: Deletes a folder and all of its contents.
Collecte d'informations
Get-Command process: Recherche toutes les commandes qui incluent « process » dans leur nom.
**Get-Command Resolve-DnsName |fl ***: Répertorie toutes les propriétés de la
commande Resolve-DnsName au format complet.
Get-Command -Noun adapter: Récupère les commandes dont les noms correspondent à
"adapter".
Get-Command -Verb Set -Noun adapter: Récupère les commandes avec le verbe
"Set" et le nom "adapter".
Get-Command Get-ScheduledTask: Récupère des détails sur la cmdlet Get-ScheduledTask.
Get-ComputerInfo | Get-Member: Répertorie les propriétés et les méthodes de l'objet
d'information de l’ordinateur.
Automatisation de l'administration avec Windows PowerShell
Get-NetIPConfiguration: Affiche la configuration IP de l'ordinateur.
Get-Volume: Affiche des informations sur les volumes sur l'ordinateur.
Get-Service | Out-String -Stream | Select-String "spooler" : affiche les
service contenant dans leur nom “spooler”
Utilitaires réseau et système
Test-Connection: Envoie des paquets de demande d'écho ICMP (« pings ») à un hôte cible
et affiche les résultats.
Get-Date; Get-TimeZone: Affiche la date et l'heure actuelles, ainsi que les informations sur le
fuseau horaire.
Set-ExecutionPolicy RemoteSigned: Modifie la stratégie d'exécution des scripts
PowerShell pour autoriser les scripts signés par un éditeur de confiance.
Gestion des processus
Start-Process notepad: Démarre un nouveau processus pour le Bloc-notes.
Start-Process "cmd" -Verb RunAs: Démarre l'invite de commande avec des privilèges
administratifs.
Start-Process "notepad++" -ArgumentList "d:\resources\
[Link]":
Démarre Notepad++ avec un fichier spécifique ouvert.
Get-Process -Name chrome: Récupère des informations sur les processus portant le nom «
chrome ».
Get-Process -Name "CCleaner", "Notepad": Récupère les processus
correspondant aux noms "CCleaner" ou "Notepad".
Get-LocalUser: Récupère des informations sur les comptes d'utilisateurs locaux.
Stop-Process -Name notepad -Force or Stop-Process -Id PID -Force:
Arrête de force un processus soit par son nom, soit par son ID de processus.
Get-Process -Name "CCleaner", "Notepad" | Stop-Process -Force:
Récupère et arrête de force les processus nommés « CCleaner » ou « Notepad ».
Opérations sur les fichiers texte
Get-Content -Path 'D:\Resources\[Link]': Affiche le contenu du fichier
texte spécifié.
Get-Content -Path 'D:\Resources\[Link]' -Head 5: Affiche les 5
premières lignes du fichier spécifié.
Get-Content -Path 'D:\Resources\[Link]' -Tail 5: Affiche les 5
dernières lignes du fichier spécifié.
Travailler avec des objets de processus
Get-Process | Select-Object -First 5: Sélectionne et affiche les 5 premiers processus.
Automatisation de l'administration avec Windows PowerShell
Get-Process | Select-Object -Last 10: Sélectionne et affiche les 10 derniers processus.
Automatisation de l'administration avec Windows PowerShell
Module PowerShell
Un module PowerShell est essentiellement un package de code réutilisable pouvant inclure une variété de fonctions,
d'applets de commande et de variables, regroupées pour étendre les fonctionnalités de PowerShell dans des
domaines spécifiques. Les modules sont cruciaux pour partager du code et des fonctionnalités au sein d'une
communauté ou au sein d'une organisation, rendant les tâches de script plus standardisées et plus efficaces.
Applets de commande liés aux modules couramment utilisés:
Get-Module -ListAvailable: Répertorie tous les modules disponibles sur le système qui peuvent être
chargés dans la session en cours. Get-Module -ListAvailable
$PSHome: Contient le chemin d'accès au répertoire dans lequel PowerShell est installé, souvent là où
se trouvent les modules et exécutables intégrés. $PSHome
$env:PSModulePath: Contient les chemins où PowerShell recherche les modules. Cette variable
d'environnement peut être modifiée pour inclure des répertoires personnalisés.
$env:PSModulePath
Get-Module: Répertorie les modules actuellement chargés dans la session PowerShell. Get-Module
Find-Module -Name active: Recherche dans les référentiels en ligne (comme la PowerShell Gallery) les
modules qui correspondent au modèle spécifié. Find-Module -Name *active*
Install-Module -Name PowerShellGet: Installe un module à partir d'un référentiel en ligne, le rendant
disponible pour utilisation. PowerShellGet est un gestionnaire de modules pour PowerShell.
Install-Module -Name PowerShellGet
Import-Module -Name PowerShellGet: Charge le module spécifié dans la session en cours,
permettant une utilisation immédiate de ses applets de commande et fonctionnalités. Import-
Module -Name PowerShellGet
Get-Command -Module PowerShellGet: Répertorie toutes les commandes disponibles dans un
module particulier. Get-Command -Module PowerShellGet
Uninstall-Module -Name <Name> -RequiredVersion <Version>: Supprime une version spécifique d'un
module du système.
Uninstall-Module -Name "ModuleName" -RequiredVersion "VersionNumber"
Update-Module -Name <Name>: Met à jour un module vers la dernière version disponible dans le
référentiel.
Update-Module -Name "ModuleName"
Automatisation de l'administration avec Windows PowerShell
Gestion des sorties PowerShell
1. Affichage de la sortie directement sur la console: Par défaut, l'exécution d'une commande comme
Get-Process envoie sa sortie à la console ou à la sortie standard.
2. Redirection de la sortie vers un fichier:
• Get-Process > [Link]
• Get-Process | Out-File -FilePath [Link]
3. Ajout de la sortie:
• Get-Service >> [Link]
4. Capturer la sortie dans une variable: Stocker le résultat de la commande dans une variable pour une
manipulation ultérieure:
• $processes = Get-Process
5. Affichage de la vue en grille:
o Données de sortie dans une vue de grille interactive:
Get-Process | Out-GridView
6. Redirection de Stderr
• Get-Process -Name "CCleaner", "Notepad" 2>D:\Resources\
[Link]
7. Redirection de Stdout et Stderr:
o Redirigez stdout et stderr vers le même fichier en utilisant *> :
Get-Process *> [Link]
Get-Process -Name "CCleaner", "Notepad" 2>D:\Resources\
[Link]
>D:\Resources\[Link]
8. Travailler avec la sortie de texte:
o Convertir la sortie de l'objet en texte brut à l'aide de Out-String:
$processesText = Get-Process | Out-String
9. Rediriger la sortie vers l'imprimante
• Get-Process | Out-Printer
10. Mélanger la sortie de texte et d'objet:
Automatisation de l'administration avec Windows PowerShell
o Utilisez Write-Host pour la sortie de texte directe et les applets de commande standard pour
les objets :
Write-Host "Computer Host Name is: $hostname"
Alias dans PowerShell
La création d'un alias dans PowerShell vous permet de faire référence aux commandes par des noms alternatifs, qui peuvent être
plus courts ou plus mémorisables que les noms de commande d'origine. Vous pouvez créer des alias pour les applets de
commande, les scripts, les fonctions ou les fichiers exécutables.
Clear, cls, cp, copy, ls, dir, cd
Affichage des alias existants
Pour afficher une liste de tous les alias actuels de votre session, utilisez l'applet de commande Get-Alias :
Get-Alias
Get-Alias -Name list
Création d'un alias temporaire
• New-Alias -Name list -Value Get-ChildItem
• Set-Alias -Name call -Value Test-NetConnection # Créez un nouvel alias
ou modifiez-en un existant. Cette commande crée un alias nommé list pour la cmdlet Get-ChildItem ,
vous permettant d'utiliser list au lieu de Get-ChildItem pour lister les éléments d'un répertoire.
Création d'un alias persistant
Pour créer un alias qui persiste dans les sessions PowerShell, vous devez ajouter la commande de création d'alias à votre script
de profil PowerShell:
1. Ouvrez votre profil PowerShell pour le modifier : notepad $PROFILE
Si le profil n'existe pas, PowerShell vous demandera de le créer.
2. Ajoutez la commande de création d'alias à votre profil:
Set-Alias -Name list -Value Get-ChildItem
Set-Alias -Name call Test-Connection
Ajoutez des lignes similaires pour chaque alias que vous souhaitez créer. L'applet de commande Set-Alias est souvent utilisée
dans les scripts, y compris le script de profil, car elle peut écraser les alias existants.
3. Enregistrez et fermez le script de profil. Les alias que vous avez ajoutés seront créés à chaque fois que vous démarrez
une session PowerShell.
Créez un alias principal pour les 10 principaux processus qui consomment du processeur
function Get-TopCpuProcesses {
Get-Process | Sort-Object -Property CPU -Descending | Select-Object -
First
10
}
Set-Alias -Name top -Value Get-TopCpuProcesses
function top-mem {
Get-Process | Sort-Object -Property ws -Descending | select -First 10
}
Supprimer les alias
Pour supprimer un alias au sein d'une session, utilisez la cmdlet Remove-Item sur l'alias:
Remove-Item alias:list
Automatisation de l'administration avec Windows PowerShell
Gestion et personnalisation des profils PowerShell
Les profils PowerShell vous permettent de personnaliser votre environnement PowerShell en exécutant
automatiquement des commandes et des scripts lorsque vous ouvrez une nouvelle session PowerShell.
Voici une liste des commandes et personnalisations courantes liées au profil, reformatées pour plus de
clarté et étendues pour inclure des descriptions réfléchies:
1. Affichage et modification du fichier de profil
Afficher les détails du profil:
• $PROFILE | Format-List -Force
Cette commande affiche toutes les propriétés de la variable $PROFILE dans une liste formatée, vous
aidant à comprendre quels chemins de profil sont disponibles et utilisés.
Recherchez et créez le profil s'il n'existe pas:
• if (!(Test-Path -Path $PROFILE)) {
• New-Item -ItemType File -Path $PROFILE -Force
• }
Cet extrait vérifie si le fichier de profil existe et en crée un si ce n'est pas le cas. Cela garantit que
vous disposez d'un fichier de profil à personnaliser.
Ouvrir le profil dans le Bloc-notes pour le modifier:
• notepad $PROFILE
Utilisez cette commande pour ouvrir votre script de profil dans le Bloc-notes, ce qui facilite la
modification et la personnalisation des commandes exécutées au démarrage.
2. Inspection du profil et informations environnementales
Afficher les informations sur la version de PowerShell:
• $PSVersionTable
Cela génère des détails sur votre environnement PowerShell actuel, y compris la version et d'autres
caractéristiques clés de la plate-forme.
Chemin du profil d'écho:
• echo $PROFILE
Affiche simplement le chemin d'accès à votre fichier de profil PowerShell actuel, ce qui est utile pour
une référence rapide.
3. Module PSReadLine et gestionnaires de clés
Inspecter et importer le module PSReadLine:
• Get-Module PSReadLine
• Import-Module PSReadLine
Vérifiez si le module PSReadLine est chargé et importez-le si nécessaire. PSReadLine
améliore l'interface de ligne de commande avec de meilleures capacités d'édition et
d'historique.
Automatisation de l'administration avec Windows PowerShell
Répertorier et modifier les gestionnaires de clés PSReadLine:
• Get-PSReadLineKeyHandler | Where-Object { $_.Key -like 'Ctrl+*'
}
• Get-PSReadLineKeyHandler | Where-Object { $_.Key -like 'Ctrl+*'
-and
$_.Function -like '*BeginningOfLine*'}
Cette commande répertorie tous les gestionnaires de touches personnalisés pour les touches Ctrl,
vous aidant ainsi à identifier ceux qui pourraient remplacer le comportement par défaut.
Définition de raccourcis clavier personnalisés dans PSReadLine:
• Set-PSReadLineKeyHandler -Chord Ctrl+q -Function
BeginningOfLine
• Set-PSReadLineKeyHandler -Chord Ctrl+e -Function EndOfLine
• Set-PSReadLineKeyHandler -Chord Ctrl+k -Function KillLine
• Set-PSReadLineKeyHandler -Chord Ctrl+u -Function
BackwardKillLine
Ces commandes définissent des raccourcis clavier personnalisés pour parcourir et modifier les lignes
plus efficacement dans la ligne de commande PowerShell.
4. Fonctions personnalisées et alias
Définir une fonction pour obtenir les processus les plus gourmands en CPU:
• function top {
Get-Process | Sort-Object -Property CPU -Descending | Select-Object
-First 10
}
Cette fonction récupère les 10 principaux processus par utilisation du processeur, utile pour un
diagnostic rapide du système.
5. Réinitialisation à la session par défaut
Démarrez PowerShell sans aucun profil:
• PowerShell -NoProfile
Cette commande lance PowerShell sans charger aucun script de profil, utile pour le dépannage si les
personnalisations posent des problèmes.
Automatisation de l'administration avec Windows PowerShell
Gestion de l'historique des commandes PowerShell
Affichage de l'historique des commandes: Utilisez Get-History pour afficher l'historique des
commandes de la session en cours.
Exécution de commandes à partir de l'historique: Récupérer et exécuter une commande spécifique par
ID en utilisant
Get-History |Invoke-History -Id 3.
Recherche dans l'historique des commandes: Pour localiser une commande spécifique précédemment
exécutée, utilisez:
Get-History | Select-String -Pattern "Get-Process"
Effacement de l'historique des commandes : Clear-History supprime toutes les commandes de
l'historique de la session en cours sans affecter le fichier d'historique persistant.
Fichier d'historique PowerShell: Les commandes sont stockées à travers les sessions dans un fichier
situé à : C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\
PowerShell\PSReadLine\ ConsoleHost_history.txt
Affichage de l'intégralité du fichier historique: Accédez à l’historique complet des commandes avec:
Get-Content C:\Users\<UserName>\AppData\Roaming\Microsoft\Windows\
PowerShell\PSReadLine\ ConsoleHost_history.txt
Effacement de l'intégralité du fichier historique: Effacez le fichier historique avec :
Clear-Content -Path "C:\Users\<UserName>\AppData\Roaming\Microsoft\
Windows\PowerShell\PSReadLine
\ConsoleHost_history.txt"
Configuration de la taille de l'historique: Définissez le nombre maximum de
commandes à stocker dans l'historique en modifiant $MaximumHistoryCount:
$MaximumHistoryCount = 1000
Pour les paramètres persistants, ajoutez $MaximumHistoryCount à votre $PROFILE et modifiez
avec:
notepad $PROFILE
Sauvegarde des entrées et des sorties: Enregistrez toutes les entrées et sorties de commande pour
la session en utilisant Start- Transcript:
Start-Transcript -Path "C:\[Link]"
Automating Administration with Windows
PowerShell
Utilisation du pipeline PowerShell
Les objets sont transmis d'une commande à une autre, permettant un traitement efficace :
Get-ChildItem -Path "C:\Users\Ahmed\Downloads" | Where-Object
{ $_.Extension
-eq '.txt' }
Sélection, tri et mesure d'objets:
Utilisez Select-Object, Sort-Object, et Measure-Object pour manipuler et analyser
les données:
Sélection des
propriétés:
Utilisez Select-Object pour sélectionner des propriétés spécifiques des objets.
New-Item "[Link]" | Out-Null
Get-Process | Select-Object Name, ID, CPU
Get-Service | select status,name
Get-Service | select -first 1
Get-Service | select -first 2 *
Get-Computerinfo | select CsCaption, CsManufacturer, OsName,
CsProcessors, OsTotalVisibleMemorySize, CsDomain
Get-Content [Link] | Select-String "error|warning|fail"
Select-String "test" -path 'D:\Resources\[Link]'
Get-Content -Path 'D:\Resources\[Link]' | Select-String -
Pattern "test" -CaseSensitive | Select-Object LineNumber, Line
Get-LocalUser | Select-Object Name, @{Name='AccountStatus';
Expression={if ($_.Enabled) {'Enabled'} else {'Disabled'}}}
Tri des objets:
Utilisez Sort-Object pour trier les objets selon une ou plusieurs propriétés.
Get-Service | Sort-Object Name
Get-Service | Sort -Descending or Get-Service | Sort name -Descending
Get-Process | Sort-Object CPU -Descending # les processus consommant le plus de CPU en
premier
Get-Process | Sort-Object -Property ws -Descending | select -First 10 #
WS
signifie Working Set, qui est la taille actuelle de la mémoire occupée par le processus.
Get-ChildItem -Path "C:\Users\Ahmed\Downloads" | Get-Member -
MemberType Properties
Get-ChildItem -Path "C:\Users\Ahmed\Downloads" | Sort Extension
Get-ChildItem -Path "D:\Resources\" -File | Sort-Object -Property Length -
Descending
Mesurer des objets:
Utilisez Measure-Object pour mesurer les propriétés des objets, telles que le nombre, la somme ou
la moyenne.
Get-ChildItem "C:\Users\Ahmed\Downloads" | Measure
Automating Administration with Windows
PowerShell
Get-ChildItem -Path "C:\Users\Ahmed\Downloads" | Measure-Object -
Property Length -Sum -Maximum -Minimum -Average
Get-ChildItem -Path "C:\Users\Ahmed\Downloads" | Measure-Object -
Property Length -Sum -Maximum -Minimum -Average | Tee-Object -
Variable sizegb
$[Link] / 1mb
$[Link] / 1gb
Get-ChildItem d:\resources | Select-Object
Name,
@{Name="Size_In_KB";Expression={$_.Length /
1gb}}
Get-ChildItem d:\resources -file | Select-Object
Name, @{Name="Size_In_KB";Expression={$_.Length /
1gb}}
Filtrage et énumération d'objets:
Filtrer et manipuler des objets à l'aide de Where-Object et ForEach-Object:
En tant que calcul
# Addition
5 + 3 # Sorties 8
# Soustraction
10 - 2 # Sorties 8
# Multiplication
4 * 2 # Sorties 8
# Division
16 / 2 # Sorties 8
# Utilisation de parenthèses pour l'ordre des opérations
(2 + 3) * 4 # Sorties 20
Get-Random
Get-Random -Maximum 100
Get-Random -Minimum -100 -Maximum 100
6 1, 2, 3, 5, 8, 13 | Get-Random
Get-Random -Minimum 1 -Maximum 100 -Count 5
# Tableau d'exécutables d'application
$applications = "notepad", "calc", "cmd"
# Parcourez le tableau et démarrez chaque application
$applications | ForEach-
Object { Start-Process $_
} -runas
Get-Process | Where-Object { $_.CPU -gt 1000 } # liste des processus où le temps CPU
utilisé est supérieur à 1000 secondes
Get-Process | Where-Object {$_.WorkingSet -gt 1GB} # Cela filtre les processus
Automating Administration with Windows
PowerShell
uniquement pour ceux utilisant plus de 1 Go de mémoire.
Get-Service | Where-Object { $_.Name -like 'win*' -and
$_.Status -eq 'Running' } | Select-Object Name, Status
Get-Service | Where-Object { $_.Name -like 'win*' -and
$_.Status -eq 'Running' -or $_.status -eq 'stopped'} | Select-
Object Name, Status
Automatisation de l'administration avec Windows
PowerShell
Get-Service | Where-Object { ($_.Name -like 'win*' -and $_.Status
-eq 'Running') -or ($_.Name -like 'print*' -and $_.Status -eq
'Stopped') } | Select-Object Name, Status
Get-ChildItem -Path "C:\Users\Ahmed\Downloads" | Where-Object {
$_.Length - gt 1MB -and $_.Length -lt 5MB }
Get-ChildItem -Path "C:\Users\Ahmed" -Recurse | Where-Object
{ $_.Extension
-eq '.txt' } # -Recurse obtient les éléments à l'emplacement spécifié et tous les éléments enfants.
Get-Process -Name Notepad, notepad++ | foreach {$_.kill()}
Get-Process | Where-Object {$_.WS -gt 500MB} | ForEach-Object {
$_.Kill() } #Terminating Processes by Memory Usage
Get-Service -Name wuauserv, bits | Where-Object {$_.Status -eq
'Running'} | ForEach-Object { $_.Stop() }
Get-Process | ForEach-Object { $_.Kill() } # mettre fin à tous les processus en cours
Exemple de pipeline pratique
Rechercher et exporter des fichiers volumineux:
Get-ChildItem -Path C:\ -Recurse |
Where-Object { $_.Length -gt 500MB
} | Sort-Object Length -Descending
|
Select-Object Name, Directory, Length |
Export-Csv -Path C:\[Link] -NoTypeInformation
Automatisation de l'administration avec Windows
PowerShell
Gestion de Windows et du réseau
Configuration initiale de Windows
# Configurer les paramètres réseau (Variables)
$interfaceAlias = "Ethernet1" # Vous devrez peut-être l'ajuster pour qu'il corresponde
à l'alias de votre interface
$ipAddress = "[Link]"
$subnetMask = 24
$gateway = "[Link]"
$dns = "[Link]"
$newComputerName = "C19"
# Définir l'adresse IP
New-NetIPAddress -InterfaceAlias $interfaceAlias -IPAddress $ipAddress
-
PrefixLength $subnetMask -DefaultGateway $gateway
# Définir le serveur DNS
Set-DnsClientServerAddress -InterfaceAlias $interfaceAlias -
ServerAddresses
$dns
# Activer le bureau à distance
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\
Terminal Server' -name "fDenyTSConnections" -Value 0
# Autoriser RDP via le pare-feu Windows
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
# Démarrez les services Bureau à distance
Set-Service -Name TermService -StartupType Automatic
Start-Service -Name TermService
# Désactiver et activer le pare-feu
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True
# Définir le fuseau horaire
Get-TimeZone
Get-TimeZone -ListAvailable
Get-TimeZone -ListAvailable | Where-Object { $_.displayname -like
"*muscat"
}
Set-TimeZone -Id "Arabian Standard Time"
# Changer le nom de l'ordinateur
Rename-Computer -NewName $newComputerName -Force -Restart
# Ajouter un ordinateur au domaine
Automatisation de l'administration avec Windows
PowerShell
Add-Computer -domain [Link]
Automatisation de l'administration avec Windows
PowerShell
Travailler avec le réseau
Affichage de la configuration réseau
Get-NetAdapter: répertorie les cartes réseau. Utile pour identifier les adaptateurs disponibles et leur état.
Get-NetAdapter
Get-NetAdapter | Select Name, InterfaceAlias, InterfaceIndex,
LinkSpeed, MacAddress
Get-NetIPAddress: Récupère la configuration de l'adresse IP de toutes les interfaces réseau.
Get-NetIPAddress
Get-NetIPAddress -InterfaceAlias "Wi-Fi" -AddressFamily IPv4
Get-NetAdapterStatistics -Name wi-fi | fl *
Get-NetIPConfiguration: Fournit un aperçu détaillé de la configuration réseau, y compris les paramètres IP,
DNS et de passerelle pour toutes les cartes réseau .
Get-NetIPConfiguration
Get-NetIPConfiguration -InterfaceIndex 10
Get-DnsClientServerAddress: Affiche les serveurs DNS attribués à chaque interface.
Test-NetConnection [Link]
Test-NetConnection -ComputerName [Link] -Port 80
Test-NetConnection -ComputerName [Link] -TraceRoute
pathping [Link]
Test-Connection [Link]
Resolve-DnsName -Name [Link]
Resolve-DnsName -Name [Link] -Type MX
Get-DnsClientDohServerAddress # récupérer les adresses des serveurs DNS sur HTTPS (DoH)
Get-DnsClientCache
Clear-DnsClientCache
Modifying Network Configuration
New-NetIPAddress: Attribue une nouvelle adresse IP à une carte réseau.
New-NetIPAddress -InterfaceAlias "Ethernet1" -IPAddress
[Link] - PrefixLength 24 -DefaultGateway [Link]
Set-NetIPAddress: Modifie les propriétés de l'adresse IP d'une adresse IP existante.
Set-NetIPAddress -InterfaceAlias "Ethernet1" -IPAddress
[Link] - PrefixLength 24
Remove-NetIPAddress: supprime une adresse IP d'une carte réseau.
Remove-NetIPAddress -InterfaceAlias "Ethernet1" -IPAddress
[Link]
Set-DnsClientServerAddress: Modifie les adresses du serveur DNS pour une carte réseau.
Set-DnsClientServerAddress -InterfaceAlias "wi-fi" -
ServerAddresses ("[Link]", "[Link]")
Automatisation de l'administration avec Windows
PowerShell
Réinitialisation de la configuration réseau
Restart-NetAdapter: réinitialise une carte réseau. Ceci est similaire à la désactivation et à la réactivation de
l'adaptateur sous Windows.
Restart-NetAdapter -Name "Ethernet1"
Libérer et renouveler une adresse IP
# Libérer une adresse IP
Get-NetIPAddress -InterfaceAlias "Ethernet1" -AddressFamily IPv4 |
Remove-
NetIPAddress
# Désactivez la carte réseau
Disable-NetAdapter -Name "Ethernet1"
# Activer la carte réseau
Enable-NetAdapter -Name "Ethernet1"
ARP et table de routage
# Affichage de la table ARP dans PowerShell
Get-NetNeighbor -AddressFamily IPv4
# Filtrage des entrées ARP par interface
Get-NetNeighbor -InterfaceAlias "Ethernet"
# Filtrage des entrées ARP par adresse IP
Get-NetNeighbor -IPAddress "[Link]"
# Afficher toutes les entrées de la table de routage
Get-NetRoute
# Ajouter un itinéraire personnalisé
New-NetRoute -DestinationPrefix "[Link]/26" -InterfaceAlias
"YourInterfaceAlias" -NextHop "[Link]" -PolicyStore
PersistentStore
# Filtrer les itinéraires par destination
Get-NetRoute -DestinationPrefix "[Link]/24"
# Statut du port
Test-Port -target [Link] -fromPort 80 -toPort 80
Gestion du pare-feu Windows
Get-NetFirewallRule: Récupère les règles de pare-feu.
Get-NetFirewallRule
New-NetFirewallRule: Crée une nouvelle règle de pare-feu.
New-NetFirewallRule -DisplayName "Allow TCP Port 1000" -Direction
Inbound - LocalPort 1000 -Protocol TCP -Action Allow
Automatisation de l'administration avec Windows
PowerShell
Set-NetFirewallRule: Modifie les règles de pare-feu existantes.
Set-NetFirewallRule -DisplayName "Existing Rule Name" -
NewDisplayName "Updated Rule Name"
Enable-NetFirewallRule et Disable-NetFirewallRule: Active ou désactive les règles de pare-feu spécifiées.
Enable-NetFirewallRule -DisplayName "Allow TCP Port 1000"
Travailler avec des fichiers et des dossiers
Liste des fichiers et des dossiers
Get-PSDrive lister les partitions `
Set-Location -Path C:\Users\ExampleUser\Documents
Get-ChildItem: Répertorie les éléments (fichiers et dossiers) dans un répertoire.
Get-ChildItem -Path C:\Example
Utilisez -Recurse pour répertorier les éléments de tous les sous-répertoires.
Get-ChildItem -Hidden
Création de répertoires
New-Item -Path 'C:\Example\NewFolder' -ItemType Directory
Création de fichiers
New-Item -Path 'C:\Example\[Link]' -ItemType
File "Hello, World!" > C:\Example\[Link]
Copie de fichiers et de dossiers
Copy-Item -Path 'C:\Example\[Link]' -
Destination 'C:\Example\DestinationFolder'
Copie de plusieurs fichiers et dossiers
Copy-Item -Path 'C:\Example\*.txt' -
Destination 'C:\Example\DestinationFolder'
Copy-Item -Path 'C:\Example\*' -Destination 'C:\Example\
DestinationFolder'
Déplacement de fichiers et de dossiers
Move-Item -Path 'C:\Example\OldFolder' -Destination 'C:\Example\
NewFolder'
Suppression de fichiers et de dossiers
Remove-Item -Path 'C:\Example\[Link]'
Utilisez -Recurse pour supprimer un dossier et son contenu.
Remove-Item -Path 'C:\Example\[Link]'
Lecture à partir de fichiers
Get-Content -Path 'C:\Example\[Link]'
Écrire dans des fichiers
Set-Content: Écrit ou remplace le contenu d'un fichier.
Set-Content -Path 'd:\resources\[Link]' -Value 'New content'
Add-Content: Ajoute du contenu à un fichier.
Add-Content -Path "C:\Windows\System32\drivers\etc\hosts" -Value
[Link] Master-PC'
Automatisation de l'administration avec Windows
PowerShell
Renommer des fichiers et des dossiers
Rename-Item: Renomme un fichier ou un dossier.
Rename-Item -Path 'C:\Example\[Link]' -NewName '[Link]'
Automatisation de l'administration avec Windows
PowerShell
Recherche de fichiers et de dossiers
Get-ChildItem avec -Recurse et -Filter ou -Include peut rechercher des fichiers et des dossiers par nom ou modèle.
Get-ChildItem -Path C:\Example -Recurse -Filter "*.txt"
Get-ChildItem -Path d:\resources -Recurse -Filter "*.txt" | Sort-
Object Length -Descending # recherche tous les fichiers .txt dans le répertoire D:\resources
et ses sous-répertoires, en les triant par taille par ordre décroissant, ce qui signifie que les fichiers les
plus gros seront répertoriés en premier.
Get-ChildItem -Path D:\resources -Recurse -Filter
"*.txt" | Sort-Object Length -Descending |
ForEach-Object {
Copy-Item -Path $_.FullName -Destination D:\folder1}
Get-ChildItem -Path D:\folder1 -Recurse | Select-String -Pattern
"test" | Select-Object Path, LineNumber
Modification des attributs de fichiers et de dossiers
Set-ItemProperty: Modifie les propriétés des fichiers et des dossiers, par exemple en rendant un fichier en
lecture seule.
Set-ItemProperty -Path 'C:\Example\[Link]' -Name IsReadOnly -Value
$true
Travailler avec les chemins de fichiers
Join-Path: Combine un chemin et un chemin enfant en un seul chemin.
$fullPath = Join-Path -Path 'C:\Example' -ChildPath '[Link]'
Automatisation de l'administration avec Windows
PowerShell
Interrogation d'informations de gestion à l'aide de CIM et WMI
Windows Management Instrumentation (WMI) et Common Information Model (CIM) sont des technologies
utilisées dans Windows pour gérer les données et les opérations sur les systèmes informatiques. Les deux offrent
un moyen d’interagir avec les données de gestion du système provenant de composants matériels ou logiciels.
Alors que WMI utilise DCOM (Distributed Component Object Model) comme technologie de communication,
CIM utilise WS-Management (un protocole de services Web standard), ce qui le rend plus moderne et sécurisé
par rapport à WMI.
Utiliser WMI dans PowerShell
WMI est accessible dans PowerShell principalement à l’aide de l’applet de commande Get-WmiObject.
Cette applet de commande vous permet d'effectuer des requêtes sur les classes WMI.
Requêtes WMI
1. Get-WmiObject -Namespace root\CIMv2 -List:
o Récupère une liste de toutes les classes de gestion disponibles dans l'espace de noms root\
CIMv2 . Ceci est utile pour découvrir à quelles données de gestion vous pouvez accéder via
WMI.
2. Get-WmiObject -Namespace root\CIMv2 -List | where name -Like *network*:
o Répertorie toutes les classes WMI dans l'espace de noms root\CIMv2 qui incluent « réseau »
dans leurs noms. Cela aide à identifier les classes spécifiquement liées aux configurations et
à l'état du réseau.
3. Get-WmiObject -class *network* -List:
o Cette commande semble incorrecte car-List avec un nom de classe générique (-class *network*)
ne donne généralement pas de résultats valides. Au lieu de cela, vous pouvez utilizer -List pour
répertorier les classes et les filtrer ou supprimer -List pour interroger directement les instances
de classes qui correspondent au nom générique.
4. Get-WmiObject -class Win32_NetworkAdapterConfiguration:
o Récupère les instances de la classe Win32_NetworkAdapterConfiguration , fournissant
des informations de configuration détaillées pour chaque interface réseau du
système.
5. Get-WmiObject -Class Win32_OperatingSystem | Get-Member:
o Dirige les instances de la classe Win32_OperatingSystem vers Get-Member, qui affiche les
propriétés et les méthodes de la classe, aidant ainsi à comprendre quelles données
peuvent être manipulées ou récupérées.
6. Get-WmiObject -Class Win32_OperatingSystem | Select-Object Caption,
Version, ServicePackMajorVersion:
o Récupère les propriétés spécifiques de la classe Win32_OperatingSystem , en particulier le nom du
système d'exploitation (Caption), le numéro de version et le numéro de version majeure de tout
service pack installé. Ceci fournit un aperçu succinct des détails du système d'exploitation.
7. Get-WmiObject -Class Win32_Processor | Select-Object Name,
NumberOfCores, NumberOfLogicalProcessors:
o Récupère et affiche les propriétés sélectionnées de la classe Win32_Processor , indiquant le
nom du processeur, le nombre de cœurs et le nombre de processeurs logiques. Ceci est utile
pour comprendre la configuration du processeur du système.
Automatisation de l'administration avec Windows
PowerShell
6. Get-WmiObject -Query "SELECT * FROM Win32_DiskDrive" | Select-Object
Model, InterfaceType, Size:
o Exécute une requête WMI pour récupérer toutes les instances de Win32_DiskDrive , puis
sélectionne les propriétés spécifiques à afficher : le modèle du disque, le type d'interface (par
exemple, SATA, SCSI) et la taille du disque. Cela fournit des informations détaillées sur le
disque physique.
8. Get-WmiObject -Class Win32_Service -Filter "State='Running' AND
StartMode='Auto'" | Select-Object Name, DisplayName, State:
o Récupère les services en cours d'exécution et configurés pour démarrer
automatiquement, en affichant leur nom, leur nom d'affichage et leur état. Cela aide à
surveiller et à gérer les services système.
Requêtes CIM
1. Get-CimInstance -ClassName win32_OperatingSystem | fl *:
o Récupère toutes les propriétés de la classe Win32_OperatingSystem à l'aide de l'applet de
commande CIM et les formate dans une liste. Cela donne une vue complète de toutes les
propriétés du système d'exploitation.
2. Get-CimInstance -ClassName CIM_OperatingSystem | Select-Object Caption,
Version, ServicePackMajorVersion:
o Similaire à la version WMI mais utilise CIM pour obtenir les mêmes propriétés du système
d'exploitation, qui peuvent présenter de légères différences en fonction de l'implémentation
sous-jacente des fournisseurs CIM et WMI.
3. Get-CimInstance -ClassName CIM_Processor | Select-Object Name,
NumberOfCores, NumberOfLogicalProcessors:
o Récupère et affiche les propriétés du processeur sélectionnées à l'aide du framework CIM,
qui est l'approche moderne recommandée par rapport à WMI.
4. Get-CimInstance -Query "SELECT * FROM CIM_OperatingSystem" | Select-Object
Caption, Version, LastBootUpTime:
o Exécute une requête CIM pour récupérer toutes les instances de la classe CIM_OperatingSystem ,
en sélectionnant des propriétés spécifiques, notamment le nom du système d'exploitation, la
version et l'heure du dernier démarrage.
5. Get-CimInstance -ClassName Win32_Processor | Select-Object Name, LoadPercentage:
o Récupère des informations sur chaque processeur, y compris son nom et son pourcentage
de charge actuel, à l'aide de l'applet de commande CIM. Ceci est utile pour surveiller
l'utilisation du processeur en temps réel.
Automatisation de l'administration avec Windows
PowerShell
Corbeille Active Directory Gestion d'Active Directory
o Get-ADOptionalFeature 'Recycle Bin Feature'
o Enable-ADOptionalFeature 'Recycle Bin Feature' -
Scope ForestOrConfigurationSet -Target '[Link]'
Informations sur la forêt et le domaine
o Get-ADDomainController | fl *
o Get-ADForest
o Get-ADDomain
Bilan de santé
o dcdiag /v /c /e
o dcdiag /v /c /e /q # afficher uniquement les erreurs
o dcdiag /test:replications
o Dcdiagrepadmin /replsum
o repadmin /showreps
o dcdiag /test:dns
o dcdiag /test:services
o dcdiag /s:dc1 #Specify server
Afficher à partir de quel client DC s'authentifier
o nltest /dsgetdc:[Link]
Réinitialiser la politique de domaine par défaut
o DCGPOFIX /target:dc
o DCGPOFIX /target:domain
o DCGPOFIX /target:bot
Obtenez toutes les fonctionnalités installées
o Get-WindowsFeature | where installed
Gestion des utilisateurs
Obtenir les détails d'un utilisateur:
Get-ADUser -Identity "jdoe" -Properties *
Créer un nouvel utilisateur:
New-ADUser -Name "JaneDoe" -GivenName "Jane" -Surname "Doe" -
SamAccountName "jdoe" -UserPrincipalName "jdoe@[Link]" -Path
"OU=Users,DC=yourdomain,DC=com" -AccountPassword (ConvertTo-SecureString
"ComplexPassword123!" -AsPlainText -Force) -Enabled $true
Modifier une propriété utilisateur:
Set-ADUser -Identity "jdoe" -City "New York"
Activer un compte d'utilisateur désactivé:
Enable-ADAccount -Identity "jdoe"
Désactiver un compte d'utilisateur actif:
Disable-ADAccount -Identity "jdoe"
Réinitialiser le mot de passe d'un utilisateur:
Set-ADAccountPassword -Identity "jdoe" -Reset -NewPassword (ConvertTo-
SecureString -AsPlainText "NewComplexPassword!" -Force)
Dernier mot de passe défini
Automatisation de l'administration avec Windows
PowerShell
Get-ADUser -Identity it01 -Properties * | select Name, PasswordLastSet
Gestion des groupes
Créer un nouveau groupe:
New-ADGroup -Name "ITSupport" -SamAccountName ITSupport -GroupCategory
Security
-GroupScope Global -DisplayName " Équipe d'assistance informatique " -Path
"OU=Groups,DC=yourdomain,DC=com" -Description " Voici l'équipe
d'assistance informatique."
Ajouter un utilisateur à un groupe:
Add-ADGroupMember -Identity "ITSupport" -Members "jdoe"
Obtenir les membres d'un groupe:
Get-ADGroupMember -Identity "ITSupport"
Supprimer un utilisateur d'un groupe:
Remove-ADGroupMember -Identity "ITSupport" -Members "jdoe" -Confirm:$false
Ajouter tous les utilisateurs commençant par HR au groupe
# Assurez-vous que $userDNs est toujours un tableau, même avec un seul résultat
$userDNs = (Get-ADUser -Filter 'Name -like "HR*"')
# Ajouter des utilisateurs au groupe s'il en
existe if ($[Link] -gt 0) {
Add-ADGroupMember -Identity "sales_gr" -Members
$userDNs Write-Output "Users added to the sales_gr
group."
}
Gestion des ordinateurs
Obtenir les détails d'un ordinateur:
Get-ADComputer -Identity "Computer01" -Properties *
Déplacer un ordinateur vers une autre unité d'organisation:
Get-ADComputer -Identity "Computer01" | Move-ADObject -TargetPath
"OU=NewOU,DC=yourdomain,DC=com"
Désactiver un compte d'ordinateur:
Disable-ADAccount -Identity "Computer01"
Activer un compte d'ordinateur désactivé:
Enable-ADAccount -Identity "Computer01"
Déplacer l'ordinateur vers l'unité d'organisation
Get-ADComputer -Filter 'Name -like "c1*"' | Move-ADObject -TargetPath
"OU=pcs,DC=ohi,DC=com"
Gestion des unités d'organisation
Création d'une nouvelle unité d'organisation
Pour créer une nouvelle OU nommée « Marketing » à la racine du domaine:
New-ADOrganizationalUnit -Name "Marketing" -Path "DC=yourdomain,DC=com"
Si vous souhaitez créer l'unité d'organisation dans un emplacement spécifique autre que la racine du domaine, ajustez le
paramètre -Path en conséquence.
Recherche d'unités d'organisation
Pour rechercher des unités d’organisation dans votre AD, utilisez la cmdlet Get-ADOrganizationalUnit . Par exemple, pour
rechercher toutes les unités d'organisation contenant le mot « Ventes » : Get-ADOrganizationalUnit -
Filter 'Name -like "*Ventes*"' | Select-Object Name, DistinguishedName
Cette commande répertorie les noms et noms distinctifs (DN) des unités d'organisation.
Automatisation de l'administration avec Windows
PowerShell
Déplacer une unité d'organisation
Pour déplacer une unité d'organisation vers une autre unité d'organisation, utilisez l'applet de commande Move-ADObject . Par
exemple, déplacer l'OU "Marketing" sous l'OU "Départements":
$targetOU = "OU=Departments,DC=yourdomain,DC=com"
$marketingOU = Get-ADOrganizationalUnit -Filter 'Name -eq "Marketing"' |
Select- Object -ExpandProperty DistinguishedName
Move-ADObject -Identity $marketingOU -TargetPath $targetOU
Cette commande récupère d'abord le DN de l'OU "Marketing" puis le déplace vers l'OU "Départements".
Modification d'une unité d'organisation
Pour modifier les propriétés d'une unité d'organisation, utilisez la cmdlet Set-ADOrganizationalUnit . Par exemple, pour ajouter
une description à l'OU "Marketing":
Set-ADOrganizationalUnit -Identity "OU=Marketing,DC=yourdomain,DC=com" -
Description "Marketing Department OU"
Suppression d'une unité d'organisation
Pour supprimer une unité d’organisation, utilisez la cmdlet Remove-ADOrganizationalUnit . Cette opération nécessite des
précautions car elle peut entraîner la suppression de tous les objets au sein de l'UO. Par exemple, pour supprimer l'OU
"TemporaryAccounts":
Remove-ADOrganizationalUnit -Identity
"OU=TemporaryAccounts,DC=yourdomain,DC=com" -Recursive -Confirm:$false
Le paramètre -Recursive permet la suppression de l'OU et de tout son contenu.
Le paramètre -Confirm:$false supprime l'invite de confirmation. Soyez très prudent avec cela, surtout lors de l'utilisation -
Recursive.
Protéger une unité d'organisation contre une suppression accidentelle
Vous pouvez définir l'indicateur « Protéger contre la suppression accidentelle » sur une unité d'organisation avec la cmdlet Set-
ADOrganizationalUnit :
Set-ADOrganizationalUnit -Identity "OU=Marketing,DC=yourdomain,DC=com" -
ProtectedFromAccidentalDeletion $true
Il s'agit d'un paramètre important pour empêcher la suppression involontaire des unités d'organisation et de leur contenu.
Automatisation de l'administration avec Windows
PowerShell
Travailler avec les journaux d'événements dans PowerShell
PowerShell fournit plusieurs applets de commande pour interagir avec les journaux d'événements Windows,
vous permettant de répertorier, d'interroger et de manipuler les données des journaux d'événements. Vous
trouverez ci-dessous des exemples montrant comment effectuer des tâches courantes liées aux journaux
d'événements à l'aide de PowerShell:
Liste des journaux d'événements disponibles
Get-EventLog -List
Récupération des entrées récentes du journal système
Get-EventLog -LogName System -Newest 10
Get-EventLog -LogName "system" -EntryType Error -Newest 10
Recherche d'événements spécifiques par ID d'instance dans le journal système
Get-EventLog -LogName Security -InstanceId 4625 #login failuar
Obtention des entrées d'erreur les plus récentes à partir du journal des applications
Get-EventLog -LogName Application -EntryType Error -Newest 5
Filtrage des entrées du journal système liées aux problèmes de disque
Get-EventLog -LogName System | Where-Object {$_.Message -like
"*disk*"} | Select-Object -First 5
Interrogation des entrées du journal de sécurité dans une plage de dates spécifique
Get-EventLog -LogName Security -After "2023-01-01" -Before "2023-01-31"
Utilisation de Get-WinEvent
Get-WinEvent est plus polyvalent et puissant, en particulier pour interroger les journaux directement liés à
Active Directory, comme le journal du service d'annuaire ou le journal du serveur DNS. Il prend en charge les
requêtes complexes via des tables de hachage et XML, et peut gérer les journaux d'événements volumineux
trouvés sur des serveurs occupés.
Interrogation du journal du service d'annuaire
Par exemple, pour récupérer les événements du journal du service d'annuaire, vous pouvez utiliser:
Get-WinEvent -LogName "Directory Service"
Get-WinEvent -LogName "Security" -MaxEvents 50
Get-EventLog -LogName Security | Where-Object {$_.EventID -eq 4624}
Utilisation des informations sur les correctifs logiciels
# Rechercher un correctif spécifique installé sur le système
get-hotfix | where-object {$_.HotfixID -eq "KB5034467"}
Install-Module -Name PSWindowsUpdate
Import-Module -Name PSWindowsUpdate
get-wuhistory -MaxDate 2022-10-10
get-wuhistory -Last 5
Automatisation de l'administration avec Windows
PowerShell
# Filtrer les correctifs par description et date d'installation
Get-HotFix | Where-Object {$_.description -like "*security*" -and
$_.installedon -gt "01/01/2022"}
Suppression des correctifs
Si vous devez désinstaller un correctif, vous pouvez le faire à condition que le correctif prenne en charge la
désinstallation. Tous les correctifs ne peuvent pas être supprimés. Pour ceux qui le peuvent, vous pouvez
utilizer [Link] ou appeler directement le programme de désinstallation s'il s'agit d'un correctif .exe :
# Utilisation de [Link] pour les fichiers .msu
[Link] /uninstall /kb:HotfixID /quiet /norestart
Automatisation de l'administration avec Windows
PowerShell
Utiliser des variables
Les variables dans Windows PowerShell sont essentielles pour gérer et manipuler les données lors de la
création de scripts. Ils servent de conteneurs contenant des valeurs ou des objets, auxquels il est possible
d'accéder et de manipuler tout au long d'un script.
Fonctionnalité des variables:
Stockage des données: Les variables peuvent stocker différents types de données, telles que les noms
de fichiers journaux, les détails du compte utilisateur ou les dates calculées pour suivre l'activité des
utilisateurs.
Manipulation d'objets: Lors du stockage d'objets, tels que des objets utilisateur Active Directory,
une variable conserve toutes les propriétés de l'objet, permettant une manipulation détaillée et la
récupération des attributs.
Opérations avec des variables:
Affichage des variables : Vous pouvez afficher toutes les variables stockées à l'aide de la variable
Get-ChildItem Variable: ou des applets de commande Get- Variable.
Dénomination des variables : Les noms de variables efficaces sont descriptifs (par exemple, $user pour
un compte utilisateur) et doivent être clairs et concis. PowerShell utilise le signe dollar ( $) comme
préfixe pour désigner les variables.
Attribution de valeur: Les valeurs sont attribuées à l'aide de l'opérateur =. Les affectations
complexes peuvent impliquer de stocker les résultats des commandes directement dans des
variables.
Affichage des valeurs: Utilisez Write-Host pour imprimer les valeurs des variables. Le contexte
(guillemets doubles ou simples) affecte si la valeur réelle ou le nom de la variable est affiché.
Effacement des variables : Pour réinitialiser la valeur d'une variable, attribuez-lui $null ou utilisez l'applet
de commande Clear-Variable.
$myVariable = "Data"
Clear-Variable -Name myVariable
$myVariable = $null
Types de variables:
Saisie implicite: PowerShell déduit généralement le type d'une variable en fonction de la valeur
attribuée, mais peut être explicitement défini pour garantir l'exactitude (par exemple, [Int]$num2
= "5").
Types courants : Inclure des chaînes, des entiers, des nombres à virgule flottante, la date/heure et des
booléens.
Confirmation du type: Utilisez la mé[Link]() pour vérifier le type de données stockées dans
une variable.
Automatisation de l'administration avec Windows
PowerShell
Exemples:
# Entier
$number = 25
# String
$name = "John"
$dir = dir "C:\
MyFolder" ls $dir
$dir | select Name, FullName, length
# Tableau
$colors = "red", "blue", "green"
$[Link]()
$[Link]
$firstColor = $colors[0] # Red
$lastColor = $colors[-1] # green, using negative index to access the last element
$colors[1]
$colors[1] = "black"
$colors += "Orange"
$colors
$colors[0..2]
# Table de hachage
$names = @( "Aaron", "Albert", "Alphonse","Bernie", "Charlie", "Danny",
"Ernie", "Frank")
$names | where { $_ -like "A*" }
$names | ? { $_ -like "A*" }
script interactif
# Inviter l'utilisateur à saisir et stocker l'entrée dans des variables
$user = Read-Host -Prompt " Écrivez votre nom complet "
$age = Read-Host -Prompt " Écrivez votre âge "
$city = Read-Host -Prompt " Écrivez votre ville "
# Création d'une table de hachage pour stocker les informations utilisateur
$info = @{
"Name" = $user
"Age" = $age
"City" = $city
}
# Suspendre l'exécution pendant 3 secondes
Start-Sleep -Seconds 2
# Afficher les informations stockées dans la table de hachage Write-Host
" Bienvenue $($info['Name']),"
Write-Host " Votre âge est $($info['Age'])" Write-Host "
Votre ville est $($info['City'])"
Automatisation de l'administration avec Windows
PowerShell
Stockage d'un chemin de fichier journal : $logFile = "C:\Logs\[Link]"
Dérivation d'un e-mail à partir d'un nom d'utilisateur: $email = $username + "@[Link]"
Calcul d'une date passée : $pastDate = (Get-Date).AddDays(-30)
if, else et else if
$test = "test"
if ($test -eq "test")
{ Write-Host " si condition remplie " }
$test = "test"
if ($test -eq "test2")
{ Write-Host " si condition remplie
" } elseif ($test -eq "test")
{ Write-Host " si autre condition remplie " }
Foreach
$Names = @('Amy', 'Bob', 'Celine',
'David') ForEach ($Name in $Names)
{
Write-Host " Salut, je m'appelle $Name!"
}
Functions
Une fonction PowerShell est un bloc de code nommé conçu pour exécuter une tâche spécifique. Lorsque vous
appelez la fonction par son nom, le code contenu dans son bloc de script est exécuté. Cette configuration est
particulièrement utile pour automatiser les tâches répétitives, car elle permet d'écrire le code une fois et de le
réutiliser plusieurs fois en appelant simplement la fonction. Dans PowerShell, les fonctions sont définies avec trois
composants principaux: le mot-clé function , un nom de fonction et un bloc de script contenant le code réel, entourés
d'accolades.
$user = Read-Host " Écrivez votre nom "
$age = Read-Host " Écrivez votre âge "
function Write-Greeting ($name, $age) {
" Bonjour $name, vous avez $age
ans."
}
Write-Greeting -name $user -age $age
Automatisation de l'administration avec Windows
PowerShell
Scripts
Exemple 1:
# Inviter l'utilisateur à écrire le chemin complet
$path = Read-Host -Prompt " Écrivez le chemin complet "
# Obtenez les détails du fichier dans le chemin spécifié et calculez les propriétés
de taille
$get_files = Get-ChildItem -Path $path -File | Measure-Object -Property Length -Sum
-
Maximum -Minimum -Average | Tee-Object -Variable
datasize # Stocker la taille totale en octets
$size_in_byte = $[Link]
# Convertir la taille totale en mégaoctets
$size_in_mb = $size_in_byte / 1MB -as
[int] # Convertir la taille totale en
gigaoctets
$size_in_gb = $size_in_byte / 1GB -as
[int] # Afficher les informations de
taille
Write-host " Taille totale: $size_in_byte octets" -BackgroundColor red -
ForegroundColor Black Write-host " Total Size: $size_in_mb Mo" -BackgroundColor
Green -ForegroundColor Black Write-Host " Total Size: $size_in_gb Go" -
BackgroundColor Yellow -ForegroundColor Black
Exemple 2:
$read_data = Get-Content -Path "D:\OneDrive - Abdelwahed\Desktop\
[Link]" foreach ($path in $read_data){
# Obtenez les détails du fichier dans le chemin spécifié et calculez les propriétés
de taille
$get_files = Get-ChildItem -Path $path -Recurse | Measure-Object -Property Length -
Sum -
Maximum -Minimum -Average | Tee-Object -Variable
datasize # Stocker la taille totale en octets
$size_in_byte = $[Link]
# Convertir la taille totale en mégaoctets
$size_in_mb = $size_in_byte / 1MB -as
[int] # Convertir la taille totale en
gigaoctets
$size_in_gb = $size_in_byte / 1GB -as [int]
# Récupérer le nom du dossier à partir du
chemin
$folderName = Split-Path -Path $path -
Leaf # Afficher les informations de
taille
Write-Host "Dossier: $folderName" -BackgroundColor Blue -ForegroundColor White
Write-host "Taille totale: $size_in_byte octets " -BackgroundColor red -
Automatisation de l'administration avec Windows
PowerShell
ForegroundColor Black Write-host "Taille totale: $size_in_mb Mo" -BackgroundColor
Green -ForegroundColor Black Write-Host "Taille totale: $size_in_gb Go" -
BackgroundColor Yellow -ForegroundColor Black
}
Automatisation de l'administration avec Windows
PowerShell
Exemple 3:
# Charger les formulaires Windows et la configuration
Add-Type -AssemblyName [Link]
# Créer une nouvelle instance de FolderBrowserDialog
$folderBrowser = New-Object [Link]
$[Link] = "Select a
Folder" # Afficher la FolderBrowserDialog
$result = $[Link]()
# Vérifiez si l'utilisateur a cliqué sur le bouton « OK »
if ($result -eq [[Link]]::OK) {
$path =
$[Link]
Write-Host "You selected:
$path"
# Procéder aux opérations sur les fichiers
$get_files = Get-ChildItem -Path $path -Recurse | Measure-Object -Property Length
-Sum
-Maximum -Minimum -Average | Tee-Object -Variable
datasize # Stocker la taille totale en octets
$size_in_byte = $[Link]
# Convertir la taille totale en mégaoctets
$size_in_mb = $size_in_byte / 1MB -as
[int] # Convertir la taille totale en
gigaoctets
$size_in_gb = $size_in_byte / 1GB -as [int]
# Récupérer le nom du dossier à partir du
chemin
$folderName = Split-Path -Path $path -
Leaf # Afficher les informations de
taille
Write-Host "Dossier: $folderName" -BackgroundColor Blue -ForegroundColor White
Write-host " Taille totale: $size_in_byte octets" -BackgroundColor red -ForegroundColor
Black Write-host " Taille totale: $size_in_mb Mo" -BackgroundColor Green -
ForegroundColor Black Write-Host "Total Size: $size_in_gb Go" -BackgroundColor Yellow -
ForegroundColor Black
}
Automatisation de l'administration avec Windows
PowerShell
Construire Active Directory Hiercky
# Assurez-vous que le module ActiveDirectory est
importé Import-Module ActiveDirectory
# Créer des unités organisationnelles (OU)
$ous = @("SRV", "PCs", "IT", "HR", "Sales", "Marketing",
"QA") foreach ($ou in $ous) {
New-ADOrganizationalUnit -Name $ou -Path "DC=ohi,DC=com"
}
# Créer des groupes dans les unités d'organisation spécifiées
$groups = @{
"IT_Gr" =
"OU=IT,DC=ohi,DC=com";
"HR_Gr" =
"OU=HR,DC=ohi,DC=com";
"Sales_Gr" = "OU=Sales,DC=ohi,DC=com";
"Marketing_Gr" = "OU=Marketing,DC=ohi,DC=com";
"QA_Gr" = "OU=QA,DC=ohi,DC=com"
}
foreach ($group in $[Link]) {
New-ADGroup -Name $group -GroupScope Global -Path $groups[$group]
}
# Créer des utilisateurs dans les unités d'organisation et les groupes spécifiés
$users = @{
"IT" = 5;
"HR" = 5;
"Sales" = 5;
"Marketing" = 5;
"QA" = 5;
}
foreach ($ou in $[Link])
{ 1..$users[$ou] | ForEach-Object
{
$userName = "$ou" + "0" + $_
$userDN = "CN=$userName,OU=$ou,DC=ohi,DC=com"
$pwd = ConvertTo-SecureString -AsPlainText "Learn@ohi" -Force
New-ADUser -Name $userName -Path "OU=$ou,DC=ohi,DC=com" -AccountPassword $pwd
-
Enabled $true
Automatisation de l'administration avec Windows
PowerShell
# Ajouter un utilisateur au groupe
$group = $ou + "_Gr"
Add-ADGroupMember -Identity $group -Members $userDN
Automatisation de l'administration avec Windows
PowerShell
}
}
# Attribuez tous les utilisateurs d'une unité d'organisation à leur groupe respectif
(s'ils ne sont pas déjà couverts par la boucle de création)
foreach ($group in $[Link]) {
$ou = $group -replace "_Gr", ""
$usersInOU = Get-ADUser -Filter * -SearchBase
"OU=$ou,DC=ohi,DC=com" foreach ($user in $usersInOU) {
Add-ADGroupMember -Identity $group -Members $user
}
}
1. Importation du module ActiveDirectory
Import-Module ActiveDirectory
Cette ligne garantit que le module Active Directory est chargé dans la session PowerShell. Le module Active Directory fournit les
applets de commande nécessaires à la gestion des objets AD tels que les utilisateurs, les groupes et les unités
organisationnelles. Il est important de s'assurer que ce module est importé avant de tenter toute tâche de gestion AD afin
d'éviter les erreurs de commande.
2. Création d'unités organisationnelles (OU)
$ous = @("SRV", "PCs", "IT", "HR", "Sales", "Marketing",
"QA") foreach ($ou in $ous) {
New-ADOrganizationalUnit -Name $ou -Path "DC=ohi,DC=com"
}
Ici, un tableau de noms d'unité d'organisation est défini et une boucle foreach est utilisée pour parcourir chaque nom
d'unité d'organisation et le créer sous le domaine spécifié (DC=ohi,DC=com). New-ADOrganizationalUnit est l'applet de
commande utilisée pour créer chaque unité d'organisation.
3. Création de groupes dans les unités d'organisation spécifiées
$groups = @{
"IT_Gr" =
"OU=IT,DC=ohi,DC=com";
"HR_Gr" =
"OU=HR,DC=ohi,DC=com";
"Sales_Gr" = "OU=Sales,DC=ohi,DC=com";
"Marketing_Gr" = "OU=Marketing,DC=ohi,DC=com";
"QA_Gr" = "OU=QA,DC=ohi,DC=com"
}
foreach ($group in $[Link]) {
New-ADGroup -Name $group -GroupScope Global -Path $groups[$group]
}
Cette partie définit une table de hachage où chaque paire clé-valeur se compose d'un nom de groupe et du chemin d'accès à
Automatisation de l'administration avec Windows
PowerShell
l'unité d'organisation où le groupe doit être créé. L'applet de commande New-ADGroup est utilisée dans une boucle foreach
pour créer chaque groupe dans son unité d'organisation respective avec une portée globale.
Automatisation de l'administration avec Windows
PowerShell
4. Création d'utilisateurs dans des unités d'organisation et des groupes spécifiés
$users = @{
"IT" = 5;
"HR" = 5;
"Sales" = 5;
"Marketing" = 5;
"QA" = 5;
}
foreach ($ou in $[Link])
{ 1..$users[$ou] | ForEach-Object
{
$userName = "$ou" + "0" + $_
$userDN = "CN=$userName,OU=$ou,DC=ohi,DC=com"
$pwd = ConvertTo-SecureString -AsPlainText "Learn@ohi" -Force
New-ADUser -Name $userName -Path "OU=$ou,DC=ohi,DC=com" -AccountPassword $pwd
- Enabled $true
# Add user to group
$group = $ou + "_Gr"
Add-ADGroupMember -Identity $group -Members $userDN
}
}
Cette section crée des utilisateurs dans chaque unité d'organisation spécifiée. Une table de hachage définit le nombre
d'utilisateurs à créer pour chaque unité d'organisation. Les utilisateurs sont créés avec des conventions de dénomination
séquentielles et ajoutés à leurs groupes respectifs. Le mot de passe de chaque utilisateur est converti en chaîne sécurisée et
attribué.
5. Attribuez tous les utilisateurs d'une unité d'organisation à leur groupe respectif
foreach ($group in $[Link]) {
$ou = $group -replace "_Gr", ""
$usersInOU = Get-ADUser -Filter * -SearchBase
"OU=$ou,DC=ohi,DC=com" foreach ($user in $usersInOU) {
Add-ADGroupMember -Identity $group -Members $user
}
}
Cette dernière partie garantit que tous les utilisateurs déjà présents dans l'OU sont ajoutés au groupe correspondant. Il parcourt
chaque groupe, récupère tous les utilisateurs de l'unité d'organisation et les ajoute au groupe.
Automatisation de l'administration avec Windows
PowerShell
Travaux en arrière-plan et travaux planifiés
Dans PowerShell, vous pouvez utiliser des tâches en arrière-plan et des tâches planifiées pour exécuter des
tâches de manière asynchrone ou à des heures spécifiques, respectivement. Les deux fonctionnalités sont
utiles pour automatiser les tâches sans interférer avec le flux de travail principal de votre session PowerShell.
Voici un bref aperçu de la façon d’utiliser les deux.
Travaux en arrière-plan
Les tâches en arrière-plan exécutent une commande ou un script en arrière-plan sans interagir avec la session
principale. Tu peux continuer à travailler pendant l'exécution du travail. Voici comment travailler avec des tâches
en arrière-plan:
1. Démarrez un travail en arrière-plan: Utilisez l'applet de commande Start-Job pour exécuter un bloc de
script ou une commande en arrière-plan.
Jobs locaux
$job1 = Start-Job -ScriptBlock { Get-Process }
$job2 = Start-Job -FilePath "C:\YourFolder\Script.ps1" # Démarrer un script en tâche de fond
Start-Job -ScriptBlock {Get-Process} -Credential (Get-Credential) # Démarrer le travail
en tant qu'utilisateur différent (demande de mot de passe)
Sauvegarde de fichiers :
$job3 = Start-Job -ScriptBlock {
Copy-Item -Path "C:\Users\Public\Documents" -Destination "\\BackupServer\
BackupFolder" -Recurse -Force
}
Surveillance de l'espace disque :
$job4 = Start-Job -ScriptBlock {
Get-PSDrive -PSProvider FileSystem | Select-Object Name, Used, Free | Export-
Csv - Path "C:\[Link]" -Append
}
Nettoyer les fichiers temporaires
$job5 = Start-Job -ScriptBlock {
Get-ChildItem -Path $env:TEMP -Recurse | Remove-Item -Force -Recurse}
2. Obtenez des informations sur l'emploi : Utilisez Get-Job pour voir toutes les tâches en cours et leurs
statuts. Par exemple :
Get-Job
3. Recevez les résultats du travail: Utilisez Receive-Job pour collecter les résultats d'un travail terminé. Par
exemple :
Receive-Job -Job $job
Receive-Job -Job $job -Keep # empêcher le flush
$job | Wait-job | Receive-Job # Attendre la fin d'un travail avant d'obtenir le résultat
$job | Wait-job -Timeout 10 # Expirez un travail s'il s'exécute trop longtemps (10 secondes dans
cet exemple)
$job | Suspend-Job
$job | Resume-Job
4. Supprimer un travail : Après avoir collecté les résultats, vous souhaiterez peut-être supprimer
le travail à l'aide de Remove-Job. Par exemple :
Remove-Job -Job $job
Automatisation de l'administration avec Windows
PowerShell
Get-Job | Where-Object { $_.State -eq 'Completed' } | Remove-Job
Travaux planifiés
La commande shell:startup sous Windows est un raccourci pour ouvrir le dossier Démarrage. Ce dossier
contient des raccourcis vers des applications qui démarrent automatiquement lorsqu'un utilisateur se connecte à
Windows. La gestion du dossier de démarrage est utile à la fois pour optimiser les temps de démarrage et pour
contrôler quelles applications s'exécutent automatiquement au démarrage du système.
Les tâches planifiées sont utilisées pour exécuter des tâches à des heures ou à des intervalles spécifiques. Elles
sont similaires aux tâches cron sous Linux. Voici comment configurer des tâches planifiées dans PowerShell:
1. Enregistrez une tâche planifiée : Utilisez la cmdlet Register-ScheduledJob pour créer une nouvelle
tâche planifiée. Vous devrez spécifier le bloc de script et le déclencheur. Par exemple :
Supprimer Temp au démarrage
Import-Module ScheduledTasks
$trigger = New-ScheduledTaskTrigger -AtStartup
$action = New-ScheduledTaskAction -Execute "[Link]" -Argument "-
NoProfile - Command `"Get-ChildItem -Path $env:TEMP -Recurse | Remove-Item -
Force -Recurse`"" Register-ScheduledTask -TaskName "ClearTempAtStartup" -
Trigger $trigger -Action $action Get-ScheduledTask -TaskName
"ClearTempAtStartup"
Examen mensuel du compte utilisateur :
$trigger = New-JobTrigger -Monthly -On 1 -At 6:00AM
$scriptBlock = {
Get-ADUser -Filter * -Properties LastLogonDate | Where-Object {
$_.Enabled -eq $true -and $_.LastLogonDate -lt (Get-Date).AddMonths(-3)
} | Export-Csv -Path "C:\Reports\[Link]"
}
Register-ScheduledJob -Name "MonthlyUserReview" -ScriptBlock $scriptBlock -
Trigger
$trigger
2. Répertorier les tâches planifiées : Vous pouvez lister toutes les tâches planifiées en utilisant:
Get-ScheduledJob
3. Obtenez des résultats de travail : Pour voir les résultats des tâches planifiées exécutées, utilisez :
$job = Get-ScheduledJob -Name "DailyProcessCheck"
$job | Receive-Job
4. Pour voir les résultats des tâches planifiées exécutées, utilisez : Si vous devez annuler et supprimer une
tâche planifiée, utilisez :
Unregister-ScheduledJob -Name "DailyProcessCheck"
Définir le service Spouleur
# Définir le nom du service à l'aide d'une variable
$serviceName = "Spooler"
# Obtenez l'état actuel et le type de démarrage du service spécifié
$service = Get-Service -Name $serviceName
# Vérifiez si le type de démarrage n'est pas défini sur Automatique
if ($[Link] -ne
Automatisation de l'administration avec Windows
PowerShell
'Automatic') { # Set the startup
type to Automatic
Set-Service -Name $serviceName -StartupType Automatic
Write-Output " Le type de démarrage du service $serviceName a été défini sur
Automatique."
}
# Vérifiez si le service est arrêté
if ($[Link] -eq
'Stopped') { # Démarrer le
service
Start-Service -Name $serviceName
Write-Output " Le service $serviceName a été arrêté et a maintenant été
démarré."
} else {
# Afficher l'état actuel si le service n'est pas arrêté
Write-Output " Le service $serviceName est déjà en cours
d'exécution."
}
Planifier un travail (script)
Tous les jours à 2 heures du matin
# Définir l'action pour démarrer le script PowerShell
$action = New-ScheduledTaskAction -Execute '[Link]' `
-Argument "-ExecutionPolicy Bypass -File C:\Scripts\
CheckAndStartPrintSpooler.ps1"
# Définir le déclencheur pour quotidiennement à 2 heures du matin
$trigger = New-ScheduledTaskTrigger -Daily -At 2AM
# Configurer le principal pour qu'il s'exécute avec les privilèges les plus
élevés
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType
ServiceAccount -
RunLevel Highest
# Paramètres pour gérer les tâches manquées
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable
# Créer la tâche planifiée
Register-ScheduledTask -TaskName "Check and Start Print Spooler" -Action
$action - Trigger $trigger -Principal $principal -Settings $settings
Automatisation de l'administration avec Windows
PowerShell
Plusieurs heures spécifiques chaque jour
# Définir des déclencheurs pour différents moments
$trigger1 = New-ScheduledTaskTrigger -Daily -At "10:00AM"
$trigger2 = New-ScheduledTaskTrigger -Daily -At "2:00PM"
$trigger3 = New-ScheduledTaskTrigger -Daily -At
"4:00PM" # Créez la tâche planifiée avec tous les
déclencheurs
Register-ScheduledTask -TaskName "RunMultipleTimesDaily" -Action $action -
Trigger
$trigger1, $trigger2, $trigger3 -Principal $principal
Automatisation de l'administration avec Windows
PowerShell
Toutes les quelques heures tout au long de la journée
# Définir un déclencheur pour démarrer à 6 heures du matin et répéter toutes
les 4 heures
$trigger = New-ScheduledTaskTrigger -Daily -At 6AM
$[Link] = 'P1D' # Durée fixée à 1 jour
$[Link] = 'PT4H' # Intervalle réglé à 4 heures
Horaires plus complexes (par exemple, toutes les 3 heures et 30 minutes)
# Définir un déclencheur pour démarrer à 7 heures du matin et répéter toutes
les 3 heures et 30 minutes
$trigger = New-ScheduledTaskTrigger -Daily -At 7AM
$[Link] = 'P1D' # Durée fixée à 1 jour
$[Link] = 'PT3H30M' # Intervalle réglé à 3 heures et 30
minutes
Automatisation de l'administration avec Windows
PowerShell
Administration des ordinateurs distants
Avant de pouvoir utiliser PowerShell Remoting, il doit être activé sur les machines cibles. Cela se fait généralement à l'aide
de l'applet de commande Enable- PSRemoting , qui configure les écouteurs WinRM nécessaires, démarre le service WinRM
et configure les règles de pare-feu appropriées.
Exemple de commande pour activer l'accès à distance:
Enable-PSRemoting -Force
Set-ExecutionPolicy RemoteSigned
Établir une session à distance
Une fois PowerShell Remoting activé, vous pouvez démarrer une session à distance. L'applet de commande Enter-
PSSession est utilisée pour démarrer une session interactive avec une machine distante.
Exemple de commande pour démarrer une session à distance :
Enter-PSSession -ComputerName C19 -Credential $(Get-
Credential) Get-PSSessionConfiguration
Cette commande vous invite à saisir vos informations d'identification, puis démarre une session interactive avec C19.
Exit-PSSession
Même
$client = New-PSSession –ComputerName
C19 Enter-PSSession –Session $client
Exit-PSSession #(alias exit)
Exécution de commandes à distance
Si vous devez exécuter une seule commande ou un bloc de script sur plusieurs ordinateurs distants, Invoke-Command est l'outil
qu'il vous faut.
Commande pour exécuter un bloc de script à distance :
Invoke-Command -ComputerName Server01, Server02 -
ScriptBlock { Get-Service | Where-Object {$_.Status -
eq 'Running'}
}
ou
Invoke-Command -ComputerName (Get-Content [Link])-
ScriptBlock { Get-Service | Where-Object {$_.Status -eq
'Running'}
} # cette commande exécute un bloc de script sur Server01 et Server02 qui répertorie tous les services en
cours d'exécution.
Invoke-Command –Computer C19 –ScriptBlock { Get-Process –Name
Note* } | Stop-Process
Invoke-Command -Computer c19 - { Get-Process -Name Note*; get-service -name
print* } Invoke-Command { get-service -name wuau* }
Gestion des systèmes distants à l'aide de CIM
WMI et CIM peuvent gérer des systèmes locaux et distants. Pour les systèmes distants, CIM est préféré en
raison de sa meilleure transparence du réseau.
Informations sur le système d'exploitation
Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName c19 | select name
Automatisation de l'administration avec Windows PowerShell
Redémarrage d'un ordinateur distant
$remoteComputerName = 'C19'
# Récupérer l'instance CIM du système d'exploitation à partir de l'ordinateur distant
$os = Get-CimInstance -ClassName CIM_OperatingSystem -ComputerName $remoteComputerName
# Invoquez la méthode « Reboot » pour redémarrer l'ordinateur
distant Invoke-CimMethod -InputObject $os -MethodName "Reboot"
Gestion des services sur des ordinateurs distants
$remoteComputerName = 'C19'
# Obtenir l'état du service Bureau à distance
Get-CimInstance -ClassName Win32_Service -Filter "Name = 'TermService'" -ComputerName
$remoteComputerName |
Select Name, State
# Démarrer le service
$remoteComputerName = 'C19'
# Get the status of the Remote Desktop service
Get-CimInstance -ClassName Win32_Service -Filter "Name = 'TermService'" -ComputerName
$remoteComputerName | start-service
Surveillance de l'utilisation du processeur et de la mémoire
$remoteComputerName = 'C19'
Get-CimInstance -ClassName Win32_Processor -ComputerName
$remoteComputerName | Select-Object LoadPercentage # Charge du
processeur
Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName
$remoteComputerName | Select-Object FreePhysicalMemory,
TotalVisibleMemorySize # Utilisation de la mémoire
Remote Jobs
Redémarrer un service sur plusieurs ordinateurs distants
$computers = "DC1", "C19",
"Server03" foreach ($computer in
$computers) {
$job = Invoke-Command -ComputerName $computer -
ScriptBlock { Restart-Service -Name "Spooler"
} -AsJob
}
CIM Jobs
Surveillance de l'utilisation du disque sur les systèmes distants
$computers = "C19", "Dc1"
foreach ($computer in $computers) {
$job = Start-Job -ScriptBlock {
param($comp)
Get-CimInstance -ClassName CIM_LogicalDisk -ComputerName $comp |
Select- Object SystemName, DeviceID, @{Name="FreeSpaceGB";
Expression={$_.FreeSpace / 1GB -as [int]}}
} -ArgumentList $computer
}
Automatisation de l'administration avec Windows PowerShell
Stratégie de groupe Monitoring
1. Vérifiez l'application de la
stratégie de groupe
Automatisation de l'administration avec Windows PowerShell
Pour vérifier que la stratégie de groupe est appliquée correctement à un ordinateur ou à un utilisateur, vous pouvez
utiliser la cmdlet Get-GPResultantSetOfPolicy . Cette applet de commande génère un rapport qui montre quelles stratégies
de groupe sont appliquées et leurs paramètres.
# Générer un rapport RSoP pour l'ordinateur
Get-GPResultantSetOfPolicy -ReportType Html -Path "C:\GPReports\[Link]" -
Computer "c19" # Générer un rapport RSoP pour un utilisateur
Get-GPResultantSetOfPolicy -ReportType Html -Path "C:\GPReports\[Link]" -User "Domain\
User"
2. Récupérer tous les GPO du domaine
Vous pouvez répertorier tous les objets de stratégie de groupe de votre domaine à l'aide de Get-GPO. Ceci est utile
pour examiner rapidement les politiques existantes.
# Obtenez tous les GPO du
domaine Get-GPO -All
3. Obtenez un GPO spécifique
Si vous avez besoin de détails sur un GPO spécifique, y compris ses paramètres, vous pouvez le récupérer par nom ou
ID :
# Obtenir un GPO spécifique par son nom
Get-GPO -Name "Default Domain Policy"
4. Surveiller les modifications des GPO
Pour suivre les modifications apportées aux objets de stratégie de groupe, vous pouvez utiliser les applets de
commande Get-GPPermissions et Get-GPOReport . Vous pouvez exécuter ces commandes périodiquement et comparer les
sorties pour détecter les changements.
# Obtenir les autorisations définies sur un GPO
Get-GPPermissions -Name "Default Domain Policy"
-All # Générer un rapport pour un GPO
spécifique
Get-GPOReport -Name "Default Domain Policy" -ReportType Xml -Path "C:\GPReports\
[Link]"
5. Vérifiez les GPO liés à une unité d'organisation
Vous pouvez répertorier tous les GPO liés à une unité organisationnelle (OU) spécifique à l'aide de Get-GPInheritance.
# Obtenir l'héritage GPO pour une unité d'organisation
Get-GPInheritance -Target "OU=Sales,DC=Domain,DC=com"
6. Sauvegarder et restaurer les GPO
C'est une bonne pratique de sauvegarder régulièrement les GPO. Vous pouvez automatiser ce processus à l'aide de
PowerShell.
# Sauvegarder tous les GPO
Backup-GPO -All -Path "C:\GPOBackup"
# Restaurer un GPO à partir d'une
sauvegarde
Restore-GPO -Name "Default Domain Policy" -Path "C:\GPOBackup"
7. Auditer les modifications des GPO
Pour faciliter l'audit, vous pouvez activer l'audit des modifications de stratégie de groupe via la console de gestion des
stratégies de groupe ou en utilisant PowerShell pour définir les stratégies d'audit nécessaires. Ensuite, utilisez les
journaux d'événements pour surveiller les modifications.
# Vérifiez les paramètres d'audit (exemple pour la configuration avancée de la politique
d'audit) Auditpol /get /category:"Object Access"
8. Script des vérifications régulières
Pour automatiser ces vérifications, vous pouvez créer un script PowerShell qui s'exécute à intervalles planifiés à
Automatisation de l'administration avec Windows PowerShell
l'aide du Planificateur de tâches. Ce script peut vérifier l'état des GPO, générer des rapports et même vous alerter
par e-mail s'il détecte des changements importants.
Partage et autorisations avec PowerShell
Get-SmbShare
Get-
SmbOpenFile
Get-
SmbConnection
Get-SmbSession
Get-Acl "D:\Public_Share" | fl *
Contrôle de la bande passante
Install-WindowsFeature FS-SMBBW
Set-SmbBandwidthLimit -Category Default -BytesPerSecond 5242880
Set-SmbBandwidthLimit -Category LiveMigration -BytesPerSecond 20971520
Set-SmbBandwidthLimit -Category StorageReplication -BytesPerSecond 20971520
Arrêtez le partage administrateur par défaut
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\
Parameters"
-Name "AutoShareWks" -Value 0 -Type
DWord Restart-Service -Name
LanmanServer
Créer un nouveau partage SMB
New-SmbShare -Name "PublicShare" -Path "D:\Public_Share" -FullAccess "DOMAIN\
AdminGroup"
-ChangeAccess "DOMAIN\PowerUsers" -ReadAccess "Everyone"
$acl = Get-Acl "D:\Public_Share"
$acl | fl *
$[Link] # Résumé d'accès
$[Link] # Détails d'accès
$acl | Get-Member
Define new access rules
$rule1 = New-Object
[Link]("Administrators",
"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow") # pour les utilisateurs
et groupes locaux
$rule1 = New-Object
[Link]("[Link]\IT_GR",
"FullControl", "ContainerInherit,ObjectInherit", "Allow")
$rule2 = New-Object [Link]("DOMAIN\
HR_GR", "Modify", "ContainerInherit,ObjectInherit", "Allow")
$rule3 = New-Object
[Link]("Everyone", "Read",
"ContainerInherit,ObjectInherit", "Allow")
Ajouter les règles à l'ACL (en mémoire)
Automatisation de l'administration avec Windows PowerShell
$[Link]($rule1)
$[Link]($rule2)
$[Link]($rule3)
$[Link]
Appliquer l'ACL au dossier
Set-Acl "D:\Public_Share" $acl
$[Link]
Automatisation de l'administration avec Windows PowerShell
Changer de propriétaire
$newOwner = New-Object [Link]("DOMAIN",
"NewOwnerUsername")# à l'utilisateur ou au groupe du domaine
$newOwner = New-Object [Link]("Administrators") # à
un utilisateur ou un groupe local
$[Link]($newOwner)
Set-Acl "D:\Public_Share" $acl
Activer l'audit
$auditRule = New-Object
[Link]("everyone", "Read,Write",
"None", "None", "Success,Failure")
$auditRule = New-Object
[Link]("everyone", "Read,Write",
"None", "None", "Success,Failure")
$[Link]($auditRul
e) Set-Acl "D:\
Public_Share" $acl
$[Link] | Format-List *
Mapper un lecteur réseau
New-PSDrive -Name Z -PSProvider FileSystem -Root \\Server\Share -Persist
Write-Output 'Première' && Write-Output 'Seconde'
Write-Output 'Première ' || Write-Output ' Seconde ' # La première
commande réussit, donc la deuxième commande n'est pas exécutée.
Automatisation de l'administration avec Windows PowerShell
Compresser des fichiers ou des dossiers
Pour créer une archive (fichier ZIP) de fichiers spécifiques ou d'un dossier entier, vous pouvez utiliser la cmdlet
Compress-Archive. Voici la syntaxe de base et un exemple:
Syntaxe:
Compress-Archive -Path <PathToFilesOrFolders> -DestinationPath
<PathToOutputZipFile>
Exemple:
# Compresser plusieurs fichiers spécifiques
Compress-Archive -Path "C:\Users\example\Documents\
[Link]", "C:\Users\example\Documents\[Link]" -
DestinationPath "C:\Archives\[Link]"
# Compresser un dossier entier
Compress-Archive -Path "C:\Users\example\Documents" -
DestinationPath "C:\Archives\[Link]"
Extraire des fichiers d'une archive
To extract files from a ZIP archive, use the Expand-Archive cmdlet. Here's how you can do it:
Syntaxe:
Expand-Archive -Path <PathToZipFile> -DestinationPath
<PathToExtractFiles>
Exemple:
Expand-Archive -Path "C:\Archives\[Link]" -
DestinationPath "C:\Users\example\ExtractedFiles"
Options supplémentaires
Les applets de commande Compress-Archive et Expand-Archive offrent des paramètres supplémentaires pour
personnaliser leur comportement:
-Update (uniquement avec Compress-Archive): met à jour une archive existante en ajoutant de
nouveaux fichiers ou en remplaçant les fichiers existants dans l'archive par des versions plus
récentes.
-Force: Écrase une archive existante ou des fichiers extraits sans demander à l'utilisateur.
-CompressionLevel (uniquement avec Compress-Archive): Spécifie le niveau de
compression (Optimal, Fastest, NoCompression).
Exemple d'utilisation d'options supplémentaires :
# Compresser un dossier avec une compression maximale
Compress-Archive -Path "C:\Users\example\Documents" -
DestinationPath "C:\Archives\[Link]" -
CompressionLevel Optimal -Force
# Mettre à jour une archive existante avec de nouveaux fichiers
Compress-Archive -Path "C:\Users\example\NewDocuments" -
DestinationPath "C:\Archives\[Link]" -Update