14

另一种不太具体地表达问题的方式:在目标机器上“重置”DSC进程的正确方法是什么?

我已经创建了一个我现在正在迭代的 DSC 配置,并且我正在添加我弄错的新包配置。我确定如果忘记在 Package 块中向 MSI 安装程序提供 /quiet 参数,我可能会导致 Start-DscConfiguration cmdlet“挂起”。

在此“挂起”开始时,我停止本地计算机上的 DSC 配置操作并尝试更正配置问题(通过在我的示例中添加 /quiet 参数)然后我重新启动 DSC 操作。现在,我在操作过程中看到远程机器的以下内容:

Cannot invoke the SendConfigurationApply method. The PerformRequiredConfigurationChecks method is in progress and must return before SendConfigurationApply can be invoked.
    + CategoryInfo          : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : MI RESULT 1
    + PSComputerName        : REMOTEMACHINE20

不幸的是,访问正在配置的远程 PC 我看到了类似的错误消息,并且重新启动 PC 似乎无法纠正错误。

我在网上看到了一些关于这个问题的帖子,到目前为止我发现的三个建议:

  1. “稍等片刻,它会自行解决”,这对我没有用(也许我不耐烦......)。不是一个站得住脚的长期解决方案。
  2. “删除所有本地 .mof 文件并重试”,这对我也不起作用。
  3. 停止名称中包含“wmi”的所有进程,并在目标计算机上重新启动 winrm 服务。这让我畅通无阻,但我希望有更好的方法来做到这一点。(如果我在接下来的几天里没有听到更好的方法,我会用这个程序自己回答这个问题以获得所需的结果)。
4

2 回答 2

20

我发现以下方法可以很好地重置 DSC。请注意,这将删除本地配置,因此您需要重新应用 machinename.meta.mof 文件。

#Remove all mof files (pending,current,backup,MetaConfig.mof,caches,etc)
rm C:\windows\system32\Configuration\*.mof*
#Kill the LCM/DSC processes
gps wmi* | ? {$_.modules.ModuleName -like "*DSC*"} | stop-process -force

此时,您已经准备好一个干净的系统,可以使用它进行配置Set-DscLocalConfigurationManager和更新Update-DscConfiguration -Wait -Verbose -CimSession machinename

到目前为止,唯一没有解决的问题是 $env:psmodulepath 损坏或缺少一致性/重启检查的计划任务。更新:根据这个关于连接的项目,一致性/重启的计划任务在 WMF 5.0 2 月预览版中被删除。

于 2015-03-27T00:50:42.400 回答
4

您也可以尝试使用 -Force 选项执行 start-dscconfiguration 命令

Start-DscConfiguration -Force ...
于 2015-02-18T21:45:58.823 回答