Powershell DSC:有人可以给我一个如何使用资源的例子吗?

时间:2014-04-19 20:51:18

标签: powershell dsc

对于DSC专业人士来说,这可能看起来像一个非常简单的问题,但我在网上找不到任何资源,或者我看到的任何错误消息。在DSC上挖掘任何信息似乎非常困难,所以也许我们可以从这里开始。

我正在尝试构建用于安装计划任务的Powershell DSC配置。我在Steve Murawski的Github page for StackExchange resources找到了一个示例资源,我已将'StackExchangeResources'树复制到我的DSC存储库。

我导入了StackExchangeModule并尝试使用ScheduledTask资源创建一个非常简单的配置:

Import-Module StackExchangeResources

Configuration TempCleaner
{
    param($NodeName)

    Node $NodeName
    {
        $filePath = "C:\Tasks\TempCleaner.ps1";

        ScheduledTask
        {
            Name = "Clear Temporary Files"
            FilePath = $filePath
            Daily = $true
            FilePath = ""
            Hours = 4
            Minutes = 0
        }
    }
}

然而,当我执行TempCleaner -Node TestNode时,它实际上并没有做任何事情;没有写入MOF文件,也​​不会抛出任何错误。

现在,我见过的很多例子都涉及为资源的调用命名,如下所示:

File TempCleaner
{
    DestinationPath = $filePath
    Contents = $(cat $tempCleanerScript | out-string)
    Checksum = "SHA-512"
}

但是,当我试着给它这样的名字时,

ScheduledTask CleanerTask
{
    Name = "Clear Temporary Files"
    FilePath = $filePath
    Daily = $true
    FilePath = ""
    Hours = 4
    Minutes = 0
}

它会引发异常:

  

ScheduledTask:找不到属性“TaskName”等于的MSFT_ScheduledTask对象   'CleanerTask'。验证属性的值并重试。   在C:\ Users \ Steve \ Documents \ DevOps \ DSC \ TempCleaner.ps1:13 char:9   + ScheduledTask CleanerTask   + ~~~~~~~~~~~~~~~~~~~~~~~~~      + CategoryInfo:ObjectNotFound:(CleanerTask:String)[Get-ScheduledTask]     ,CimJobException      + FullyQualifiedErrorId:CmdletizationQuery_NotFound_TaskName,Get-ScheduledTask

当我将计划任务资源与文件资源一起使用时,如上所示,文件资源将写入生成的MOF文件中,但不能在其中看到其他指令。

我必须在这里找到一些东西。我可以启用某种冗长的模式吗?其他未记录的日志记录选项?这将非常有帮助。

2 个答案:

答案 0 :(得分:2)

1)要使用第三方资源,您需要使用Import-DscResource导入它,而不是Import-Module。

  

Import-DscResource -Name StackExchange_ScheduledTask -ModuleName   StackExchangeResources

另请注意,它必须位于配置范围

2)确保您使用的资源模块已部署到C:\ Program Files \ WindowsPowerShell \ Modules \ 将整个StackExchangeResources文件夹及其内容(DSCResources等)放在那里。

3)资源名称是必填项

ScheduledTask task
{
#...
}

这里是修复配置:

Configuration TempCleaner
{
    param($NodeName)

    Import-DscResource -Name StackExchange_ScheduledTask -ModuleName StackExchangeResources
    Node $NodeName
    {
        $filePath = "C:\test\TempCleaner.ps1";

        ScheduledTask task
        {
            Name = "Clear Temporary Files"
            FilePath = $filePath
            Daily = $true
            Hours = 4
            Minutes = 0
        }
    }
}

希望它有所帮助。

答案 1 :(得分:1)

如果您正在寻找DSC的介绍,那么我建议从:

开始

无法添加评论,因此请修改我的回复。我想你的资源中可能有重复的密钥。

Import-Module StackExchangeResources

Configuration TempCleaner
{
    param($NodeName)

    Node $NodeName
    {
        $filePath = "C:\Tasks\TempCleaner.ps1";

        ScheduledTask
        {
            Name = "Clear Temporary Files"
            FilePath = $filePath
            Daily = $true
            #FilePath = "" - Need unique keys. Also, FilePath is only a string not string[]
            Hours = 4
            Minutes = 0
        }
    }
}