Compartilhar via


Instalar ou desinstalar um recurso do Windows

Descrição

Este exemplo mostra como você pode usar o WindowsFeature recurso para garantir que um recurso do Windows seja:

  • Instalado ou desinstalado
  • Se ele está instalado com suas sub-estruturas
  • Se ele está instalado como uma conta específica

Todos os valores do recurso são fornecidos pelo usuário, não codificados. Os parâmetros são mapeados para as propriedades do recurso, alterando seu comportamento.

Nome

Se você não especificar o parâmetro Name , a propriedade Name do recurso será definida como Telnet-Client. Esse recurso do Windows é instalado ou desinstalado pelo recurso.

Ensure

Se você não especificar o parâmetro Ensure , a propriedade Ensure do recurso será definida Present e o recurso instalará o recurso do Windows se ele ainda não estiver instalado.

Se você especificar Garantir como Absent, o recurso desinstala o recurso do Windows se ele estiver instalado.

IncludeAllSubFeature

Se você não especificar o parâmetro IncludeAllSubFeature , a propriedade IncludeAllSubFeature do recurso será definida $false e o recurso não instalará as subfeatures do recurso do Windows se Ensure estiver definido como Present.

Se Ensure estiver definido como Absent, o recurso sempre desinstala as subfeaturas de qualquer recurso do Windows que ele remove.

Credencial

Se você não especificar o parâmetro credencial , o recurso não definirá a propriedade Credencial e instalará ou desinstala o recurso do Windows na conta padrão.

LogPath

Se você não especificar o parâmetro LogPath , o recurso não definirá a propriedade LogPath e não gravará os logs para instalar ou desinstalar o recurso do Windows em um arquivo.

Com Invoke-DscResource

Este script mostra como você pode usar o WindowsFeature recurso com o Invoke-DscResource cmdlet para garantir que um recurso do Windows esteja instalado ou instalado com configurações fornecidas pelo usuário.

Por padrão, ele garante que o recurso do Telnet-Client Windows esteja instalado sem subfeaturas e não escreva os logs de instalação em um arquivo.

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

Com uma configuração

Este snippet mostra como você pode definir um com um ConfigurationWindowsFeature bloco de recursos para garantir que um recurso do Windows esteja instalado ou instalado com configurações fornecidas pelo usuário.

Por padrão, ele garante que o recurso do Telnet-Client Windows esteja instalado sem subfeaturas e não escreva os logs de instalação em um arquivo.

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