Problemas y limitaciones conocidos de la configuración de estado deseado (DSC)

Cambio de última hora: los certificados usados para cifrar o descifrar contraseñas en configuraciones de DSC no funcionan después de instalar WMF 5.0 RTM

En las versiones WMF 4.0 y WMF 5.0 Preview, DSC no permitía que las contraseñas de la configuración tuvieran más de 121 caracteres de longitud. DSC obligaba a usar contraseñas cortas, aunque se deseasen contraseñas largas y seguras. Este cambio de última hora permite que las contraseñas tengan una longitud arbitraria en la configuración de DSC.

Resolución: vuelva a crear el certificado mediante el cifrado de datos o el cifrado de clave, así como con el uso mejorado de claves de cifrado de documentos (1.3.6.1.4.1.311.80.1). Para más información, consulte Protect-CmsMessage.

Los cmdlets de DSC puede producir un error después de instalar WMF 5.0 RTM

Start-DscConfiguration y otros cmdlets de DSC pueden generar el siguiente error después de instalar WMF 5.0 RTM:

LCM failed to retrieve the property PendingJobStep from the object of class dscInternalCache .
+ CategoryInfo : ObjectNotFound: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : MI RESULT 6
+ PSComputerName : localhost

Resolución: elimine DSCEngineCache.mof. Para ello, ejecute el siguiente comando en una sesión de PowerShell con privilegios elevados (Ejecutar como administrador):

Remove-Item -Path $env:SystemRoot\system32\Configuration\DSCEngineCache.mof

Es posible que los Cmdlets de DSC no funcionen si WMF 5.0 RTM se instala encima de WMF 5.0 Production Preview

Resolución: ejecute el siguiente comando en una sesión de PowerShell con privilegios elevados (Ejecutar como administrador):

mofcomp $env:windir\system32\wbem\DscCoreConfProv.mof

LCM puede entrar en un estado inestable al usar Get-DscConfiguration en DebugMode

Si LCM está en DebugMode, al presionar CTRL+C para detener el procesamiento de Get-DscConfiguration puede causar que LCM entre en un estado inestable que impida funcionar a la mayoría de los cmdlets de DSC.

Resolución: No presione CTRL+C mientras se depura el cmdlet Get-DscConfiguration.

Stop-DscConfiguration puede no responder en DebugMode

Si LCM está en DebugMode, es posible que Stop-DscConfiguration no responde mientras se intenta detener una operación iniciada por Get-DscConfiguration

Resolución: Finalice la depuración de la operación iniciada por Get-DscConfiguration como se describe en Depuración de recursos de DSC.

No se muestran mensajes de error detallados en DebugMode

Si LCM está en DebugMode, no se muestra ningún mensaje de error detallado de recursos de DSC.

Resolución: deshabilite DebugMode para ver mensajes detallados del recurso

Las operaciones Invoke-DscResource no se pueden recuperar mediante el cmdlet Get-DscConfigurationStatus

Después de usar el cmdlet Invoke-DscResource para invocar directamente los métodos de cualquier recurso, los registros de dicha operación no se pueden recuperar a través de Get-DscConfigurationStatus.

Resolución: Ninguno.

Get-DscConfigurationStatus devuelve operaciones de ciclo de extracción como de tipo Consistency

Cuando un nodo se establece en modo de actualización de extracción, para cada operación de extracción realizada, el cmdlet Get-DscConfigurationStatus indica el tipo de operación como Consistency en lugar de Initial

Resolución: Ninguno.

El cmdlet Invoke-DscResource no devuelve los mensajes en el orden en que se producen

El cmdlet Invoke-DscResource no devuelve los mensajes detallados, de advertencia ni de error en el orden en que los producen LCM o el recurso de DSC.

Resolución: Ninguno.

Los recursos de DSC no se pueden depurar fácilmente cuando se usan con Invoke-DscResource

Cuando LCM se ejecuta en modo de depuración, el cmdlet Invoke-DscResource no brinda información sobre el espacio de ejecución al cual conectarse para la depuración. Para más información, consulte Depuración de recursos de DSC.

Resolución: Descubra el espacio de ejecución y conéctese a él mediante los cmdlets Get-PSHostProcessInfo, Enter-PSHostProcess , Get-Runspace y Debug-Runspace para depurar el recurso de DSC.

# Find all the processes hosting PowerShell
Get-PSHostProcessInfo

ProcessName    ProcessId AppDomainName
-----------    --------- -------------
powershell          3932 DefaultAppDomain
powershell_ise      2304 DefaultAppDomain
WmiPrvSE            3396 DscPsPluginWkr_AppDomain

# Enter the process that is hosting DSC engine (WMI process with DscPsPluginWkr_Appdomain)
Enter-PSHostProcess -Id 3396 -AppDomainName DscPsPluginWkr_AppDomain

# Find all the available rusnspaces in that process
Get-Runspace

Id Name       ComputerName Type  State  Availability
-- ----       ------------ ----  -----  ------------
 2 Runspace2  localhost    Local Opened InBreakpoint
 5 RemoteHost localhost    Local Opened Busy

# Debug the runspace that is in **InBreakpoint** availability state
Debug-Runspace -Id 2

Varios documentos de configuración parcial para el mismo nodo no pueden tener nombres de recurso idénticos

Para varias configuraciones parciales implementadas en un mismo nodo, los nombres idénticos de recursos causan un error en tiempo de ejecución.

Resolución: use nombres diferentes para la mismos recursos en distintas configuraciones parciales.

Start-DscConfiguration –UseExisting no funciona con -Credential

Si se usa Start-DscConfiguration con el parámetro UseExisting, se omite el parámetro Credential. DSC usa la identidad de proceso predeterminada para continuar la operación. Esto provoca un error cuando se necesita una credencial distinta para continuar en el nodo remoto.

Resolución: use una sesión CIM para las operaciones remotas de DSC:

$session = New-CimSession -ComputerName $node -Credential $credential
Start-DscConfiguration -UseExisting -CimSession $session

Direcciones IPv6 como nombres de nodo en configuraciones de DSC

No se admiten direcciones IPv6 como nombres de nodo en los scripts de configuración de DSC en esta versión.

Resolución: Ninguno.

Depuración de recursos de DSC Class-Based

En esta versión no se admite la depuración de los recursos de DSC basado en clases.

Resolución: Ninguno.

Las variables y las funciones que se definen en el ámbito de $script en el recurso basado en clases de DSC no se conservan en varias llamadas a un recurso de DSC

Varias llamadas consecutivas a Start-DSCConfiguration producirán un error si la configuración usa cualquier recurso basado en clases que tenga variables o funciones definidas en el ámbito de $script.

Resolución: defina todas las variables y funciones de la propia clase de recurso de DSC. No usar funciones o variables de ámbito $script.

Depuración de recursos de DSC cuando un recurso usa PSDscRunAsCredential

La depuración de recursos de DSC cuando un recurso usa la propiedad PSDscRunAsCredential en la configuración no se admite en esta versión.

Resolución: Ninguno.

PsDscRunAsCredential no se admite para los recursos compuestos de DSC

Resolución: use la propiedad Credential si está disponible. ServiceSet y WindowsFeatureSet de ejemplo

Get-DscResource -Syntax no refleja PsDscRunAsCredential correctamente

El parámetro Syntax no refleja correctamente la propiedad PsDscRunAsCredential cuando el recurso la marca como obligatoria o no la admite.

Resolución: Ninguno. Sin embargo, la configuración de creación en ISE refleja los metadatos correctos acerca de la propiedad PsDscRunAsCredential al usar IntelliSense.

WindowsOptionalFeature no está disponible en Windows 7

El recurso de DSC WindowsOptionalFeature no está disponible en Windows 7. Este recurso requiere el módulo DISM, así como los cmdlets DISM que están disponibles a partir de Windows 8 y versiones más recientes del sistema operativo Windows.

En el caso de los recursos de DSC basados en clases, puede que Import-DscResource -ModuleVersion no funcione según lo previsto

Si el nodo de compilación tiene varias versiones de un módulo de recursos de DSC basados en clases, Import-DscResource -ModuleVersion no podrá seleccionar la versión especificada y genera el siguiente error de compilación.

ImportClassResourcesFromModule : Exception calling "ImportClassResourcesFromModule" with "3" argument(s):
 "Keyword 'MyTestResource' already defined in the configuration."
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:2035 char:35
+ ... rcesFound = ImportClassResourcesFromModule -Module $mod -Resources $r ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ImportClassResourcesFromModule], MethodInvocationException
    + FullyQualifiedErrorId : PSInvalidOperationException,ImportClassResourcesFromModule

Resolución: importe la versión necesaria mediante la defición del objeto ModuleSpecification al parámetro ModuleName con la clave RequiredVersion especificada como sigue:

Import-DscResource -ModuleName @{ModuleName='MyModuleName';RequiredVersion='1.2'}

Algunos recursos de DSC, como el recurso de registro, pueden comenzar a tardar mucho tiempo en procesar la solicitud.

Solución 1: cree una tarea de programación que limpie periódicamente la siguiente carpeta.

$env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis

Solución 2: cambie la configuración de DSC para limpiar la carpeta CommandAnalysis al final de la configuración.

Configuration $configName
{

   # User Data
    Registry SetRegisteredOwner
    {
        Ensure = 'Present'
        Force = $True
        Key = $Node.RegisteredKey
        ValueName = $Node.RegisteredOwnerValue
        ValueType = 'String'
        ValueData = $Node.RegisteredOwnerData
    }
    #
    # Script to delete the config
    #
    script DeleteCommandAnalysisCache
    {
        DependsOn = "[Registry]SetRegisteredOwner"
        getscript = "@{}"
        testscript = 'Remove-Item -Path $env:windir\system32\config\systemprofile\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis -Force -Recurse -ErrorAction SilentlyContinue -ErrorVariable ev | out-null;$true'
        setscript = '$true'
    }
}