是否可以延迟评估Windows PowerShell所需状态配置中的功能



在Windows PowerShell所需状态配置中,可以定义功能:

Node $MachineName { 
    # define the IIS Role 
    WindowsFeature IIS { 
        Name = “Web-Server” 
    }
    # define the SQL Role 
    WindowsFeature SQL { 
        Name = “SQL-Server” 
    }
    # require ASP.NET 4.5 
    WindowsFeature ASP { 
        Ensure = “Present” 
        Name = “Web-Asp-Net45” 
        DependsOn = "[WindowsFeature]IIS"
    }
}

使用此设置,不仅可以安装ASP,还可以安装IISSQL功能。我能理解IIS功能,因为ASP取决于此。但SQL功能未定义为"呈现",并且另一个"呈现"功能不需要此功能。

是否可以定义这些基本功能(作为一种存储库)但只安装所需的功能?

是和否。

首先,我想指出的是,DependsOn告诉DSC哪个顺序做事,这大约是DSC的理解。它只是让您决定某些资源需要在一个或多个其他资源之后执行。

省略Ensure = 'Present',如果它有效,可能只是默认为'Present';没有办法将资源放在那里(没有额外的代码),它不会被执行。

我不确定您所说的"存储库"是什么意思,除非您只是想将其存在于Configuration {}块中以供将来参考或使用。

我所说的"附加代码"是指,当您从此脚本生成配置时,您可以控制使用哪些资源。

退后一步,您拥有的代码块有一个配置脚本,您必须执行该脚本才能生成 MOF 文件,然后该文件将是应用于节点的实际内容。

该脚本实际上是 powershell,因此你可以应用逻辑来应用此时(生成 MOF 时)应用的内容。但是,这发生在生成 MOF 的计算机上下文中,而不是在目标节点上,因此不能使用任何需要在配置应用程序时在目标上运行代码的逻辑。

DSC有一些内置的东西来促进这一点,通过使用-ConfigurationData参数和自动变量,如$AllNodes$Node

我想在这里放一些代码,而不仅仅是链接和解释,但你真的需要全面了解这些部分在何时何地组合在一起。

我认为最重要的要点是:

  • 你编写的配置(如代码块中所示)是 Powershell 代码,因此可以使用逻辑来确定将哪些资源应用于哪个节点。
  • 配置
  • 的执行通常在目标节点启动或配置之前目标节点的计算机上进行,因此请考虑执行上下文。
  • 看看-ConfigurationData在Microsoft的例子中的使用方式。

看看这些:

  • 分离配置和环境数据
  • 在PowerShell DSC中分离"什么"和"位置"
  • 所需状态配置中的自动变量

最新更新