Share via


Installer un fichier cab avec le nom donné à partir du chemin d’accès donné

Description

Cet exemple montre comment utiliser les valeurs fournies par l’utilisateur WindowsPackageCab de ressources pour vérifier qu’un package est installé.

Vous devez spécifier le nom du package avec le paramètre Name , qui définit la propriété Name de la ressource.

Vous devez spécifier le chemin d’accès au .cab fichier à partir duquel le package peut être installé avec le paramètre SourcePath , qui définit la propriété SourcePath de la ressource.

Vous devez spécifier le chemin d’accès à un fichier journal avec le paramètre LogPath , qui définit la propriété LogPath de la ressource.

Avec Le paramètre Ensure défini Presentsur , la propriété Name définie sur la valeur fournie par l’utilisateur à partir du paramètre Name et SourcePath définie sur la valeur fournie par l’utilisateur à partir du paramètre SourcePath , la ressource installe le package nommé à partir du fichier spécifié .cab s’il n’est pas déjà installé.

Avec LogPath défini sur la valeur fournie par l’utilisateur à partir du paramètre LogPath , la ressource écrit les journaux d’activité pour installer le package dans ce fichier au lieu de %WINDIR%\Logs\Dism\dism.log.

Avec Invoke-DscResource

Ce script montre comment utiliser la WindowsPackageCab ressource avec l’applet Invoke-DscResource de commande pour vérifier qu’un package spécifié par l’utilisateur est installé.

[CmdletBinding()]
param(
    [Parameter (Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $Name,

    [Parameter (Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $SourcePath,

    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $LogPath
)

begin {
    $SharedParameters = @{
        Name       = 'WindowsPackageCab'
        ModuleName = 'PSDscResource'
        Properties = @{
            Name       = $Name
            Ensure     = 'Present'
            SourcePath = $SourcePath
            LogPath    = $LogPath
        }
    }

    $NonGetProperties = @(
        'Ensure'
        'SourcePath'
        'LogPath'
    )
}

process {
    $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 ConfigurationWindowsPackageCab bloc de ressources pour vous assurer qu’un package spécifié par l’utilisateur est installé.

Important

Il existe une limitation dans la configuration de l’ordinateur qui empêche une ressource DSC d’utiliser toutes les applets de commande PowerShell non incluses dans PowerShell elle-même ou dans un module sur le PowerShell Gallery. Cet exemple est fourni à des fins démonstrations, 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 Install {
    param(
        [Parameter (Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $Name,

        [Parameter (Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $SourcePath,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $LogPath
    )

    Import-DscResource -ModuleName 'PSDscResources'

    Node Localhost {
        WindowsPackageCab ExampleWindowsPackageCab {
            Name       = $Name
            Ensure     = 'Present'
            SourcePath = $SourcePath
            LogPath    = $LogPath
        }
    }
}