我有一个基于类的自定义DSC模块。在初始同步过程中,目标计算机尝试在C:\ Windows \ System32 \ dsc中生成MOF,这会导致错误 - 这会导致初始同步报告为失败,即使所有单个配置资源任务都显示为成功。基于未生成MOF的资源的报告成功报告,但实际上根本没有执行。
这是错误:
{
"JobId": "4deeaf52-aa56-11e6-a940-000d3ad04eaa",
"OperationType": "Initial",
"ReportFormatVersion": "2.0",
"ConfigurationVersion": "2.0.0",
"StartTime": "2016-11-14T21:37:14.2770000+11:00",
"Errors": [{
"ErrorSource": "DSCPowershellResource",
"Locale": "en-US",
"Errors": {
"Exception": {
"Message": "Could not find the generate schema file dsc\tBlobSync.1.4.tAzureStorageFileSync.schema.mof.",
"Data": {
},
"InnerException": null,
"TargetSite": null,
"StackTrace": null,
"HelpLink": null,
"Source": null,
"HResult": -2146233079
},
"TargetObject": null,
"CategoryInfo": {
"Category": 6,
"Activity": "",
"Reason": "InvalidOperationException",
"TargetName": "",
"TargetType": ""
},
"FullyQualifiedErrorId": "ProviderSchemaNotFound",
"ErrorDetails": null,
"InvocationInfo": null,
"ScriptStackTrace": null,
"PipelineIterationInfo": []
},
"ErrorCode": "6",
"ErrorMessage": "Could not find the generate schema file dsc\tBlobSync.1.4.tAzureStorageFileSync.schema.mof.",
"ResourceId": "[tAzureStorageFileSync]CDrive"
}],
"StatusData": [],
"AdditionalData": [{
"Key": "OSVersion",
"Value": {
"VersionString": "MicrosoftWindowsNT10.0.14393.0",
"ServicePack": "",
"Platform": "Win32NT"
}
},
{
"Key": "PSVersion",
"Value": {
"CLRVersion": "4.0.30319.42000",
"PSVersion": "5.1.14393.206",
"BuildVersion": "10.0.14393.206"
}
}]
}
我尝试手动生成MOF并将其包含在模块中,但这没有帮助(或者我做错了)。尽管这是一个基于类的资源,但我在 \ DSCResources \ className
\ classname
.schema.mof 文件中添加了具有该类名称的MOF。我注意到在C:\ windows \ system32 \ dsc文件夹中生成的文件包含版本号,而我的版本号没有。也许这就是问题所在。
初始同步失败后,后续的一致性检查确实通过,并在错误消息中提到的位置创建MOF。
该类本身包含一个调用Import-Module Azure.Storage
的函数,该函数由不同的DSC资源安装在机器上,并且已经在一致性检查时安装,但(显然)不在初始点同步开始。安装模块的资源被标记为配置中类资源的依赖项,但我认为MOF生成必须在模块部署时发生,这在逻辑上是在初始同步运行之前。
至少这就是我的想法。
如果有人能指导我在这种情况下可以做些什么,以及我的假设(上述)是否正确,我将不胜感激?我似乎无法从MOF编译过程中获得任何其他错误或遥测,以查看为什么 MOF编译失败。
答案 0 :(得分:0)
@Mods我真的不清楚这将被贬低的基础 - 我不认为提出任何人都无法回答的问题是“惩罚”的理由。
发布答案,因为没有人真正有任何贡献在这里,我似乎
我自己解决了。我认为问题在于时机问题。 DSC依赖模块从拉取服务器提供,并在执行任何执行之前编译。我的类模块对Azure.Storage
的依赖意味着无法编译.psm1
文件(因为该模块尚未在机器上存在 - 它将在稍后通过DSC资源进行传递时间)。
也许有一些机制可以解释基于PS的模块中的这些依赖关系,或者应用了一些宽容,而不是基于类的资源。那还不清楚。
经过一些实验,我已经开始创建MOF文件并将其与psm1
和psd1
文件一起发送,而不是在我的问题中列出的DSCResources...
子文件夹中,这个出现了解决了这个问题。
希望这有助于某人,并且不会吸引更多的投票。