Dela via


Installera en cab-fil med det angivna namnet från den angivna sökvägen

Description

Det här exemplet visar hur du kan använda resursens WindowsPackageCab användardefinierade värden för att säkerställa att ett paket har installerats.

Du måste ange namnet på paketet med parametern Namn , som anger resursens namnegenskap .

Du måste ange sökvägen till .cab filen som paketet kan installeras från med parametern SourcePath , som anger sourcepath-egenskapen för resursen.

Du måste ange sökvägen till en loggfil med LogPath-parametern , som anger LogPath-egenskapen för resursen.

Med Se till inställt på Present, egenskapen Namn inställd på värdet som tillhandahålls av användaren från parametern Namn och SourcePath inställt på det användaringivna värdet från SourcePath-parametern , installerar resursen det namngivna paketet från den angivna .cab filen om det inte redan är installerat.

Med LogPath inställt på det användardefinierade värdet från LogPath-parametern skriver resursen loggarna för att installera paketet i filen i stället för %WINDIR%\Logs\Dism\dism.log.

Med Invoke-DscResource

Det här skriptet visar hur du kan använda resursen WindowsPackageCab med cmdleten Invoke-DscResource för att säkerställa att ett användardefinerat paket har installerats.

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

Med en konfiguration

Det här kodfragmentet visar hur du kan definiera ett Configuration med ett WindowsPackageCab resursblock för att säkerställa att ett användardefinieringspaket har installerats.

Viktigt

Det finns en begränsning i datorkonfigurationen som hindrar en DSC-resurs från att använda powershell-cmdletar som inte ingår i själva PowerShell eller i en modul på PowerShell-galleriet. Det här exemplet tillhandahålls i demonstrativt syfte, men eftersom DSC-resursen använder cmdletar från DISM-modulen, som levereras som en av Windows-modulerna, fungerar det inte i datorkonfigurationen.

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