我正在调试 v4.0 附带的 PowerShell DSC 资源。更具体地说,我正在通过添加诊断日志来测试 MSFT_ProcessResource。在我对资源进行更改并运行我的配置以使用该资源后,我看不到我刚刚添加的日志记录。最终,几分钟后,PowerShell 似乎刷新了它拥有的任何资源缓存。我试过 Get-DscResource 和 Import-Module MSFT_ProcessResource
这些都没有奏效。
有没有办法强制重新加载资源?
我正在调试 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
{
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 调试模式具有以下选项。
在示例 DSC 配置中使用它如下所示:
Configuration myChocoConfig2
{
Import-DscResource -Module cChoco
Node "localhost"
{
LocalConfigurationManager
{
DebugMode = 'All'
}
cChocoInstaller installChoco
{
InstallDir = "c:\choco"
}
cChocoPackageInstaller installChrome
{
Name = "sysinternals"
DependsOn = "[cChocoInstaller]installChoco"
}
}
}
我有一组在 PowerShell 启动时加载的脚本,我经常需要它们。我将编辑我的一个脚本并需要在当前会话中对其进行更新。
因为我通过 $profile 中的一系列脚本加载了这些脚本,所以我可以使用一个命令来刷新我在 init 上加载的任何脚本。
C:>powershell
此命令将刷新您的会话并将您保留在当前所在的同一文件夹中。如果您没有在启动时加载模块,则需要使用来自 Karol 的答案。