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 partage c$

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 était C:\

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 via Get-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
    {
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow