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}