DSC - 模块路径上不存在模块

时间:2016-08-24 18:48:33

标签: powershell dsc

这是我遇到的错误:“PowerShell提供程序< module>在PowerShell模块路径中不存在,也没有注册为WMI提供程序”

我不是PowerShell和DSC的新手,但我很难搞清楚这一点。我已按照指南here进行问题排查。我还发现this almost identical question ...唯一的决议似乎是重启(我试过)。

所以我做了一个导入模块OctopusDSC的配置。在对模块导入进行故障排除时遗漏了很多参数,但这就是我所拥有的:

span {
    margin: 0;
    margin-left: 10px;
    padding: 0;
}

.http_method a:not(span){ background: linear-gradient(#4c99d7,#1a66a3);
    border: 1px solid #1a66a3;
    height: 25px;
    line-height: 10px;
    vertical-align: middle;

}

.http_method span{
font-size: 30px;
    margin-right: 10px;
    padding-left: 10px;
    vertical-align: middle;
    color: #686b6d;
}

该模块存在于本地和服务器上的Configuration OctopusServer { Import-DscResource -Module OctopusDSC Node "WIN-ABC123" { cTentacleAgent OctopusTentacle { Ensure = "Present" State = "Started" Name = "Tentacle" ApiKey = "" OctopusServerUrl = "" DefaultApplicationDirectory = "C:\Utility" } } } 中:

C:\Program Files\WindowsPowerShell\Modules

模块路径似乎很好(为了便于阅读,我在每个分号中放入回车符):

C:\>tree "C:\Program Files\WindowsPowerShell\Modules" /f
Folder PATH listing
Volume serial number is 9EC4-62C1
C:\PROGRAM FILES\WINDOWSPOWERSHELL\MODULES
└───OctopusDSC
    │   OctopusDSC.psd1
    │
    └───DSCResources
        └───cTentacleAgent
                cTentacleAgent.psm1
                cTentacleAgent.schema.mof

我可以致电PS C:\> $env:PSModulePath C:\Users\jasonc\Documents\WindowsPowerShell\Modules; C:\Program Files\WindowsPowerShell\Modules; C:\Windows\system32\WindowsPowerShell\v1.0\Modules\; C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell

Get-Module

我可以致电PS C:\> Get-Module OctopusDSC -ListAvailable Directory: C:\Program Files\WindowsPowerShell\Modules ModuleType Version Name ExportedCommands ---------- ------- ---- ---------------- Manifest 1.0.1 OctopusDSC {Get-TargetResource, Set-TargetResource, Test-TargetResource}

Get-DscResource

这是我的错误:

PS C:\temp> Get-DscResource  -Name "cTentacleAgent"

ImplementedAs   Name                      Module                         Properties
-------------   ----                      ------                         ----------
PowerShell      cTentacleAgent            OctopusDSC                     {Name, ApiKey, DefaultApplicationDirectory,...

我错过了什么吗?

PS C:\> Start-DscConfiguration -Path .\OctopusServer -Verbose -WhatIf -Wait
What if: [WIN-ABC123]: LCM:  [ Start  Set      ]
What if: [WIN-ABC123]: LCM:  [ End    Set      ]
The PowerShell provider OctopusDSC does not exist at the PowerShell module path nor is it registered as a WMI provider.
    + CategoryInfo          : InvalidOperation: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : ModuleNameNotFound
    + PSComputerName        : WIN-ABC123

更新

我注意到在安装了Microsoft Monitoring Agent的计算机上会出现此问题,但如果未安装该代理,则不会发生此问题。

安装后,PSModulePath机器级环境变量如下所示(为清晰起见,拆分):

PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34014
BuildVersion                   6.3.9600.16394
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

如果我删除了代理的路径,并且只留下PS C:\> [environment]::GetEnvironmentVariable("PSModulePath","Machine") C:\Windows\system32\WindowsPowerShell\v1.0\Modules\; C:\Program Files\Microsoft Monitoring Agent\Agent\PowerShell ,则会找到OctopusDSC。我必须重新启动WMI Provider Host进程才能获取要更改的环境变量。如果我将路径添加回来...失败。

现在这让我感到困惑,因为安装模块的实际路径的整个时间都是C:\Windows\system32\WindowsPowerShell\v1.0\Modules\,并且由PowerShell本身预先添加到计算出的C:\Program Files\WindowsPowerShell\Modules(我假设因为我通常看不到在系统环境变量中设置的路径)。

我在其他地方看到在PSModulePath中重复C:\Program Files\WindowsPowerShell\Modules会导致模块解析出现问题。那么也许还有其他的错误和敏感性呢?

我觉得这是一个答案,但我仍在寻找一种解决方法,因为不首选删除该路径。

5 个答案:

答案 0 :(得分:1)

作为完整性检查,请查看正在创建.MOF的目录...那里有其他MOF文件吗? Start-DscConfiguration运行目录中的所有MOF。我重命名了我的MOF文件并且无法使错误消失,直到最终意识到错误发生在旧MOF中​​:(

答案 1 :(得分:1)

这是WMF 4.0中的一个已知问题。你在使用WMF 4.0吗?切换到WMF 5.0将解决此问题,除非您遇到Andy提到的Windows 10更新补丁问题。

答案 2 :(得分:0)

您看到this post了吗?

除了一些补丁(从2015年开始),它还谈到了递归运行unblock-file的必要性。我想我以前遇到过这个问题。

答案 3 :(得分:0)

如果你正在运行Windows 10,那么一个更新后的修补程序会破坏这个(2016年8月25日)。应该在周二这个问题得到解决。 http://www.zdnet.com/article/windows-10-update-breaks-powershell-and-microsoft-wont-fix-it-until-next-week/

答案 4 :(得分:0)

我遇到了同样的问题...事实证明我的问题是Powershell版本不匹配。我的工作站是版本5,但终点是版本4(开箱即用的是2012 R2)。

在远程服务器上安装WMF 5.1之后,它使用xWebAdministration模块识别并安装了IIS。

在此之前,我遇到了同样的错误,即使我将其模块复制到了适当的路径,也没有模块。在另一个配置的Web服务器上,路径变量相同。唯一的区别是Powershell版本。

另一方面,我注意到'C:\Program Files\WindowsPowerShell\Modules'不在任何服务器(或与此有关的任何其他计算机)的$ env:Path变量中……只是{{1 }}。必须采取其他措施,DSC才能识别该位置的模块(例如,由于服务器位于WMF 5上,因此Get-DscResource在Program Files目录中找到模块。在4时,它仅在Windows子文件夹中找到了模块)。