Compartilhar via


Instalar um arquivo de táxi com o nome fornecido do caminho fornecido

Descrição

Este exemplo mostra como você pode usar os WindowsPackageCab valores fornecidos pelo usuário do recurso para garantir que um pacote esteja instalado.

Você deve especificar o nome do pacote com o parâmetro Name , que define a propriedade Name do recurso.

Você deve especificar o caminho para o .cab arquivo do qual o pacote pode ser instalado com o parâmetro SourcePath , que define a propriedade SourcePath do recurso.

Você deve especificar o caminho para um arquivo de log com o parâmetro LogPath , que define a propriedade LogPath do recurso.

Com a propriedade Ensure definida como Present, a propriedade Name definida como o valor fornecido pelo usuário do parâmetro Name e o SourcePath definido como o valor fornecido pelo usuário do parâmetro SourcePath , o recurso instala o pacote nomeado do arquivo especificado .cab se ele ainda não estiver instalado.

Com o LogPath definido como o valor fornecido pelo usuário do parâmetro LogPath , o recurso grava os logs para instalar o pacote nesse arquivo em vez de %WINDIR%\Logs\Dism\dism.log.

Com Invoke-DscResource

Este script mostra como você pode usar o WindowsPackageCab recurso com o Invoke-DscResource cmdlet para garantir que um pacote especificado pelo usuário esteja instalado.

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

Com uma configuração

Este snippet mostra como você pode definir um Configuration bloco de recursos com um WindowsPackageCab bloco de recursos para garantir que um pacote especificado pelo usuário esteja instalado.

Importante

Há uma limitação na configuração do computador que impede que um recurso DSC use quaisquer cmdlets do PowerShell não incluídos no próprio PowerShell ou em um módulo no Galeria do PowerShell. Este exemplo é fornecido para fins demonstrativos, mas como o Recurso DSC usa cmdlets do módulo DISM, que é fornecido como um dos módulos do Windows, ele não funcionará na configuração do computador.

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