Compartir a través de


Instalar o desinstalar una característica de Windows

Descripción

En este ejemplo se muestra cómo puede usar el WindowsFeature recurso para asegurarse de que una característica de Windows es:

  • Instalado o desinstalado
  • Si se instala con sus subfeatures
  • Si se instala como una cuenta específica

Todos los valores del recurso son proporcionados por el usuario, no codificados de forma rígida. Los parámetros se asignan a las propiedades del recurso, cambiando su comportamiento.

Nombre

Si no especifica el parámetro Name , la propiedad Name del recurso se establece en Telnet-Client. Esta característica de Windows que instala o desinstala el recurso.

Ensure

Si no especifica el parámetro Ensure , la propiedad Ensure del recurso se establece Present en y el recurso instala la característica de Windows si aún no está instalada.

Si especifica Asegurar como Absent, el recurso desinstala la característica de Windows si está instalada.

IncludeAllSubFeature

Si no especifica el parámetro IncludeAllSubFeature , la propiedad IncludeAllSubFeature del recurso se establece $false en y el recurso no instala las subfeatures de la característica de Windows si Asegúrese está establecido Presenten .

Si Asegúrese está establecido Absenten , el recurso siempre desinstala las subfeatures de cualquier característica de Windows que quite.

Credential:

Si no especifica el parámetro Credential , el recurso no establece la propiedad Credential e instala o desinstala la característica de Windows en la cuenta predeterminada.

LogPath

Si no especifica el parámetro LogPath , el recurso no establece la propiedad LogPath y no escribe los registros para instalar o desinstalar la característica de Windows en un archivo.

Con Invoke-DscResource

Este script muestra cómo puede usar el recurso con el cmdlet para asegurarse de que una característica de Windows está instalada o instalada con la configuración proporcionada por el WindowsFeatureInvoke-DscResource usuario.

De forma predeterminada, garantiza que la Telnet-Client característica de Windows está instalada sin subfeatures y no escribe los registros de instalación en un archivo.

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

Con una configuración

Este fragmento de código muestra cómo definir un Configuration con un WindowsFeature bloque de recursos para asegurarse de que una característica de Windows está instalada o instalada con la configuración proporcionada por el usuario.

De forma predeterminada, garantiza que la Telnet-Client característica de Windows está instalada sin subfeatures y no escribe los registros de instalación en un archivo.

Importante

Hay una limitación en la configuración de la máquina que impide que un recurso de DSC use los cmdlets de PowerShell que no se incluyan en PowerShell en sí o en un módulo de la Galería de PowerShell. Este ejemplo se proporciona con fines demostrativos, pero dado que el recurso de DSC usa cmdlets del módulo DISM, que se incluye como uno de los módulos de Windows, no funcionará en la configuración de la máquina.

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