我在Archive 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
答案 0 :(得分:5)
我的资源不会更新:如何重置缓存
DSC引擎缓存作为PowerShell模块实现的资源以提高效率 目的。但是,这可能会在您创作时出现问题 资源并同时测试它,因为DSC将加载 缓存版本,直到重新启动进程。唯一的方法 DSC加载较新的版本是明确杀死进程托管 DSC引擎。
确定承载DSC引擎的进程并将其停止 在每个实例的基础上,您可以列出WmiPrvSE的进程ID 正在主持DSC引擎。然后,要更新提供程序,请停止 WmiPrvSE进程使用下面的命令,然后运行 再次启动-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
答案 1 :(得分: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