ipt ou de fonction avec le bloc **''Param()''**:
<code powershell>
# Début de script aScript.ps1
Param (...
$FirstParam,
$SecondParam,
$ThirdParam
)
</code>
<code powershell>
function aFunctionName {
Param(
$FirstParam,
$SecondParam,
$ThirdParam
)
BEGIN{}
PROCESS{}
END{}
}
</code>
Avec des paramètres déclarés ainsi, l'utilisate
comme les switchs ''-Verbose'' et ''-Debug''.
<code powershell>
Param(
[CmdletBinding()]
[Param... bug 'Ceci est un message de debogage de script'
</code>
L'appel du script sans option :
<code powershell>
.\aTestScript.ps1 -BatteryLevel Low
Niveau de batterie : Low
</code>
Si le script est appelé avec l'option ''-Verbos
leau ou plus généralement d'un objet itérable :
<code powershell>
ForEach ($user in $users) {
Set-ADUser $user -Department "Marketing"
}
</code>
<note>
A partir de PowerShell 7 une cmdlet **Fo... on. La commande précédente peut alors s'écrire :
<code powershell>
$users | ForEach-Object -Parallel { Set-ADUser $user -Department "Marketing" }
</code>
</note>
==== For ====
La boucle **For** est ut
permet de créer une table de hachage minimale :
<code powershell>
New-ModuleManifest -Path C:\My.Module... sd1 -ModuleVersion "2.0" -Author "YourNameHere"
</code>
On peut définir les valeurs des arguments dans une table de hash puis appeler la cmdlet :
<code powershell>
# Définition des paramètres
$module_... -Path .\My.Module.Name.psd1 @module_properties
</code>
===== Nom de module ======
Sans fichier manif
Fonctions et modules ======
Lorsqu'on produit du code on peut avoir envie ou besoin de :
* Réutiliser... Les fonctions =====
Une fonctions est un bloc de code réutilisable. Plutôt que d'écrire à différents en... nécessaire par le script. Cette factorisation du code est un élément clé pour la lisibilité, le débogag... xe de définition d'une fonction en PowerShell :
<code powershell>
# Définition d'une fonction nommée "G
======
Une chaine de caractère à une longueur :
<code powershell>
$aStr = "Ma chaine."
$aStr.Length
10
</code>
<code powershell>
# Enregistre la saisie de l'utilisateur convertie en minuscules
$userFirstName = ... st -Prompt "Saisissez votre prénom").ToLower()
</code>
La méthode String.Contains() retourne $true si
ll aide}}
====== PowerShell : Intégrer l'aide au code ======
La cmdlet **Get-Help** peut extraire les ... rnière ligne avant la fermeture de la fonction.
<code powershell>
<#
.Description
The MyProcess... >
function MyFunction { Get-Process powershell}
</code>
<code powershell>
function MyProcess
{
<#
.Description
The MyProcess function gets
aîne de caractère unique associée à la valeur.
<code powershell>
# Définit une table de hachage de 2 é... hercher une clé
$computers.ContainsKey('ATARI')
</code>
===== Itérations =====
<code powershell>
foreach($key in $ageList.keys)
{
$message = '{0} is {1... -f $_.key, $_.value
Write-Output $message
}
</code>
===== Passage des arguments =====
On peut ut
our charger le contenu du fichier "fichierA.txt"
<code powershell>
$lines = Get-Content -Path '.\fichier... h ( $line in $lines ){
Write-Output "$line"
}
</code>
===== Formatage CSV =====
De nombreuses applic... rrow,u025351,Sales
Elon,Pusk,u145237,RD
</file>
<code powershell>
# Importe les données du fichier aUse... ne du fichier CSV)
$users[0].FirstName
John
</code>
Quelques options usuelles pour la cmdlet **Impo
e type.
===== Créer une variable tableau =====
<code powershell>
# Le type tableau est déterminé lors ... ngth
1
$devices+="keyboard"
$devices.Length
2
</code>
===== Accéder aux valeurs =====
Le nom de la ... ion de l'élément dans le tableau) commence à 0 :
<code powershell>
# Accès au premier élément
$devices[0]
# Accès au deuxième élément
$devices[1]
</code>
Si on redirige les éléments d'un tableau vers l
l exécutera le script.
</note>
Lister les alias
<code powershell>
Get-Alias
</code>
Pour déterminer quel applet est appelé par l'alias "gwmi"
<code powershell>
Get-Alias -Name gwmi
# equivalent
Get-Alias gwmi
</code>
Pour connaître le ou les alias définis sur l' a
exploitées individuellement par les commandes.
<code powershell>
# Affiche une fenêtre de demande d'id... asse' -UserName "$env:USERDOMAIN\$env:USERNAME"
</code>
La cmdlet **Get-Credential** lance l'exécution... epuis une autre session ou un autre ordinateur.
<code powershell>
# Stocke l'objet PSCredential dans un... ultérieure
$cred | Export-Clixml .\usercred.xml
</code>
===== Stockage des identifiants avec SecretMana
es actifs / disponibles dans le shell courant :
<code powershell>
Get-Module
</code>
===== Importer un module =====
Pour charger/importer un module dans le shell courant :
<code powershell>
Import-Module .\My.Module.Name.psd1
</code>
===== Décharger un module =====
Pour décharger
ockant plutôt les temporaires dans un RAM Disk.
<code powershell>
# Affiche la valeur de la variable d'environnement
$env:TEMP
</code>
En PowerShell la classe **System.Environment** ... ntVariable()** et **SetEnvironmentVariable()**.
<code powershell>
# Retourne la valeur de la variable T... ent]::GetEnvironmentVariable('TEMP', 'Machine')
</code>
L'étendue peut avoir les valeurs **'Process'**,
essous un exemple avec la cmdlet ''New-Item'' :
<code powershell>
# La commande New-Item n'aura pas d'e... ur la cible « Destination : R:\Temp\test.txt ».
</code>
On peut utiliser les variables **$WhatIfPrefer... lutôt que de le spécifier sur chaque commande :
<code powershell>
# Utilise -Whatif par défaut
$WhatIfP... al:PSDefaultParameterValues['*:WhatIf'] = $true
</code>
===== Références =====
* [[https://www.it