5

我在存档 DSC 模块 (MSFT_ArchiveResource.psm1) 中发现了一个错误。在复制代码、在 ISE 中调试并找出需要修复的两行之后,我想对真实文件进行更改并使用 Puppet 和 msutter/dsc 模块进行测试,该模块利用存档资源.

我发现我认为文件在我的机器上的位置:

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\DSCResources\MSFT_ArchiveResource\MSFT_ArchiveResource.psm1

但是,当我运行 Puppet 时,很明显我更改的代码没有被执行。(如果我在文件顶部设置 $Debug = $true,我看不到额外的输出。)是否有一些 Windows 缓存保存了我必须清除的这个文件?它是从 ZIP 或其他存档加载的吗?

我怀疑 Puppet 是否与该问题有关,但请提及它以防它响起。(我只在代理上更改了代码。)

更新:

当我在 Powershell 中运行以下行时,我没有找到任何预期名称包含“dsccore”的进程:

Get-WmiObject msft_providers | select -ExpandProperty provider

结果:

RegistryEventProvider
PolicyAgentInstanceProvider
CIMWin32
Msft_ProviderSubSystem
SCM Event Provider
Win32_WIN32_TERMINALSERVICE_Prov
WmiPerfClass
WmiPerfClass
WmiPerfInst
WmiPerfInst
4

2 回答 2

5

DSC 故障排除

我的资源不会更新:如何重置缓存

为了提高效率,DSC 引擎缓存了作为 PowerShell 模块实现的资源。但是,当您创作资源并同时对其进行测试时,这可能会导致问题,因为 DSC 将加载缓存的版本,直到进程重新启动。使 DSC 加载较新版本的唯一方法是显式终止托管 DSC 引擎的进程。

要确定哪个进程托管 DSC 引擎并在每个实例的基础上停止它,您可以列出托管 DSC 引擎的 WmiPrvSE 的进程 ID。然后,要更新提供程序,请使用以下命令停止 WmiPrvSE 进程,然后再次运行 Start-DscConfiguration。

###
### find the process that is hosting the DSC engine
###
$dscProcessID = Get-WmiObject msft_providers | 
Where-Object {$_.provider -like 'dsccore'} | 
Select-Object -ExpandProperty HostProcessIdentifier 

###
### Stop the process
###
Get-Process -Id $dscProcessID | Stop-Process
于 2015-04-22T15:45:04.733 回答
0

在 WMF 5.0 中,DSC 添加了强制导入模块而不终止进程的选项。它记录在MSDN here上。

以下是如何启用它的示例:

configuration settings
{
    LocalConfigurationManager
    {
        DebugMode = 'ForceModuleImport'
    }
}

$outputPath = "$env:temp\lcmSettings"

settings -outputPath $outputPath
Set-DscLocalConfigurationManager -Path $outputPath -Force -Verbose
于 2016-05-13T22:39:55.203 回答