是否可以懒惰地评估Windows PowerShell所需状态配置中的功能?

时间:2014-12-29 20:48:25

标签: powershell dsc

在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功能未被定义为"现在",而另一个"现在"特征

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

1 个答案:

答案 0 :(得分:2)

是和否。

首先,我想指出DependsOn告诉DSC哪些订单做事情,并且就DSC理解而言。它只是让您决定需要在一个或多个其他资源之后执行某些资源。

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

我不确定"存储库"是什么意思?除非您只是想让它出现在Configuration {}区块以供将来参考或使用。

我的意思是"其他代码"是你可以控制从这个脚本生成配置时使用哪些资源。

稍微退一步,你所拥有的代码块有一个配置 script ,你必须执行它才能生成一个MOF文件,这将是应用于节点的实际内容。 / p>

该脚本实际上是powershell,因此您可以应用您的逻辑来确定在该点(当生成MOF时)应用的内容。这种情况发生在生成MOF的机器的上下文中,而不是在目标节点上,因此您无法在配置应用程序时使用任何需要在目标上运行代码的逻辑。

DSC通过使用-ConfigurationData参数以及$AllNodes$Node等自动变量,提供了一些内置功能。<​​/ p>

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

我认为最重要的要点是:

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

看看这些: