Aller au contenu

PowerShell

Définition

  • Une cmdlet a toujours la même syntaxe, ce qui rend son utilisation et sa compréhension relativement simple. Elle est composée d’un verbe + un nom (en anglais, Verb + Noun) séparé par un tiret.

  • Le préfixe de cmdlet est appelé verbe car il détermine l’action à effectuer sur les entités désignées dans la phrase. Les plus courants : Get, Set, New, Add, Remove, Start…

  • Les commandes comportent des paramètres obligatoires ou optionnels qui commencent toujours par un tiret avec plusieurs ou aucun argument(s).

  • PowerShell assure la compatibilité avec les commandes DOS par l’intermédiaire des alias ; la liste des alias est disponible en exécutant la commande Get-Alias.

  • Par exemple, la cmdlet Get-Service respecte parfaitement ce format. Le verbe Get signifie « obtenir ». Le nom Service signifie un objet ou une liste d’objets représentant les services. Cela signifie en clair : « lister un ou plusieurs objets représentant les services ».

    # Ceci est un commentaire sur une ligne

Vous pouvez également commenter plusieurs lignes en utilisant le bloc <# ... #>

    <#
    Ceci est un commentaire
    sur plusieurs lignes
    dans un bloc de commentaires.
    #>

Aide et premiers doigts sur la console !

Version de PowerShell installée :

$PSVersionTable

PowerShell assure la compatibilité avec les commandes DOS par l’intermédiaire des alias :

Get-Alias

Lister les commandes disponibles :

Get-Command

Lister les commande comprenant la chaine de caractère "user" :

Get-Command *user*

Lister les services commençant par get :

Get-Command get*

Aide

Mettre à jour l'aide :

Update-Help

Obtenir des informations détaillées sur l’utilisation des cmdlets, comme le nom et la description de la syntaxe de la cmdlet :

Get-Help

Le paramètre -examples permet d’obtenir des exemples d’utilisation :

Get-Help nomdelacommande -examples

Pipe

En PowerShell, le concept de "pipe" est fondamental. Il permet de passer la sortie d'une commande comme entrée à une autre commande. Cela facilite la manipulation et le traitement des données de manière fluide et efficace.

Syntaxe de base :

Commande1 | Commande2

Exemples d'utilisation :

Vous pouvez lister les fichiers dans un répertoire et afficher leurs détails en utilisant Get-ChildItem et Format-List :

Get-ChildItem | Format-List

Vous pouvez lister les fichiers et filtrer ceux qui ont une extension spécifique, par exemple .txt :

Get-ChildItem | Where-Object { $_.Extension -eq ".txt" }

Vous pouvez lister les processus en cours d'exécution et filtrer ceux qui ont un nom spécifique, par exemple notepad :

Get-Process | Where-Object { $_.Name -eq "notepad" }
Vous pouvez lister les services et arrêter un service spécifique, par exemple wuauserv (Windows Update) :

Get-Service | Where-Object { $_.Name -eq "wuauserv" } | Stop-Service

Commandes utiles

Nommer la machine

Set-ComputerName -ComputerName "newservername"

Services

Get-Service

Restart-service UpdateServices

Stop-Service

Set-Service spooler startuptype manual passthru

Créer un compte utilisateur local

New-LocalUser -Name 'UserPrincipalName' -Description 'description' -NoPassword

Windows Subsystem for Linux

wsl --install

wsl --list --online

wsl --install -d [Nom de la distribution Linux]

Autoriser l'éxécution des scipts

Set-ExecutionPolicy RemoteSigned # ou Bypass

Connexion ordinateur distant

Ouvrir une connexion distante interactive et non presistante : 1 session à la fois :

Enter-PSSession -ComputerName 192.168.0.1 -Credential administrateur@maboite.home

Ouvrir une connexion distante persistante, plusieurs sessions peuvent âtre créées. New-pssession renvoie un objet de session PowerShell qui peut être utilisé pour exécuter des commandes ultérieures à distance :

$MASESSION = New-PSSession -ComputerName monpc.home

Lister les sessions ouvertes :

Get-PSSession
Fermer la session concernée :

Remove-PSSession -Session $MASESSION

winRM

Get-Service WinRM

Enable-PSRemoting

winrm get winrm/config

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.29.10"

Disques

Volume simple

Lister les disques :

Get-Disk

Initialiser le disque 2 (GPT par défaut) "–PartitionStyle MBR" pour MBR :

Initialize-Disk -Number 2

Supprimer tous les volumes du disque 2 :

Clear-Disk -Number 2

Créer la partition sur le disque 2 en utiliant tout l'espace disponible :

New-Partition DiskNumber 2 -AssignDriveLetter UseMaximumSize

Formater en NTFS le volume concerné et lui attribuer une lettre de lecteur (ici E) :

Format-Volume -DriveLetter E -FileSystem NTFS -Confirm:$false

Lister les volume :

Get-Volumes

List disks that are not system disks to avoid accidently formatting your system drive :

Get-Disk | Where-Object IsSystem -eq $False

Lister le disque hors ligne et l’initialiser :

Get-Disk | Where-Object IsOffline Eq $True | Initialize-Disk

Miroir RAID 1

Tapez la cmdlet suivante pour obtenir la liste des disques disponibles :

Get-Disk

Identifiez les numéros des deux disques que vous souhaitez utiliser pour le volume en miroir. Dans cet exemple, nous utiliserons les disques 1 et 2.

Identifiez les identifiants uniques des disques en utilisant la cmdlet

Get-PhysicalDisk

Créez un nouveau pool de stockage à l'aide de la cmdlet suivante :

New-StoragePool -FriendlyName "RAID1_pool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -CanPool $True | Where-Object {$_.UniqueId -eq "Disk1UniqueID" -or $_.UniqueId -eq "Disk2UniqueID"})

Dans cette cmdlet, nous créons un nouveau pool de stockage nommé "RAID1_pool" à l'aide des deux disques sélectionnés. Remplacez "Disk1UniqueID" et "Disk2UniqueID" par les identifiants uniques des disques que vous avez sélectionnés.

Créez un volume stockage en miroir à l'aide de la cmdlet suivante :

New-Volume -StoragePoolFriendlyName "RAID1" -FriendlyName "RAID1_volume" -FileSystem CSVFS_NTFS -Size 512GB -ResiliencySettingName Mirror

Dans cette cmdlet, nous créons un nouveau volume en miroir nommé "RAID1_volume" à l'aide du pool de stockage "RAID1Pool". Nous définissons la taille du volume sur 512 Go et utilisons le système de fichiers NTFS. Le paramètre -ResiliencySettingName est défini sur Mirror pour créer un volume en miroir.

Vérifiez que le volume en miroir a été créé en utilisant la cmdlet suivante :

Get-Volume

Dosssiers et fichiers

Lister le contenu du répertoire courant :

Get-ChildItem

Changer de répertoire :

Set-Location

Créer un répertoire :

New-Item -Path D: -Name NOM -ItemType Directory

Créer un fichier :

New-Item -Path PATH -Name NOM -ItemType File

Ecrire dans un fichier :

Set-Content ou Add-Content -Path "fichier.txt" -Value "Bonjour"

Lire un fichier :

Get-Content "C:\Users\Administrateur\AppData\Local\Temp\\WSUS_PostInstall_20211116T115542.log"

Copier un fcihier dans un répertoire :

Copy-Item "C:\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"

Copier le contenu d'un répertoire vers un répertoire de destination :

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Presentaion" -Recurse

Copier un fichier vers un ordinateur distant, besoin d'ouvrir une session permanente (penser à fermer la session) :

$MASession = New-PSSession -ComputerName "Server01" -Credential "upn@domaine.fr"

Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $MASession

Remove-PSSession -Session $MASESSION

Lister les services et leurs status

Get-Service dhcp*

Réseau

Lister les interfaces Ethernet :

Get-NetAdapter

Assigner une adresse Ip statique/fixe si vide :

New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 23 -InterfaceIndex 8

Assigner une adresse Ip statique/fixe si déjà présente :

Set-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 23 -InterfaceIndex 8

Activer le DHCP client :

Set-NetIPAddress -InterfaceIndex 8 -DHCP enabled/disabled

Assigner le ou les adresses IP DNS :

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("10.0.0.1","10.0.0.2")

Désactiver Pare-feu Windows avec netsh :

netsh advfirewall set allprofiles state off

Activer Pare-feu Windows avec netsh :

netsh advfirewall set allprofiles state on

Lister profil de connexion du réseau/pare-feu :

Get-NetConnectionProfile

Changer de profil (Domain Authenticated / Private / Public) :

Set-NetConnectionProfile -InterfaceIndex 8 -NetworkCategory Private

Lister les connexions TCP :

Get-NetTCPConnection

Lister les ports en écoute :

Get-NetTCPConnection -State Listen

Tester un port en particulier (ici DNS) :

Get-NetTCPConnection -localport 53

Lister les ports d'écoute en affichant l'IP locale et le nom du processus associés :

Get-NetTCPConnection -State Listen | Select-Object -Property LocalAddress,LocalPort,@{'Name' = 'ProcessName';'Expression'={(Get-Process -Id $\_.OwningProcess).Name}}

Lister les connexions TCP vers Internet :

Get-NetTCPConnection -AppliedSetting Internet