繁体   English   中英

刷新PowerShell DSC资源

[英]Refresh PowerShell DSC resource

我正在调试v4.0附带的PowerShell DSC资源。 更具体地说,我通过添加诊断日志来测试MSFT_ProcessResource。 在我更改资源并运行我运行资源的配置后,我没有看到刚添加的日志记录。 最终几分钟后,PowerShell似乎刷新了它拥有的任何资源缓存。 我尝试过Get-DscResource和Import-Module MSFT_ProcessResource

这些都没有奏效。

有没有办法强制重新加载资源?

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

  • DSC有一个缓存模型,从2016年9月开始坦率地看起来很麻烦且设计得很差
  • 指示绕过缓存的机制的博客条目并不总是有效
  • 在您的配置中包括以下配置行
  • 还要执行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

现在用WMF 5改变了,而不是$ true调试模式有以下选项。

  • - 表示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

我有一组脚本加载PowerShell的启动,我经常需要相同的。 我会编辑我的一个脚本,需要在当前会话中进行更新。

因为我通过$ profile中的一系列脚本加载这些脚本,所以我可以使用一个命令来刷新我在init上加载的任何脚本。

C:> powershell

此命令将刷新您的会话并使您保持在当前所在的文件夹中。如果您未在启动时加载模块,则需要使用Karol答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM