我有Windows 10 / Windows 2016 TP5(PowerShell 5.1)。我想在我的配置中使用GitHub的PowerShell DSC模块,例如xTimeZone。
如何使用Import-DSCResource
?
这是我第一次尝试添加基于安装程序的产品以外的模块,也许我错过了一些明显的东西。是不是有基于git clone
的程序,如pip
或gem
?
我验证了$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
答案 0 :(得分:2)
关于DSC资源
DSC资源本质上是专门的PowerShell模块。资源模块必须导出Get,Set和Test-TargetResource命令(PowerShell 5可以使用另一个选项,但在xTimeZone的上下文中超出范围)。
资源始终部署在以下结构中:
<Modules>\<ModuleName>\DSCResources\<ResourceName>
Get-DscResource在DSCResources文件夹中查找“modules”,作为现有模块的子文件夹。如果它看不到资源,则无法使用它。
<强> xTimeZone 强>
xTimeZone包含:
除非正确部署,否则Windows PowerShell无法找到该资源。这些说明适用于下载模块。
xTimeZone-master
重命名为xTimeZone
。xTimeZone
复制到C:\Program Files\WindowsPowerShell\Modules
确认您可以发现DSCResource:
Get-DscResource
如果由于某种原因,您遇到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根目录,然后一切都恢复了。
我需要做的只是刷新我的资源,因为出现了一些新方法,并且之前不记得我是怎么做的……这肯定是不同的。