Powershell DSC在哪里找到模块代码?

时间:2015-04-22 15:38:51

标签: powershell puppet dsc

我在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

2 个答案:

答案 0 :(得分:5)

Troubleshooting DSC

  

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

     

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