Powershell DSC: Может ли кто-нибудь привести пример использования ресурса?

Специалистам по DSC это может показаться очень простым вопросом, но я не смог найти в Интернете никаких ресурсов для ответа на этот вопрос или каких-либо сообщений об ошибках, которые я видел. Кажется, очень сложно найти какую-либо информацию о DSC, поэтому, возможно, мы можем начать здесь.

Я пытаюсь создать конфигурацию Powershell DSC для установки запланированной задачи. Я нашел образец ресурса на Github для ресурсов StackExchange и скопировал "StackExchangeResources". tree в мой репозиторий 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: объекты MSFT_ScheduledTask со свойством «TaskName», равным «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, но в нем не видно никаких других директив.

Здесь должно быть что-то, чего мне не хватает. Возможно, есть какой-то подробный режим, который я могу включить? Другие параметры ведения журнала, которые не задокументированы? Это было бы очень полезно.


person Steve Rukuts    schedule 19.04.2014    source источник
comment
Исправление неработающей ссылки: github.com/PowerShellOrg/StackExchangeResources   -  person kevinpo    schedule 16.06.2015
comment
Спасибо @kevinpo - я отредактировал вопрос.   -  person Steve Rukuts    schedule 16.06.2015


Ответы (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
        }
    }
}

Надеюсь, поможет.

person Karol    schedule 24.04.2014
comment
Большое спасибо - я считаю, что это решит мою проблему, поэтому я отмечу это как ответ. К сожалению, у нас только что было слишком много проблем с DSC - этот вопрос описывает одну из многих. Технология выглядит многообещающе, но ее чрезвычайно сложно использовать и она не очень хорошо документирована, поэтому я думаю, что мы подождем несколько лет, пока она станет лучше, прежде чем проводить переоценку. - person Steve Rukuts; 25.04.2014

Если вы ищете введение в 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
        }
    }
}
person sqlchow    schedule 20.04.2014
comment
Спасибо за оба этих ресурса - я их раньше не видел; они очень интересны и помогли мне понять DSC. К сожалению, это не отвечает на мой конкретный вопрос о том, почему невозможно указать имя ресурса для некоторых ресурсов. Мне было бы очень интересно услышать, есть ли у вас какой-либо дополнительный вклад по этому поводу. - person Steve Rukuts; 20.04.2014