Powershell

Clear-Host
Get-Alias

Get-Command service
Get-Command -Noun service

Get-Help Get-Service

opérateur:
1 -eq 1
« alice » -eq « alice »
« alice » -eq « ALICE » ==> non sensible à la casse
« alice » -ceq « ALICE » ==> sensible à la casse
« alice » -eq « ALICE » -and 1 -eq 1
« alice » -eq « ALICE » -and 1 -eq 1
(« alice » -eq « ALICE ») -and (1 -eq 1)
(« alice » -eq « ALICE ») -and (1 -eq 0)
!(1 -eq 1)

Les modules:

Get-Module

Get-Command -Module Microsoft:PowerShell.Management ==> Voir toutes les commandlet disponibles dans le module en question

Get-Module -ListAvailable ==> Liste tous les modules disponibles

Get-SmbShare ==> Voir les partages présent sur le serveur Windows

Quand on appelle une commande présente dans un module disponible, le module est automatiquement chargé

Pipeline:

Get-Service | Format-List

Get-Service s* | Sort-Object status -Descending | Format-List

Get-Service | Where-Object {$_.status -eq « Running »} | Format-List

$_ ==> Représentation symbolique de chacun des services (des objets), variable spéciale

Get-Service | Get-Member ==> Affiche les property et les méthod

Get-Service s* | Select-Object Name, StartupType ==> Affiche uniquement le nom et le type de démarrage des services

Stratégie d’exécution des sctipts:

Get-ExecutionPolicy ==> Affiche la stratégie en cours
RemoteSigned ==> Ne permet pas d’exécuter les scripts non reconnus
Set-ExecutionPolicy -ExecutionPolicy AllSigned ==> Limite l’exécution des scripts à ceux signés par un éditeur approuvé
Set-ExecutionPolicy -ExecutionPolicy Unrestricted ==> Execute tous les scripts sans restriction
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUSer ==> uniquement pour l’utilisateur courant
Get-ExecutionPolicy -List ==> On voit les niveau de stratégie

Visual Studio Code:

C’est gratuit, outil Microsoft

Il faut installer le package French et Powershell en bas à gauche de l’écran

$PSVersionTable.PSVersion ==> Affiche la version de powershell

Les variables:

Write-Host « Bonjour monde ! » ==> Afficher à l’écran

$personneNom = « Alice »
$personneAge = 35

Write-Host « Bonjour $personneNom. Vous avez $personneAge ans. »

==> Commentaire

<#
Commentaire

>

<# ==> On peut commenter un commentaire

>

Les types de données:

[string]$personneNom = « Alice »
[int]$personneAge = 37

[string]$personneAge = « 21 »

[Int32]$personneAgeDouble = $personneAge * 2 ==> Affichera 2121 car c’est une chaîne de carractère

Conversion explicite:
[Int32]$personneAgeDouble = [Convert]::ToInt32($personneAge,10) * 2 ==> Affichera 42, 10 pour base 10

Les instructions:

if($personneAge -le 25) {Write-Host « Vous êtes jeune »}
if($personneAge -le 35) {Write-Host « Vous êtes la force vive de votre génération »}

if($personneAge -gt 25 -and $personneAge -le 35) {Write-Host « Vous êtes la force vive de votre génération »}

ou

if($personneAge -le 25) {Write-Host « Vous êtes jeune. »}
elseif ($personneAge -le 35) {Write-Host « Vous êtes la force vive de votre génération. »}
else {Write-Host « Vous avez atteint la maturité. »}

ou

switch ($personneAge) {
{$_ -le 25} { Write-Host « Vous êtes jeune » }
{$_ -le 35} { Write-Host « Vous êtes la force vive de votre génération » }
{$_ -le 45} { Write-Host « Vous avez atteint la maturité » }
Default {Write-Host « Vous avez atteint la sérénité »}
}

switch ($personneAge) {
{$_ -le 25} { Write-Host « Vous êtes jeune »;break}
{$_ -le 35} { Write-Host « Vous êtes la force vive de votre génération »;break}
{$_ -le 45} { Write-Host « Vous avez atteint la maturité »;break}
Default {Write-Host « Vous avez atteint la sérénité »}
}

Formater les chaînes de caractères:

switch ($personneAge) {
{$_ -le 25} { « {0}, Vous êtes jeune car vous avez {1} ans » -F $personneNom,$personneAge ;break}
{$_ -le 35} { « {0}, Vous êtes la force vive de votre génération car vous avez {1} ans » -F $personneNom,$personneAge ;break}
{$_ -le 45} { « {0}, Vous avez atteint la maturité car vous avez {1} ans » -F $personneNom,$personneAge ;break}
Default {« {0}, Vous avez atteint la sérénité car vous avez {1} ans » -F $personneNom,$personneAge}
}

Les tableaux:

$ville = « Nantes », »Lyon », »Paris », »Marseille »

« Il y a {0} éléments dans le tableau des villes. » -F ($ville.Count)

$ville[1] ==> Affiche Lyon

$pays = @() ==> tableau vide

« Il y a {0} éléments dans le tableau des pays. » -F ($pays.Count)

$pays = « France », »Belgique »

Boucle for:

for ($i = 0; $i -lt $array.Count; $i = $i +1)
{
$ville[$i]
}

<==>

for ($i = 0; $i -lt $array.Count; $i++)
{
$ville[$i]
}

foreach:

$villes = « Nantes », »Lyon », »Paris », »Marseille »

foreach ($ville in $villes)
{
« {0} est une très belle ville. » -F $ville
}

$villes ==> Affiche tout le contenu du tableau

$villes += « Angers » ==> Ajoute un élément dans le tableau
$villes += « Lille »
$ville[3] = « Nice » ==> Remplace un élément dans le tableau

$villes.clear() ==> Vide le contenu du tableau mais garde sa structure

$villes -contains « Lille » ==> Est-ce que le tableau contient Lille (True ou False)

$villes -like « L » | Select-Object -First 1 ==> Récupère la première valeur du tableau qui commence par L $villes -like « L » | Select-Object -Last 1 ==> Récupère la dernière valeur du tableau qui commence par L

Les fonctions:

function Stagiaire {
param (
[string]$personneNom
[int32]$personneAge
)
« Bonjour {0} ! Vous avez {1} ans. » -F $personneNom,$personneAge
}

Stagiaire « Alice » 35
Stagiaire « Bob » 54

function Stagiaire {
param (
[string]$personneNom
[int32]$personneAge
)
BEGIN {Write-Host « Début du script. » -ForegroundColor Green}
PROCESS {« Bonjour {0} ! Vous avez {1} ans. » -F $personneNom,$personneAge}
END {Write-Host « Fin du script. » -ForegroundColor Green}
}

Stagiaire « Alice » 35

function Stagiaire
{
[CmdletBinding()]
param (
[string]$personneNom
[int32]$personneAge
)
BEGIN {Write-Verbose « Début du script. »}
PROCESS {« Bonjour {0} ! Vous avez {1} ans. » -F $personneNom,$personneAge}
END {Write-Verbose « Fin du script. »}
}

Stagiaire « Alice » 35 -Verbose

function Stagiaire
{
[CmdletBinding()]
param (
[Parameter(Mandatory=$true)]
[string]$personneNom,

[Parameter(Mandatory=$true)]
[ValidateRange(7,77)]
[int32]$personneAge
)
BEGIN {Write-Verbose « Début du script. »}
PROCESS {« Bonjour {0} ! Vous avez {1} ans. » -F $personneNom,$personneAge}
END {Write-Verbose « Fin du script. »}

}

Stagiaire « Alice » 35 -Verbose

function Stagiaire
{
param ([string]$personneNom)

# Test d’existence du compte dans Active Directory try {$existeAD = (Get-ADUser $personneNom)} catch {$existAD = $false} if ($existAD) {« Le compte du stagiaire {0} existe dans Active Directory. » -F $personneNom} else {« Vous devez créer le compte de {0} dans Active Directory. » -F $personneNom}

)

Stagiaire « Alice »
Stagiaire « Bob »
Stagiaire « Chris »

Deboguer une fonction:

function Stagiaire
{
[CmdLetBinding()]
param ( [Parameter(Mandatory-$true)]
[Alias(« Compte »)]
[string]$personneNom )

$DebugPreference = « Inquire » # Test d’existence du compte dans Active Directory try {Write-Debug « Test d’existence. » $existeAD = (Get-ADUser $personneNom)} catch {$existAD = $false} Write-Debug « Affichage du message » if ($existAD) {« Le compte du stagiaire {0} existe dans Active Directory. » -F $personneNom} else {« Vous devez créer le compte de {0} dans Active Directory. » -F $personneNom}

)

Stagiaire « Bob »

Aide d’une fonction:

function Stagiaire
{

<# .SYNOPSIS Vérifie l’existence d’un compte dans Active Directory .DESCRIPTION Vérifie l’existence d’un compte dans Active Directory L’objectif est de demander de créer un compte dans Active Directory s’il n’existe pas .PARAMETER personneNom C’est l’identifiant de l’utilisateur. Généralement, il s’agit du prénom. Ce paramètre est obligatoire Compte est un alias de personneNom .EXAMPLE Stagiaire -Compte « Bob » .LINK https://coudr.com #> [CmdLetBinding()] param ( [Parameter(Mandatory-$true)] [Alias(« Compte »)] [string]$personneNom ) # Test d’existence du compte dans Active Directory try {$existAD = (Get-ADUser $personneNom)} catch {$existAD = $false} if ($existAD) {« Le compte du stagiaire {0} existe dans Active Directory. » -F $personneNom} else {« Vous devez créer le compte de {0} dans Active Directory. » -F $personneNom}

)

Get-Help Stagiaire

Get-Help Stagiaire -Full

Ouvrir une session distante en powershell:

Enable-PSRemoting ==> sur l’ordinateur distant

Enter-PSSession

Exécuter du PowerShell distant:

Invoke-Command -ComputerName -ScriptBlock {Get-Service}

$sessions=New-PSSession -ComputerName
$sessions

Invoke-Command -Session $sessions -ScriptBlock {Get-Process}