Partager via


Installer ou désinstaller une fonctionnalité Windows

Description

Cet exemple montre comment utiliser la WindowsFeature ressource pour vous assurer qu’une fonctionnalité Windows est :

  • Installé ou désinstallé
  • Qu’il soit installé avec ses sous-catégories
  • Qu’il soit installé en tant que compte spécifique

Toutes les valeurs de la ressource sont fournies par l’utilisateur, et non codées en dur. Les paramètres sont mappés aux propriétés de la ressource, ce qui modifie son comportement.

Nom

Si vous ne spécifiez pas le paramètre Name , la propriété Name de la ressource est définie Telnet-Clientsur . Cette fonctionnalité Windows installe ou désinstalle la ressource.

Ensure

Si vous ne spécifiez pas le paramètre Ensure , la propriété Ensure de la ressource est définie Present et la ressource installe la fonctionnalité Windows si elle n’est pas déjà installée.

Si vous spécifiez Vérifier en tant que Absent, la ressource désinstalle la fonctionnalité Windows si elle est installée.

IncludeAllSubFeature

Si vous ne spécifiez pas le paramètre IncludeAllSubFeature , la propriété IncludeAllSubFeature de la ressource est définie $false et la ressource n’installe pas les sous-entités de la fonctionnalité Windows si Ensure est défini Presentsur .

Si Ensure est défini Absentsur , la ressource désinstalle toujours les sous-entités pour toute fonctionnalité Windows qu’elle supprime.

Informations d'identification

Si vous ne spécifiez pas le paramètre Credential , la ressource ne définit pas la propriété Credential et installe ou désinstalle la fonctionnalité Windows sous le compte par défaut.

LogPath

Si vous ne spécifiez pas le paramètre LogPath , la ressource ne définit pas la propriété LogPath et n’écrit pas les journaux d’activité pour l’installation ou la désinstallation de la fonctionnalité Windows dans un fichier.

Avec Invoke-DscResource

Ce script montre comment utiliser la WindowsFeature ressource avec l’applet Invoke-DscResource de commande pour vous assurer qu’une fonctionnalité Windows est installée ou installée avec les paramètres fournis par l’utilisateur.

Par défaut, elle garantit que la Telnet-Client fonctionnalité Windows est installée sans sous-fonctionnalités et n’écrit pas les journaux d’installation dans un fichier.

[CmdletBinding()]
param(
    [System.String]
    $Name = 'Telnet-Client',

    [ValidateSet('Present', 'Absent')]
    [System.String]
    $Ensure = 'Present',

    [System.Boolean]
    $IncludeAllSubFeature = $false,

    [System.Management.Automation.PSCredential]
    [System.Management.Automation.Credential()]
    $Credential,

    [ValidateNotNullOrEmpty()]
    [System.String]
    $LogPath
)

begin {
    $SharedParameters = @{
        Name       = 'WindowsFeature'
        ModuleName = 'PSDscResource'
        Properties = @{
            Name                 = $Name
            Ensure               = $Ensure
            IncludeAllSubFeature = $IncludeAllSubFeature
        }
    }

    $NonGetProperties = @(
        'Ensure'
        'IncludeAllSubFeature'
    )
}

process {
    if ($PSBoundParameters.ContainsKey('Credential')) {
        $SharedParameters.Properties.Credential = $Credential
        $NonGetProperties += 'Credential'
    }

    if ($PSBoundParameters.ContainsKey('LogPath')) {
        $SharedParameters.Properties.LogPath = $LogPath
        $NonGetProperties += 'LogPath'
    }

    $TestResult = Invoke-DscResource -Method Test @SharedParameters

    if ($TestResult.InDesiredState) {
        $QueryParameters = $SharedParameters.Clone()

        foreach ($Property in $NonGetProperties) {
            $QueryParameters.Properties.Remove($Property)
        }

        Invoke-DscResource -Method Get @QueryParameters
    } else {
        Invoke-DscResource -Method Set @SharedParameters
    }
}

Avec une configuration

Cet extrait de code montre comment définir un ConfigurationWindowsFeature bloc de ressources pour vous assurer qu’une fonctionnalité Windows est installée ou installée avec les paramètres fournis par l’utilisateur.

Par défaut, elle garantit que la Telnet-Client fonctionnalité Windows est installée sans sous-fonctionnalités et n’écrit pas les journaux d’installation dans un fichier.

Important

Il existe une limitation dans la configuration de l’ordinateur qui empêche une ressource DSC d’utiliser des applets de commande PowerShell non incluses dans PowerShell lui-même ou dans un module sur le PowerShell Gallery. Cet exemple est fourni à des fins de démonstration, mais étant donné que la ressource DSC utilise des applets de commande du module DISM, qui est fournie comme l’un des modules Windows, elle ne fonctionnera pas dans la configuration de l’ordinateur.

Configuration Example {
    param(
        [System.String]
        $Name = 'Telnet-Client',

        [ValidateSet('Present', 'Absent')]
        [System.String]
        $Ensure = 'Present',

        [System.Boolean]
        $IncludeAllSubFeature = $false,

        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential,

        [ValidateNotNullOrEmpty()]
        [System.String]
        $LogPath
    )

    Import-DscResource -ModuleName 'PSDscResources'

    $HasCredential = $null -ne $Credential
    $HasLogPath = ![string]::IsNullOrEmpty($LogPath)

    Node Localhost {
        if ($HasCredential -and $HasLogPath) {
            WindowsFeature ExampleWindowsFeature {
                Name                 = $Name
                Ensure               = $Ensure
                IncludeAllSubFeature = $IncludeAllSubFeature
                Credential           = $Credential
                LogPath              = $LogPath
            }
        } elseif ($HasCredential) {
            WindowsFeature ExampleWindowsFeature {
                Name                 = $Name
                Ensure               = $Ensure
                IncludeAllSubFeature = $IncludeAllSubFeature
                Credential           = $Credential
            }
        } elseif ($HasLogPath) {
            WindowsFeature ExampleWindowsFeature {
                Name                 = $Name
                Ensure               = $Ensure
                IncludeAllSubFeature = $IncludeAllSubFeature
                LogPath              = $LogPath
            }
        } else {
            WindowsFeature ExampleWindowsFeature {
                Name                 = $Name
                Ensure               = $Ensure
                IncludeAllSubFeature = $IncludeAllSubFeature
            }
        }
    }
}