Problemi noti e limitazioni di Desired State Configuration (DSC)

Modifica che causa un'interruzione: è possibile che i certificati usati per crittografare/decrittografare le password nelle configurazioni DSC non funzionino dopo l'installazione di WMF 5.0 RTM

Nelle versioni WMF 4.0 e WMF 5.0 Preview, DSC non consente lunghezze maggiori di 121 caratteri per le password nella configurazione. DSC imponeva l'uso di password brevi anche se erano preferibili password lunghe e complesse. Questa modifica consente una lunghezza arbitraria per le password nella configurazione DSC.

Risoluzione: creare nuovamente il certificato con utilizzo di chiavi Crittografia dati o Crittografia chiave e utilizzo chiavi avanzato Crittografia documento (1.3.6.1.4.1.311.80.1). Per altre informazioni, vedere Protect-CmsMessage.

Potrebbero verificarsi problemi con i cmdlet DSC dopo l'installazione di WMF 5.0 RTM

Start-DscConfiguration e altri cmdlet DSC potrebbero non funzionare dopo l'installazione di WMF 5.0 RTM con l'errore seguente:

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

Risoluzione: eliminare DSCEngineCache.mof eseguendo il comando seguente in una sessione di PowerShell con privilegi elevati (Esegui come amministratore):

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

I cmdlet DSC potrebbero non funzionare se si installa WMF 5.0 RTM su WMF 5.0 Production Preview

Risoluzione: eseguire il comando seguente in una sessione di PowerShell con privilegi elevati (Esegui come amministratore):

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

Lo stato di Gestione configurazione locale può diventare instabile durante l'uso di Get-DscConfiguration in DebugMode

Con Gestione configurazione locale è in DebugMode, se si preme CTRL+C per arrestare l'elaborazione di Get-DscConfiguration, Gestione configurazione locale può diventare instabile e in questa situazione la maggior parte dei cmdlet DSC non funzionerà.

Risoluzione: non premere CTRL+C durante il debug del cmdlet Get-DscConfiguration.

Stop-DscConfiguration potrebbe non rispondere in DebugMode

Se Gestione configurazione locale è in DebugMode, Stop-DscConfiguration potrebbe non rispondere durante il tentativo di arrestare un'operazione avviata da Get-DscConfiguration

Risoluzione: terminare il debug dell'operazione avviata da Get-DscConfiguration, come illustrato in Debug di risorse DSC.

In DebugMode non vengono visualizzati messaggi di errore dettagliati

Se Gestione configurazione locale è in DebugMode, non viene visualizzato alcun messaggio di errore dettagliato da risorse DSC.

Risoluzione: disabilitare DebugMode per visualizzare messaggi dettagliati dalla risorsa

Le operazioni Invoke-DscResource non possono essere recuperate dal cmdlet Get-DscConfigurationStatus

Dopo aver usato il cmdlet Invoke-DscResource per richiamare direttamente i metodi delle risorse, i record di tale operazione non possono essere recuperati con Get-DscConfigurationStatus.

Risoluzione: No.

Get-DscConfigurationStatus restituisce le operazioni del ciclo di pull come operazioni di tipo Consistency

Quando un nodo viene impostato sulla modalità di aggiornamento PULL, per ogni operazione pull eseguita il cmdlet Get-DscConfigurationStatus restituisce Consistency invece di Initial come tipo di operazione.

Risoluzione: No.

Il cmdlet Invoke-DscResource non restituisce i messaggi nell'ordine di generazione

Il cmdlet Invoke-DscResource non restituisce i messaggi dettagliati, di avviso e di errore nell'ordine con cui vengono generati da Gestione configurazione locale o dalla risorsa DSC.

Risoluzione: No.

Non è possibile eseguire facilmente il debug di risorse DSC usate con Invoke-DscResource

Quando Gestione configurazione locale è in esecuzione in modalità di debug, il cmdlet Invoke-DscResource non fornisce informazioni sullo spazio di esecuzione a cui connettersi per il debug. Per altre informazioni, vedere Debug di risorse DSC.

Risoluzione: Individuare e associare lo spazio di esecuzione usando i cmdlet Get-PSHostProcessInfo, Enter-PSHostProcess, Get-Runspace e Debug-Runspace per eseguire il debug della risorsa 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

Documenti di configurazioni parziali diversi per lo stesso nodo non possono avere nomi di risorse identici

Nel caso di più configurazioni parziali distribuite in un singolo nodo, la presenza di nomi identici per le risorse può causare un errore di runtime.

Risoluzione: usare nomi diversi anche per le stesse risorse in configurazioni parziali diverse.

Start-DscConfiguration -UseExisting non funziona con -Credential

Quando si usa Start-DscConfiguration con il parametro UseExisting, il parametro Credential viene ignorato. DSC usa l'identità del processo predefinita per continuare l'operazione. Ciò causa un errore quando sono necessarie credenziali diverse per procedere nel nodo remoto.

Risoluzione: usare una sessione CIM per operazioni DSC remote:

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

Indirizzi IPv6 come nomi di nodo in configurazioni DSC

Gli indirizzi IPv6 come nomi dei nodi negli script di configurazione DSC non sono supportati in questa versione.

Risoluzione: No.

Debug di risorse DSC Class-Based

Il debug di risorse DSC basate su classi non è supportato in questa versione.

Risoluzione: No.

Le variabili e le funzioni definite nell'ambito $script per le risorse DSC basate su classi non vengono mantenute per più chiamate a una risorsa DSC

Più chiamate consecutive di Start-DSCConfiguration avranno esito negativo se la configurazione usa qualsiasi risorsa basata su classi con variabili o funzioni definite nell'ambito $script.

Risoluzione: definire tutte le variabili e tutte le funzioni nella classe della risorsa DSC stessa. Nessuna variabile/funzione con ambito $script.

Debug delle risorse DSC quando una risorsa usa PSDscRunAsCredential

Il debug delle risorse DSC quando una risorsa usa la proprietà PSDscRunAsCredential nella configurazione non è supportato in questa versione.

Risoluzione: No.

La proprietà PsDscRunAsCredential non è supportata per le risorse DSC composite

Risoluzione: usare la proprietà Credential, se disponibile. WindowsFeatureSet e ServiceSet di esempio

Get-DscResource -Syntax non rappresenta correttamente PsDscRunAsCredential

il parametro Syntax non rappresenta correttamente PsDscRunAsCredential quando la risorsa contrassegna la proprietà come obbligatoria o non la supporta.

Risoluzione: No. Tuttavia, con la creazione della configurazione in ISE vengono usati i metadati corretti della proprietà PsDscRunAsCredential quando si usa IntelliSense.

WindowsOptionalFeature non è disponibile in Windows 7

La risorsa DSC WindowsOptionalFeature non è disponibile in Windows 7. La risorsa richiede il modulo Gestione e manutenzione immagini distribuzione e i cmdlet di Gestione e manutenzione immagini distribuzione disponibili a partire da Windows 8 e nelle versioni più recenti del sistema operativo Windows.

Per le risorse DSC basate su classi, Import-DscResource -ModuleVersion potrebbe non funzionare come previsto

Se il nodo di compilazione include più versioni di un modulo di risorse DSC basato su classi, Import-DscResource -ModuleVersion non recupera la versione specificata e genera l'errore di compilazione seguente.

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

Risoluzione: importare la versione richiesta definendo l'oggetto ModuleSpecification per il parametro ModuleName con la chiave RequiredVersion specificata come segue:

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

Alcune risorse DSC, come la risorsa Registry, potrebbero iniziare a richiedere molto tempo per elaborare la richiesta.

Soluzione 1: creare un'attività di pianificazione che pulisce periodicamente la cartella seguente.

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

Soluzione 2: modificare la configurazione DSC in modo da pulire la cartella CommandAnalysis al termine della configurazione.

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