Uso de Import-DSCResource
Se aplica a: PowerShell 7, característica de configuración de máquina de Azure Automanage
Import-DSCResource
es una palabra clave dinámica, que solo se puede usar dentro de un Configuration
bloque para importar los recursos necesarios en la configuración de DSC. Los recursos de DSC en $PSHOME
se importan automáticamente, pero es recomendable importar explícitamente todos los recursos de DSC usados en la configuración de DSC.
La sintaxis de Import-DSCResource
se muestra a continuación. Al especificar módulos por nombre, es necesario enumerar cada uno de ellos en una nueva línea.
Import-DscResource [-Name <ResourceName(s)>]
[-ModuleName <ModuleName>]
[-ModuleVersion <ModuleVersion>]
Parámetros
- Nombre : los recursos que debe importar. Si se especifica el nombre del módulo, el comando busca estos recursos de DSC dentro de ese módulo; de lo contrario, el comando busca los recursos de DSC en todos los módulos. Se admite caracteres comodín.
- ModuleName : el nombre del módulo o la especificación del módulo. Si especifica recursos de DSC que se van a importar desde un módulo, el comando intenta importar solo los recursos de DSC. Si especifica solo el módulo, el comando importa todos los recursos de DSC del módulo.
- ModuleVersion : puede especificar la versión de un módulo que debe usar una configuración con este parámetro. De forma predeterminada, se importa la versión más reciente disponible del recurso de DSC.
Import-DSCResource -ModuleName xActiveDirectory
Ejemplo: Usar Import-DSCResource dentro de una configuración de DSC
Configuration MSDSCConfiguration {
# Search for and imports two DSC Resources from the PSDscResources module.
Import-DSCResource -ModuleName PSDscResources -Name Service, Registry
# Search for and import Resource1 from the module that defines it. If only
# the -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 Service
Import-DSCResource -Name TimeZone
# Search for and import all DSC resources inside the PSDscResources module.
# When specifying the ModuleName parameter, it is a requirement to list each
# on a new line.
Import-DSCResource -ModuleName PSDscResources
# 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 módulos de DSC en el mismo comando. Puede tener un comportamiento no determinista sobre qué recurso de DSC cargar desde qué módulo si el mismo recurso de DSC existe en varios módulos. El comando siguiente devuelve un error durante la compilación.
Import-DSCResource -Name Service, TimeZone -ModuleName PSDscResources, xPSDesiredStateConfiguration
Aspectos que se deben tener en cuenta al usar solo el parámetro Name :
- Se trata de una operación que consume muchos recursos en función del número de módulos instalados en la máquina.
- Carga el primer recurso de DSC encontrado con el nombre especificado. Si hay más de un recurso de DSC con el mismo nombre instalado, podría cargar el recurso de DSC incorrecto.
El uso recomendado es especificar ModuleName con el parámetro Name , como se describe a continuación.
Este uso tiene las siguientes ventajas:
- Reduce el impacto en el rendimiento limitando el ámbito de búsqueda del recurso de DSC especificado.
- Define explícitamente el módulo que proporciona el recurso de DSC, lo que garantiza que se carga el recurso de DSC correcto.
Nota
Los recursos de DSC pueden tener varias versiones y las versiones se pueden instalar en un equipo en paralelo. Esto se implementa al tener varias versiones de un módulo de recursos de DSC que se encuentran en la misma carpeta de módulos.
IntelliSense con Import-DSCResource
Al crear la configuración de DSC en VS Code, PowerShell proporciona IntelliSense para recursos de DSC y propiedades de recursos de DSC. Las definiciones de recursos en la ruta de acceso del módulo $PSHOME
se cargan automáticamente. Al importar recursos de DSC mediante la Import-DSCResource
palabra clave , se agregan las definiciones de recursos de DSC especificadas y IntelliSense se expande para incluir los esquemas de los recursos de DSC importados.
Al compilar la configuración de DSC, PowerShell usa las definiciones de recursos de DSC importadas para validar los bloques de recursos de DSC en el Configuration
bloque . La definición de esquema del recurso de DSC valida cada bloque de recursos de DSC para las reglas siguientes:
- Solo se especifican las propiedades definidas en el esquema.
- Los tipos de datos para cada propiedad son correctos.
- Se especifican las propiedades de las claves.
- No se especifica ninguna propiedad de solo lectura.
Tenga en cuenta la siguiente configuración de DSC:
Configuration SchemaValidationInCorrectEnumValue {
Import-DSCResource -Name User -Module PSDscResources
User ExampleUser {
UserName = 'ExampleDscUser'
Ensure = 'Invalid'
}
}
La compilación de esta configuración de DSC produce un error.
Write-Error: C:\code\dsc\sample.ps1:4:5
Line |
4 | User ExampleUser {
| ~~~~
| At least one of the values 'Invalid' is not supported or
| valid for property 'Ensure' on class 'User'. Please specify
| only supported values: Present, Absent.
InvalidOperation: Errors occurred while processing configuration
'SchemaValidationInCorrectEnumValue'.
IntelliSense y la validación del esquema permiten detectar más errores durante el tiempo de análisis y compilación, evitando complicaciones futuras.
Nota
Cada recurso de DSC puede tener un nombre y un Nombre descriptivo definido por el esquema del recurso de DSC.
A continuación se muestran las dos primeras líneas de MSFT_UserResource.schema.mof
.
[ClassVersion("1.0.0"), FriendlyName("User")]
class MSFT_UserResource : OMI_BaseResource
Al usar este recurso de DSC en un Configuration
bloque, puede especificar MSFT_UserResource
o User
.