2014-01-29 2 views
1

Я отлаживаю ресурсы DSC PowerShell, которые поставляются с версией 4.0. В частности, я тестирую MSFT_ProcessResource, добавляя диагностический журнал. После того, как я внес изменения в ресурс и запустил мою конфигурацию, использующую ресурс, я не вижу только что добавленную запись. В конце концов, через несколько минут PowerShell, похоже, обновляет любой кеш ресурсов, который у него есть. Я попытался Get-DscResource и Import-Module MSFT_ProcessResourceОбновите ресурс DSC PowerShell

Ни один из которых работал.

Есть ли способ принудительно перезагрузить ресурс?

+0

Тот же вопрос здесь, вам удалось добиться прогресса? – foobarcode

+2

Я обнаружил, что мне нужно перезапустить службу Windows WMI при изменении ресурса в системной папке. Или, если я вношу изменения в ресурс в файлах программы, изменения немедленно отражаются – user21479

+0

Спасибо за отзыв – foobarcode

ответ

1

DSC двигатель кэширует ресурсы для повышения производительности.

Есть два способа перезагрузить ресурс:

1) Перезапуск процесса хостинг DSC двигатель (убить WMI Provider Host и повторно запустить конфигурацию)

2) Используйте режим отладки, который приведет DSC к перезагружать ресурсы автоматически (полезно при разработке ресурсов, но не рекомендуется для обычной работы):

LocalConfigurationManager 
{ 
    DebugMode = $true 
} 

Вы можете прочитать больше о режиме отладки здесь: http://blogs.msdn.com/b/powershell/archive/2014/04/22/debug-mode-in-desired-state-configuration.aspx

+0

Согласно упомянутой ссылке, это функция v5. Приятно для сценариев V5, но OP отметил свой вопрос как powershell-4.0, поэтому, вероятно, в данный момент это не помогает –

0

Теперь это изменилось с помощью WMF 5, вместо $ true режим отладки имеет следующие параметры.

  • Ни - не Обозначает, что DebugMode является ложным и не применяется.
  • ForceModuleImport - Принудительно перезагрузить ресурсный модуль вместо использования кеша. Это похоже на «истинное» значение в предыдущих версиях.
  • ResourceScriptBrealAll - Помогает в отладке ресурсов DSC, когда локальный менеджер конфигурации пытается выполнить их функции. Подробнее о он в последующих сообщениях в блоге!
  • Все - означает, что отладка, а также перезагрузка модулей включены.

Используя это в качестве примера DSC конфигурации будет выглядеть следующим образом:

Configuration myChocoConfig2 
{ 
    Import-DscResource -Module cChoco 
    Node "localhost" 
    { 
     LocalConfigurationManager 
     { 
      DebugMode = 'All' 
     } 
     cChocoInstaller installChoco 
     { 
     InstallDir = "c:\choco" 
     } 
     cChocoPackageInstaller installChrome 
     { 
     Name = "sysinternals" 
     DependsOn = "[cChocoInstaller]installChoco" 
     } 

    } 
} 

https://techstronghold.com/blogs/scripting/how-to-setup-debug-mode-in-windows-powershell-desired-state-configuration-dsc

1
  • DSC имеет модель кэширования, которая откровенно кажется глючит и poorlyl разработан на сентябрь 2016
  • Записи в блоге, показывающие механизмы, чтобы обойти кеширование, не всегда работают
  • В вашей конфигурации укажите следующую конфигурационную строку
  • Также выполните полный перезапуск службы winmgt. Простое убийство процесса dsctimer, похоже, не всегда работает.

{ LocalConfigurationManager { DebugMode = "All" } }

PowerShell скрипт для очистки кэша является:


$dscProcessID = Get-WmiObject msft_providers | 
    Where-Object {$_.provider -like 'dsctimer'} | 
    Select-Object -ExpandProperty HostProcessIdentifier 

if ($dscProcessID -eq $null) { 
    Write-Host "DSC timer is not running." 
    return 
} 
Write-Host "Process ID: $dscProcessID" 

Get-Process -Id $dscProcessID | Stop-Process -Force 

Restart-Service -Name winmgmt -Force -Verbose