Compartir a través de


Uso de Import-DSCResource

Import-DSCResource es una palabra clave dinámica, que solo se puede usar dentro de un bloque de script de configuración para importar los recursos necesarios en la configuración. Los recursos en $PSHOME se importan automáticamente, pero se sigue considerando recomendable importar de forma explícita todos los recursos utilizados en su configuración.

La sintaxis de Import-DSCResource se muestra a continuación. Al especificar módulos por nombre, es necesario enumerar cada uno en una nueva línea.

Import-DscResource [-Name <ResourceName(s)>] [-ModuleName <ModuleName>] [-ModuleVersion <ModuleVersion>]

Parámetros

  • -Name: nombres de recursos de DSC que debe importar. Si se especifica el nombre del módulo, el comando busca estos recursos de DSC en este módulo; en caso contrario, el comando busca los recursos de DSC en todas las rutas de acceso de recursos de DSC. Se admite caracteres comodín.
  • -ModuleName: nombre de módulo, o especificación de módulo. Si especifica los recursos para importar desde un módulo, el comando intentará importar solo esos recursos. Si especifica solo el módulo, el comando importa todos los recursos de DSC en el módulo.
  • -ModuleVersion: a partir de PowerShell 5.0, puede especificar la versión de un módulo que debería usar una configuración. Para obtener más información, vea Importación de una versión específica de un recurso instalado.
Import-DscResource -ModuleName xActiveDirectory

Ejemplo: Uso de Import-DSCResource dentro de una configuración

Configuration MSDSCConfiguration
{
    # Search for and imports Service, File, and Registry from the module PSDesiredStateConfiguration.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration -Name Service, File, Registry

    # Search for and import Resource1 from the module that defines it.
    # If only –Name parameter is used then resources can belong to different PowerShell modules as well.
    # TimeZone resource is from the ComputerManagementDSC module which is not installed by default.
    # As a best practice, list each requirement on a different line if possible.  This makes reviewing
    # multiple changes in source control a bit easier.
    Import-DSCResource -Name File
    Import-DSCResource -Name TimeZone

    # Search for and import all DSC resources inside the module PSDesiredStateConfiguration.
    # When specifying the modulename parameter, it is a requirement to list each on a new line.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    # In PowerShell 5.0 and later, you can specify a ModuleVersion parameter
    Import-DSCResource -ModuleName ComputerManagementDsc -ModuleVersion 6.0.0.0
...

Nota

No se admite la especificación de varios valores para los nombres de recursos y los nombres de los módulos en el mismo comando. Puede tener un comportamiento no determinista sobre qué recurso se debe cargar desde qué módulo si existe el mismo recurso en varios módulos. El comando siguiente producirá error durante la compilación.

Import-DscResource -Name UserConfigProvider*,TestLogger1 -ModuleName UserConfigProv,PsModuleForTestLogger

Aspectos para tener en cuenta cuando se usa solo el parámetro de nombre:

  • Es una operación que consume muchos recursos, dependiendo del número de módulos instalados en el equipo.
  • Cargará el primer recurso que se encuentre con el nombre especificado. En caso de que haya instalado más de un recurso con el mismo nombre, podría cargarse el recurso incorrecto.

El uso recomendado consiste en especificar –ModuleName con el parámetro -Name, tal como se describe a continuación.

Este uso tiene las siguientes ventajas:

  • Reduce el impacto del rendimiento al limitar el ámbito de búsqueda para el recurso especificado.
  • Define explícitamente el módulo que define del recurso, garantizando que se carga el recurso correcto.

Nota

En PowerShell 5.0, los recursos de DSC pueden tener varias versiones, y las versiones pueden instalarse en un equipo en paralelo. Esto se implementa mediante varias versiones de un módulo de recursos que están contenidas en la misma carpeta del módulo. Para más información, consulte Uso de recursos con varias versiones.

IntelliSense con Import-DSCResource

Al crear la configuración de DSC en ISE, PowerShell proporciona IntelliSense para recursos y propiedades de recursos. Las definiciones de recursos en la ruta de acceso del módulo $pshome se cargan automáticamente. Al importar los recursos mediante la palabra clave Import-DSCResource, se agregan las definiciones de recursos especificadas e Intellisense se expande para incluir el esquema del recurso importado.

IntelliSense en el ISE para un recurso de DSC

Nota

A partir de PowerShell 5.0, se agregó la finalización con tabulación al ISE para los recursos de DSC y sus propiedades. Para obtener más información, consulte Recursos.

Al compilar la configuración, PowerShell usa las definiciones de recursos importados para validar todos los bloques de recursos en la configuración. Cada bloque de recursos se valida mediante la definición de esquema de recursos, para las siguientes reglas.

  • Se utilizan solo las propiedades definidas en el esquema.
  • Los tipos de datos para cada propiedad son correctos.
  • Se especifican las propiedades de las claves.
  • No se usa ninguna propiedad de solo lectura.
  • La validación sobre el valor asigna tipos.

Tenga en cuenta la siguiente configuración:

Configuration SchemaValidationInCorrectEnumValue
{
    # It is best practice to explicitly import all resources used in your Configuration.
    # This includes resources that are imported automatically, like WindowsFeature.
    Import-DSCResource -Name WindowsFeature
    Node localhost
    {
        WindowsFeature ROLE1
        {
            Name = "Telnet-Client"
            Ensure = "Invalid"
        }
    }
}

La compilación de esta configuración da como resultado un error.

PSDesiredStateConfiguration\WindowsFeature: At least one of the values 'Invalid' is not supported or
valid for property 'Ensure' on class 'WindowsFeature'. Please specify only supported values:
Present, Absent.

IntelliSense y la validación de esquema permiten detectar más errores durante el tiempo de análisis y compilación, evitando las complicaciones en tiempo de ejecución.

Nota

Cada recurso de DSC puede tener un nombre y un FriendlyName definido por el esquema del recurso. A continuación se muestran las dos primeras líneas de "MSFT_ServiceResource.shema.mof".

[ClassVersion("1.0.0"),FriendlyName("Service")]
class MSFT_ServiceResource : OMI_BaseResource

Cuando se usa este recurso en una configuración, puede especificar MSFT_ServiceResource o Service.

Diferencias de PowerShell v4 y v5

Hay varias diferencias que verá al crear configuraciones en PowerShell 4.0 en comparación con Windows PowerShell 5.0 y posteriores. En esta sección se destacan las diferencias que verá y que son pertinentes para este artículo.

Varias versiones de recursos

La instalación y el uso de varias versiones de recursos en paralelo no se admite en PowerShell 4.0. Si observa problemas al importar recursos en la configuración, asegúrese de que solo tiene una versión del recurso instalada.

En la imagen siguiente, se instalan dos versiones del módulo xPSDesiredStateConfiguration.

Varias versiones de recursos instaladas en la carpeta

Copie el contenido de la versión del módulo deseada en el nivel superior del directorio de módulo.

Copia de la versión deseada en el directorio del módulo de nivel superior

Ubicación de los recursos

Al crear y compilar configuraciones, los recursos se pueden almacenar en cualquier directorio especificado por su PSModulePath. En PowerShell 4.0, LCM requiere que todos los módulos de recursos de DSC se almacenen en "Archivos de programa\WindowsPowerShell\Modules" o $pshome\Modules. A partir de PowerShell 5.0, esto ya no es necesario, y los módulos de recursos se pueden almacenar en cualquier directorio especificado por PSModulePath.

Agregado el parámetro ModuleVersion

A partir de PowerShell 5.0, el parámetro -ModuleVersion le permite especificar la versión de un módulo que va a usar en la configuración.

Consulte también