2014-01-29 120 views
1

我正在調試v4.0附帶的PowerShell DSC資源。 更具體地說,我通過添加診斷日誌來測試MSFT_ProcessResource。 在對資源進行更改並運行配置以執行資源之後,我看不到我剛添加的日誌記錄。最終幾分鐘後,PowerShell似乎刷新了它擁有的任何資源緩存。 我試過 獲取-DscResource和 導入模塊MSFT_ProcessResource刷新PowerShell DSC資源

其中沒有工作。

有沒有辦法強制重新加載資源?

+0

同樣的問題,在這裏,你設法取得任何進展? – foobarcode

+2

我發現我在修改系統文件夾中的資源時必須重新啓動WMI windows服務。或者,如果我正在對程序文件中的資源進行更改,則更改會立即反映出來 – user21479

+0

感謝您的反饋 – foobarcode

回答

1

DSC引擎緩存資源以提高性能。

有兩種方法來重新加載資源:

1)重新啓動過程託管DSC引擎(殺死WMI提供程序主機,然後重新運行配置)

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,而不是$真正的調試模式有以下選項。

  • - 表示DebugMode爲False且不適用。
  • 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