如何将外部DSC模块导入PowerShell环境?

时间:2016-08-07 09:20:34

标签: powershell dsc

我有Windows 10 / Windows 2016 TP5(PowerShell 5.1)。我想在我的配置中使用GitHub的PowerShell DSC模块,例如xTimeZone

如何使用Import-DSCResource

引用它,我该怎么办?

这是我第一次尝试添加基于安装程序的产品以外的模块,也许我错过了一些明显的东西。是不是有基于git clone的程序,如pipgem

我验证了$env:PSModulePath的值,并定义了两个目录:C:\Users\techraf\Documents\WindowsPowerShell\Modules;C:\Windows\system32\W indowsPowerShell\v1.0\Modules

我将xTimeZone目录的内容复制到C:\Users\techraf\Documents\WindowsPowerShell\Modules

PowerShell看不到它。试图在存储库的不同级别上复制 - 都失败了。

运行example脚本时,我得到:

At line:12 char:4
+    Import-DSCResource -ModuleName xTimeZone
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Could not find the module 'xTimeZone'.
At line:16 char:9
+         xTimeZone TimeZoneExample
+         ~~~~~~~~~
Undefined DSC resource 'xTimeZone'. Use Import-DSCResource to import the resource.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : ModuleNotFoundDuringParse

根据答案的建议,将模块从C:\Users\techraf\Documents\WindowsPowerShell\Modules移动到C:\Windows\system32\W indowsPowerShell\v1.0\Modules后,第一个错误消失了,我只得到:

At line:16 char:9
+         xTimeZone TimeZoneExample
+         ~~~~~~~~~
Undefined DSC resource 'xTimeZone'. Use Import-DSCResource to import the resource.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ResourceNotDefined

2 个答案:

答案 0 :(得分:2)

关于DSC资源

DSC资源本质上是专门的PowerShell模块。资源模块必须导出Get,Set和Test-TargetResource命令(PowerShell 5可以使用另一个选项,但在xTimeZone的上下文中超出范围)。

资源始终部署在以下结构中:

<Modules>\<ModuleName>\DSCResources\<ResourceName>

Get-DscResource在DSCResources文件夹中查找“modules”,作为现有模块的子文件夹。如果它看不到资源,则无法使用它。

<强> xTimeZone

xTimeZone包含:

  1. 一个PowerShell模块,它只包含一个清单和一些示例。
  2. 名为xTimeZone的DSC资源。
  3. 除非正确部署,否则Windows PowerShell无法找到该资源。这些说明适用于下载模块。

    1. 选择主分支并从以下位置下载存储库的zip:https://github.com/PowerShell/xTimeZone/tree/master
    2. 将zip文件解压缩到一个文件夹。
    3. xTimeZone-master重命名为xTimeZone
    4. xTimeZone复制到C:\Program Files\WindowsPowerShell\Modules
    5. 确认您可以发现DSCResource:

      Get-DscResource
      
    6. 如果由于某种原因,您遇到Program Files \ Modules问题,可以使用:

      C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
      

      但是,由于此区域是操作系统文件的一部分,因此优先级较低。

      <强>配置

      一旦发现了资源,就需要将其导入到您希望使用它的每个Configuration元素中。

      Configuration SomeConfiguration {
          Import-DscResource -ModuleName xTimeZone
      
          # Nodes statement follows
      }
      

答案 1 :(得分:0)

*不尝试回答,只是想添加其他反馈,但没有足够的堆栈街信条来添加评论...

根据您要使用的DSC,有时您必须将内容从“源”文件夹(包含上述“模块”和“ DSCResources”子文件夹)复制到您所用dscname的根目录下重新尝试合作。在我的实例中,我使用的是SqlServerDsc(下面的网址),但并不太精通,所以花了一段时间才弄清楚发生了什么。

https://github.com/dsccommunity/SqlServerDsc

我最初遵循github上提供的指示将zip解压缩到PS可访问的目录,但是没有新内容可通过get-dscresource访问。看到上面张贴者概述的语法后,我尝试将DSC的源文件夹内容手动复制到modules / SqlServerDsc根目录,然后一切都恢复了。

我需要做的只是刷新我的资源,因为出现了一些新方法,并且之前不记得我是怎么做的……这肯定是不同的。