初始同步生成mof时出现Azure DSC错误

时间:2016-11-15 00:19:39

标签: dsc azure-automation

我有一个基于类的自定义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编译失败。

1 个答案:

答案 0 :(得分:0)

@Mods我真的不清楚这将被贬低的基础 - 我不认为提出任何人都无法回答的问题是“惩罚”的理由。

发布答案,因为没有人真正有任何贡献在这里,我似乎 我自己解决了。我认为问题在于时机问题。 DSC依赖模块从拉取服务器提供,并在执行任何执行之前编译。我的类模块对Azure.Storage的依赖意味着无法编译.psm1文件(因为该模块尚未在机器上存在 - 它将在稍后通过DSC资源进行传递时间)。

也许有一些机制可以解释基于PS的模块中的这些依赖关系,或者应用了一些宽容,而不是基于类的资源。那还不清楚。

经过一些实验,我已经开始创建MOF文件并将其与psm1psd1文件一起发送,而不是在我的问题中列出的DSCResources...子文件夹中,这个出现了解决了这个问题。

希望这有助于某人,并且不会吸引更多的投票。