PowerShell
Modules, scripts et fonctions
Recherche…
Introduction
Les modules PowerShell apportent une extension à l'administrateur système, à l'administrateur de base de données et au développeur. Que ce soit simplement comme une méthode pour partager des fonctions et des scripts.
Les fonctions de Powershell évitent les codes de répétition. Voir [Fonctions PS] [1] [1]: Fonctions PowerShell
Les scripts PowerShell sont utilisés pour automatiser les tâches administratives qui consistent en un shell de ligne de commande et des applets de commande associées construites au-dessus de .NET Framework.
Fonction
Une fonction est un bloc de code nommé utilisé pour définir un code réutilisable facile à utiliser. Il est généralement inclus dans un script pour aider à réutiliser le code (pour éviter le code en double) ou distribué dans le cadre d'un module pour le rendre utile pour d'autres dans plusieurs scripts.
Scénarios où une fonction pourrait être utile:
- Calculer la moyenne d'un groupe de nombres
- Générer un rapport pour les processus en cours d'exécution
- Ecrire une fonction testant qu'un ordinateur est "sain" en envoyant
c$
requête ping à l'ordinateur et en accédant au partagec$
Les fonctions sont créées à l'aide du mot-clé function
, suivi d'un nom à mot unique et d'un bloc de script contenant le code à exécuter lorsque le nom de la fonction est appelé.
function NameOfFunction {
Your code
}
Démo
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
Usage:
> HelloWorld
Greetings from PowerShell!
Scénario
Un script est un fichier texte avec l'extension de fichier .ps1
qui contient des commandes PowerShell qui seront exécutées lors de l'appel du script. Les scripts étant des fichiers enregistrés, ils sont faciles à transférer entre les ordinateurs.
Les scripts sont souvent écrits pour résoudre un problème spécifique, par exemple:
- Exécuter une tâche de maintenance hebdomadaire
- Pour installer et configurer une solution / application sur un ordinateur
Démo
MyFirstScript.ps1:
Write-Host "Hello World!"
2+2
Vous pouvez exécuter un script en entrant le chemin d'accès au fichier à l'aide de:
- Chemin absolu, ex.
c:\MyFirstScript.ps1
- Chemin relatif, ex
.\MyFirstScript.ps1
si le répertoire en cours de votre console PowerShell étaitC:\
Usage:
> .\MyFirstScript.ps1
Hello World!
4
Un script peut également importer des modules, définir ses propres fonctions, etc.
MySecondScript.ps1:
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld
Usage:
> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!
Module
Un module est un ensemble de fonctions réutilisables (ou applets de commande) pouvant être facilement distribuées à d'autres utilisateurs PowerShell et utilisées dans plusieurs scripts ou directement dans la console. Un module est généralement enregistré dans son propre répertoire et se compose de:
- Un ou plusieurs fichiers de code avec l'extension de fichier
.psm1
contenant des fonctions ou des assemblys binaires (.dll
) contenant des applets de commande - Un manifeste de module
.psd1
décrivant le nom du module, la version, l'auteur, la description, les fonctions / applets de commande qu'il fournit, etc. - Autres exigences pour que cela fonctionne incl. dépendances, scripts etc.
Exemples de modules:
- Un module contenant des fonctions / cmdlets qui effectuent des statistiques sur un dataset
- Un module pour interroger et configurer des bases de données
Pour faciliter la recherche et l'importation d'un module par PowerShell, il est souvent placé dans l'un des emplacements de module PowerShell connus définis dans $env:PSModulePath
.
Démo
Liste des modules installés sur l'un des emplacements de module connus:
Get-Module -ListAvailable
Importer un module, ex. Module Hyper-V
:
Import-Module Hyper-V
Liste les commandes disponibles dans un module, ex. le module Microsoft.PowerShell.Archive
> Import-Module Microsoft.PowerShell.Archive
> Get-Command -Module Microsoft.PowerShell.Archive
CommandType Name Version Source
----------- ---- ------- ------
Function Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Function Expand-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Fonctions avancées
Les fonctions avancées se comportent de la même manière que les applets de commande. Le PowerShell ISE inclut deux squelettes de fonctions avancées. Accédez à ceux-ci via le menu, éditer, des extraits de code ou par Ctrl + J. (À partir de PS 3.0, les versions ultérieures peuvent différer)
Les fonctions clés incluent notamment:
-
Get-Help
intégrée et personnalisée pour la fonction, accessible viaGet-Help
- peut utiliser [CmdletBinding ()] qui fait agir la fonction comme une applet de commande
- options étendues de paramètres
Version simple:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
#>
function Verb-Noun
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Param1,
# Param2 help description
[int]
$Param2
)
Begin
{
}
Process
{
}
End
{
}
}
Version complète:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
.INPUTS
Inputs to this cmdlet (if any)
.OUTPUTS
Output from this cmdlet (if any)
.NOTES
General notes
.COMPONENT
The component this cmdlet belongs to
.ROLE
The role this cmdlet belongs to
.FUNCTIONALITY
The functionality that best describes this cmdlet
#>
function Verb-Noun
{
[CmdletBinding(DefaultParameterSetName='Parameter Set 1',
SupportsShouldProcess=$true,
PositionalBinding=$false,
HelpUri = 'http://www.microsoft.com/',
ConfirmImpact='Medium')]
[OutputType([String])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
ValueFromRemainingArguments=$false,
Position=0,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[ValidateCount(0,5)]
[ValidateSet("sun", "moon", "earth")]
[Alias("p1")]
$Param1,
# Param2 help description
[Parameter(ParameterSetName='Parameter Set 1')]
[AllowNull()]
[AllowEmptyCollection()]
[AllowEmptyString()]
[ValidateScript({$true})]
[ValidateRange(0,5)]
[int]
$Param2,
# Param3 help description
[Parameter(ParameterSetName='Another Parameter Set')]
[ValidatePattern("[a-z]*")]
[ValidateLength(0,15)]
[String]
$Param3
)
Begin
{
}
Process
{
if ($pscmdlet.ShouldProcess("Target", "Operation"))
{
}
}
End
{
}
}