Freigeben über


Installieren einer Cab-Datei mit dem angegebenen Namen aus dem angegebenen Pfad

Beschreibung

In diesem Beispiel wird gezeigt, wie Sie die vom Benutzer bereitgestellten WindowsPackageCab Ressourcenwerte verwenden können, um sicherzustellen, dass ein Paket installiert ist.

Sie müssen den Namen des Pakets mit dem Parameter "Name " angeben, der die Name-Eigenschaft der Ressource festlegt.

Sie müssen den Pfad zur Datei angeben, aus der .cab das Paket mit dem SourcePath-Parameter installiert werden kann, der die SourcePath-Eigenschaft der Ressource festlegt.

Sie müssen den Pfad zu einer Protokolldatei mit dem LogPath-Parameter angeben, der die LogPath-Eigenschaft der Ressource festlegt.

Wenn Sie sicherstellenPresent, dass die Name-Eigenschaft auf den vom Benutzer bereitgestellten Wert vom Parameter "Name" festgelegt ist, und SourcePath auf den vom Benutzer bereitgestellten Wert aus dem SourcePath-Parameter festgelegt ist, installiert die Ressource das benannte Paket aus der angegebenen .cab Datei, wenn sie nicht bereits installiert ist.

Wenn LogPath auf den vom Benutzer bereitgestellten Wert aus dem LogPath-Parameter festgelegt ist, schreibt die Ressource die Protokolle zum Installieren des Pakets in diese Datei statt .%WINDIR%\Logs\Dism\dism.log

Mit Invoke-DscResource

Dieses Skript zeigt, wie Sie die WindowsPackageCab Ressource mit dem Invoke-DscResource Cmdlet verwenden können, um sicherzustellen, dass ein vom Benutzer angegebenes Paket installiert ist.

[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
    }
}

Mit einer Konfiguration

In diesem Codeausschnitt wird gezeigt, wie Sie einen WindowsPackageCab Ressourcenblock definieren Configuration können, um sicherzustellen, dass ein vom Benutzer angegebenes Paket installiert ist.

Wichtig

Es gibt eine Einschränkung in der Computerkonfiguration, die verhindert, dass eine DSC-Ressource keine PowerShell-Cmdlets verwendet, die nicht in PowerShell selbst oder in einem Modul auf dem PowerShell-Katalog enthalten sind. Dieses Beispiel wird für demonstrative Zwecke bereitgestellt, aber da die DSC-Ressource Cmdlets aus dem DISM-Modul verwendet, das als eines der Windows-Module bereitgestellt wird, funktioniert sie nicht in der Computerkonfiguration.

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
        }
    }
}