我已经创建了一个自定义模块作为 PowerShell 类,大致遵循 Writing a custom DSC resource with PowerShell classes 中提供的说明。 。目的是连接到 Azure 文件存储并下载一些文件。我使用 Azure Automation DSC 作为我的拉取服务器。
首先我要说的是,当通过 PowerShell ISE 运行时,代码的工作效果非常好。但是,当我将其上传到 Azure 时,出现了问题 - 我收到错误无法找到类型 [CloudFileDirectory]
。此类型说明符来自通过模块 Azure.Storage
引用的程序集,该模块肯定在我的自动化 Assets 列表中。
在我的 psm1
文件的顶部
Using namespace Microsoft.WindowsAzure.Storage.File
[DscResource()]
class tAzureStorageFileSync
{
...
# Create the search context
[CloudFileDirectory] GetBlobRoot()
{
...
}
...
}
我不确定这种情况下是否支持Using
,所以我们称之为问题1
到目前为止我已经尝试过:
- 将
RequiredModules = @( "Azure.Storage")
添加到psd1
文件 - 将
RequiredAssemblies = @( "Microsoft.WindowsAzure.Storage.dll")
添加到psd1
文件 - 将实际的
Microsoft.WindowsAzure.Storage.dll
文件发送到我上传的模块 zip 的根目录中(气味难闻)
当我使用 New-AzureRmAutomationModule 将模块部署到 Azure 时,它上传和处理得很好。 正在提取事件...
步骤有效且没有错误。
但是,当我编译配置时,编译过程失败,并出现我提到的无法找到类型
错误。
我曾考虑在 class
声明上方添加一个 Import-Module Azure.Storage
,但我以前从未在其他地方看到过这样做。
问题 2 有没有一种方法可以使用与 Azure DSC 使用的过程类似的过程进行本地编译,以便我可以更快地测试更改?
问题3有人知道这里出了什么问题吗?
最佳答案
问题 1/3: 如果您在 powershell 中创建类并在其中使用其他类,请确保在加载包含新类的脚本文件之前存在这些类。
即: 加载器.ps1:
Import-Module Azure.Storage
. .\MyDSC-Class.ps1
Powershell 检查是否找到您在解释脚本时引用的所有类型,因此必须在此之前加载所有类型。您可以通过创建一个脚本文件来完成此操作,该脚本文件首先加载所有依赖项,然后加载您的脚本。
关于powershell - 无法在自定义 Azure DSC 模块中找到类型 [CloudFileDirectory] 错误 - 相关程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375660/