PowerShell DSC 复合资源

2023-12-03

我已成功创建 DSC 配置并将其部署到服务器上。下一步,我尝试将服务器中常见的配置块部分分解为可重用的部分,或者用 DSC 的说法是“复合资源”。经过大量研究后,我仍然无法使用复合资源,运行“Get-DSCResource”时它们没有列出。

查看“Get-DSCResource”函数后,似乎需要一个“DSCResources”子文件夹,PowerShell.org 电子书没有说明这一点,但 PowerShell 博客却说明了这一点。 Get-DSCResources 函数使用资源名称(示例中的 SimpleConfig)调用 Get-Module。当根文件夹中没有 psd1 时(示例中的 BaseConfiguration),两者都没有考虑到 Get-Module 无法“看到”子文件夹。我采用了这些方法,形成了下面的示例,但也没有成功。

我看过:

  • 电源外壳Blog
  • PowerShell.orgEBook
  • 史蒂文·穆拉夫斯基的 DSCSeries
  • Steven Murawksi 的 DSC 用户组推介会

配置示例:

# $env:ProgramFiles\WindowsPowerShell\BaseConfiguration\BaseConfiguration.psd1
@{
    ModuleVersion = '1.0'
    GUID = '84f449fd-8f26-4bb9-908f-eb675c56b5d8'
    Author = 'James Pogran'
}

# $env:ProgramFiles\WindowsPowerShell\BaseConfiguration\DSCResoures\SimpleConfig\SimpleConfig.schema.psm1
Configuration SimpleConfig
{
    Log LogThis
    {
        Message = "Foo"
    }
}

# $env:ProgramFiles\WindowsPowerShell\BaseConfiguration\DSCResoures\SimpleConfig\SimpleConfig.psd1
RootModule = "SimpleConfig.schema.psm1"

更新2014-04-12

此答案中的原始说明可以正常工作,但它显示了创建复合资源的错误方法,这就是为什么需要显式导入模块才能在测试配置中使用复合配置的原因。

复合配置应作为普通 DSC 资源在DSCResources容器模块的子文件夹。这个在回答里有提到这个 StackOverflow 问题我还写了一篇博客文章创建采用参数的复合 DSC 配置,该配置给出了正确方法的详细说明.

我保留了原来的答案,只是删除了,因为我认为它仍然有帮助。另外,考虑到以下信息,它也应该非常有用。

需要Import-Module调用的原因是只有普通的DSC资源能够自动加载。复合配置应在容器模块的子文件夹中创建MyContainerModule\DSCResources\BaseConfig. The psm1容器模块的文件可以为空,复合配置可以与原始答案完全相同(Ìmport-DscResource命令使用Name参数而不是ModuleName参数,如果你想保留 BaseConfig 名称)。

创建复合 DSC 配置的详细步骤

以下是我在创建并验证名为的复合配置时执行的步骤BaseConfig。我希望这可以为您提供指导。

对于以下所有步骤,我以管理员身份运行 PowerShell ISE。

创建文件夹来保存模块

PS C:\WINDOWS\system32> cd 'C:\Program Files\WindowsPowerShell\Modules'
PS C:\Program Files\WindowsPowerShell\Modules> md BaseConfig

    Directory: C:\Program Files\WindowsPowerShell\Modules

Mode                LastWriteTime     Length Name                                                                         
----                -------------     ------ ----                                                                         
d----        2014-03-04     23:45            BaseConfig                                                                   

PS C:\Program Files\WindowsPowerShell\Modules> cd .\BaseConfig
PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> 

创建复合配置文件

该文件的命名必须以“.schema.psm1”结尾,因为它被硬编码到 PowerShell DSC 模块中,您可以在文件夹中找到该代码C:\windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration.

PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> notepad BaseConfig.schema.psm1

在 BaseConfig.schema.psm1 文件中,我输入了以下配置:

Configuration BaseConfig
{
    File TestFile1
    {
        DestinationPath = "C:\CompositeConfigurationCreatedTextFile1.txt";
        Contents = "File1Content";
    }
    File TestFile2
    {
        DestinationPath = "C:\CompositeConfigurationCreatedTextFile2.txt";
        Contents = "File2Content";
    }
}

创建模块清单

创建模块清单很简单,只需让 PowerShell 为您完成即可。

PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> New-ModuleManifest -Path .\BaseConfig.psd1 -RootModule BaseConfig.schema.psm1

验证 PowerShell 是否找到复合配置

完成此步骤后,我们应该完成复合配置。要验证是否可以找到它,请尝试运行以下命令并验证输出:

PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> Import-Module BaseConfig
PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> Get-Command -CommandType Configuration

CommandType     Name                                               ModuleName                                             
-----------     ----                                               ----------                                             
Configuration   BaseConfig                                         BaseConfig 

重要的提示:我发现如果我尝试在不先导入模块的情况下执行测试配置(如下),则会失败;它无法识别 BaseConfig。导入模块后,测试配置工作得很好。但是,如果我稍后打开一个新的 PowerShell 会话或在当前 PowerShell 会话中运行“Remove-Module”(这两种方法都确保该模块不会在当前会话中加载),则配置将正常工作。因此,出于某种原因,在我至少导入该模块一次之前,它似乎无法找到我新创建的复合配置。

测试复合配置

要测试复合配置,请创建一个在节点本地主机上配置配置的配置,执行它并验证是否已进行预期的更改。我在下面详细介绍了执行此操作的具体步骤。

创建测试配置

为了使用复合配置,我首先创建了一个配置定义文件,路径为 c:\temp\testconfiguration.ps1

PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> md c:\Temp

    Directory: C:\

Mode                LastWriteTime     Length Name                                                                         
----                -------------     ------ ----                                                                         
d----        2014-03-04     23:47            Temp                                                                         

PS C:\Program Files\WindowsPowerShell\Modules\BaseConfig> cd \temp
PS C:\temp> notepad testconfiguration.ps1

我给了它以下内容:

Configuration TestConfiguration
{
    Import-DscResource -ModuleName BaseConfig

    node localhost 
    {
        BaseConfig Common
        {
            # The created configuration did not have any parameters, thus no properties
        }
    }
}

TestConfiguration

创建 mof 文件

然后,要创建 mof 文件,只需执行 ps1 文件

PS C:\temp> .\testconfiguration.ps1

    Directory: C:\temp\TestConfiguration

Mode                LastWriteTime     Length Name                                                                         
----                -------------     ------ ----                                                                         
-a---        2014-03-04     23:49       2266 localhost.mof  

执行 DSC 配置

之后,我让 DSC 使用以下命令执行配置:

PS C:\temp> Start-DscConfiguration TestConfiguration

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
2      Job2            Configuratio... Running       True            localhost            Start-DscConfiguration...

验证是否已进行预期的更改

最后,我通过验证应该创建的两个文件是否存在来验证复合配置是否已运行。

PS C:\temp> ls c:\ -Filter *.txt

    Directory: C:\

Mode                LastWriteTime     Length Name                                                                         
----                -------------     ------ ----                                                                         
-a---        2014-03-04     23:51         15 CompositeConfigurationCreatedTextFile1.txt                                   
-a---        2014-03-04     23:51         15 CompositeConfigurationCreatedTextFile2.txt    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerShell DSC 复合资源 的相关文章

随机推荐

  • 如何使用内联 HTML onclick 和 jQuery 获取单击的元素?

    我正在使用以下代码创建标签 td id append p a href img src erp proposta media images delete png alt Excluir arquivo a file p 独家Arquivo功
  • 将矩阵数组绑定到 WPF DataGrid

    我有 3 个这样的字符串数组 public string RowHeaders get return new RowHeader1 RowHeader2 RowHeader3 RowHeader4 public string ColumnH
  • 为什么我在尝试使用 pytube 下载 YouTube 视频时收到 HTTP 错误 410?

    我想用 Python 下载 YouTube 视频 我用Python尝试过opencv 但总是有问题 我正在尝试使用 pytube3 和 Python 3 我尝试了这个程序 我在堆栈溢出 from pytube import YouTube
  • Pygame只检测鼠标事件,不检测KEYDOWN事件

    我编写了以下简单的程序 它应该打印出检测到的所有事件pygame event get import pygame sys from pygame locals import display pygame display set mode 3
  • mysqli 准备好的语句不会转义哪些字符?

    我正在尝试强化我的一些 PHP 代码并使用 mysqli 准备好的语句来更好地验证用户输入并防止注入攻击 我放弃了 mysqli real escape string因为它不会转义 和 然而 当我将查询创建为 mysqli 准备好的语句时
  • 我不确定什么是不正确的

    我正在创建一个小型 Java Jpanel 游戏 其中我应该有一个通过箭头上下移动并通过空间发射的火箭 发射方法应该像这样工作 按下空格键 物体发射并在屏幕上移动 然后当它击中某个 x 时 它就会消失 此外 你只能开火一次 直到另一颗子弹消
  • 为什么同一范围内可以进行多个可变借用?

    我编写了这段代码 多次借用可变变量并且编译时没有任何错误 但是根据Rust 编程语言这不应该编译 fn main let mut s String from hello println s test three mut s println
  • 读取生成线程内的不可变值

    我正在努力让这个例子发挥作用 use std sync mpsc Sender Receiver use std sync mpsc use std thread use std sync Arc struct User reference
  • 多个 GZip 文件的快速串联

    我有 gzip 文件列表 file1 gz file2 gz file3 gz 有没有一种方法可以将这些文件连接或 gzip 到一个 gzip 文件中无需解压 them 在实践中 我们将在网络数据库 CGI 中使用它 网络将在哪里接收 来自
  • 从 VB.Net 中的数据表填充组合框的最快方法

    以下代码中的数据表填充了 7500 条记录 这一切都可以从服务器快速加载 问题在于循环数据行以将它们添加到组合框需要一段时间 是否有任何其他方法来设置组合框的数据源或加快此过程的方法 Dim dtColours As New DataTab
  • 如何使用 XSLT1 按标签折叠一组选定的(相邻)标签?

    我有一组必须包含在新元素中的顺序节点 例子
  • 如何在 Firefox 中启用 ActiveX 控件?

    我有一个使用 ActiveX 控件的应用程序 我想使用 Selenium IDE 自动执行此操作 但是当我启动应用程序时 我最终收到一条错误消息 打开 ActiveX 控件 有什么办法可以在 FireFox 中启用 ActiveX 吗 注意
  • 在图中寻找桥梁 C++ (BOOST)?

    我正在阅读 BOOST 库 注意到他们没有一种算法可以在图中找到桥梁 但他们确实有一个可以找到连接点的算法 无论如何 这可以有效地完成吗 我有个主意 1 使用 BOOST 寻找关节点 2 使用out edges 找到连接每个关节点的所有边
  • Stripe 禁用按比例分配

    我的 Stripe 订阅中有两个计划 第一个计划是每月 10 欧元的计划 直到特定日期为止 例如它于 2021 年 10 月 2 日开始 我希望它于 2021 年 7 月 15 日结束 我希望订阅者每月始终支付 10 欧元 即使是最后一个月
  • 如何在默认打印机上打印测试页?

    如何在默认打印机上打印测试页 使用 C Winform 代码 提前致谢 要生成内置 Windows 测试页 您还可以对 PrintUI dll 使用 p invoke 这是一个简单的类 可以让您执行此操作 public static cla
  • 使用命令行克隆 git 存储库成功,但使用 git GUI 客户端(例如 SourceTree)克隆失败

    我已经设置了一个gitMac OS X 10 7 系统上的用户 在 git 用户 root 中 我创建了一个repositories文件夹并初始化了一个名为的裸 git 存储库test 到目前为止 一切都很好 现在 我从与 Mac 位于同一
  • 如何停止在 Spring 中覆盖 bean

    我注意到 如果您在两个 xml 文件中定义具有相同 id 的 bean 它将在第二个文件中被覆盖 Say in file a xml i have
  • 何时在 Activity 中调用 findViewById

    我遇到以下问题 我有以下几行代码 Spinner domainSpinner Spinner findViewById R id domain domainSpinner setVisibility View VISIBLE 这些在用户单击
  • 如何将图标添加到WPF应用程序桌面快捷方式?

    请注意 我问的是桌面图标 而不是窗口图标 该图标显示在应用程序窗口上 这可以 但是当我运行安装程序来安装应用程序时 桌面快捷方式只有一个默认图标 如何将桌面图标与同一应用程序图标关联 当应用程序运行时 任务栏上的图标是正确的图标 我还将 i
  • PowerShell DSC 复合资源

    我已成功创建 DSC 配置并将其部署到服务器上 下一步 我尝试将服务器中常见的配置块部分分解为可重用的部分 或者用 DSC 的说法是 复合资源 经过大量研究后 我仍然无法使用复合资源 运行 Get DSCResource 时它们没有列出 查