Scheiden van gegevens en de omgevingSeparating configuration and environment data

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0Applies To: Windows PowerShell 4.0, Windows PowerShell 5.0

Dit kan nuttig zijn voor het scheiden van de gegevens die worden gebruikt in een DSC-configuratie van de configuratie zelf met behulp van de configuratiegegevens zijn.It can be useful to separate the data used in a DSC configuration from the configuration itself by using configuration data. Op deze manier kunt u een eenmalige configuratie voor meerdere omgevingen.By doing this, you can use a single configuration for multiple environments.

Bijvoorbeeld, als u een toepassing ontwikkelt, kunt u één configuratie gebruiken voor ontwikkel- en productie-omgevingen en configuratiegegevens gebruiken om op te geven gegevens voor elke omgeving.For example, if you are developing an application, you can use one configuration for both development and production environments, and use configuration data to specify data for each environment.

Wat is configuratiegegevens?What is configuration data?

Configuratiegegevens zijn gegevens die is gedefinieerd in een hashtabel en doorgegeven aan een DSC-configuratie wanneer u deze configuratie compileren.Configuration data is data that is defined in a hashtable and passed to a DSC configuration when you compile that configuration.

Voor een gedetailleerde beschrijving van de ConfigurationData hashtabel, Zie configuratiegegevens met.For a detailed description of the ConfigurationData hashtable, see Using configuration data.

Een eenvoudig voorbeeldA simple example

Bekijk een voorbeeld van een zeer eenvoudig om te zien hoe dit werkt.Let's look at a very simple example to see how this works. Een configuratie voor één dat ervoor dat zorgt u maakt IIS aanwezig is op sommige knooppunten en dat Hyper-V aanwezig is op andere:We'll create a single configuration that ensures that IIS is present on some nodes, and that Hyper-V is present on others:

Configuration MyDscConfiguration {

    Node $AllNodes.Where{$_.Role -eq "WebServer"}.NodeName
    {
        WindowsFeature IISInstall {
            Ensure = 'Present'
            Name   = 'Web-Server'
        }

    }
    Node $AllNodes.Where{$_.Role -eq "VMHost"}.NodeName
    {
        WindowsFeature HyperVInstall {
            Ensure = 'Present'
            Name   = 'Hyper-V'
        }
    }
}

$MyData = 
@{
    AllNodes =
    @(
        @{
            NodeName    = 'VM-1'
            Role = 'WebServer'
        },

        @{
            NodeName    = 'VM-2'
            Role = 'VMHost'
        }
    )
}

MyDscConfiguration -ConfigurationData $MyData

De laatste regel in dit script wordt de configuratie, doorgeven gecompileerd $MyData als de waarde ConfigurationData parameter.The last line in this script compiles the configuration, passing $MyData as the value ConfigurationData parameter.

Het resultaat is dat twee MOF-bestanden worden gemaakt:The result is that two MOF files are created:

    Directory: C:\DscTests\MyDscConfiguration


Mode                LastWriteTime         Length Name                                                                                                                    
----                -------------         ------ ----                                                                                                                    
-a----        3/31/2017   5:09 PM           1968 VM-1.mof                                                                                                                
-a----        3/31/2017   5:09 PM           1970 VM-2.mof  

$MyDataHiermee geeft u twee verschillende knooppunten, elk met een eigen NodeName en Role.$MyData specifies two different nodes, each with its own NodeName and Role. De configuratie maakt dynamisch knooppunt blokken door middel van de verzameling van knooppunten van krijgt $MyData (in het bijzonder $AllNodes) en filtert deze verzameling op basis van de Role eigenschap...The configuration dynamically creates Node blocks by taking the collection of nodes it gets from $MyData (specifically, $AllNodes) and filters that collection against the Role property..

Met behulp van de configuratiegegevens voor het definiëren van ontwikkeling en productie-omgevingenUsing configuration data to define development and production environments

Bekijk een voorbeeld van een volledige die gebruikmaakt van een configuratie voor één ontwikkel- en productie-omgevingen van een website instellen.Let's look at a complete example that uses a single configuration to set up both development and production environments of a website. In de ontwikkelomgeving, worden zowel IIS en SQL Server geïnstalleerd op een afzonderlijke knooppunten.In the development environment, both IIS and SQL Server are installed on a single nodes. In de productieomgeving, zijn IIS en SQL Server geïnstalleerd op afzonderlijke knooppunten.In the production environment, IIS and SQL Server are installed on separate nodes. We gebruiken een bestand met configuratiegegevens .psd1 om op te geven van de gegevens voor de twee verschillende omgevingen.We'll use a configuration data .psd1 file to specify the data for the two different environments.

Bestand met configuratiegegevensConfiguration data file

Definiëren we de ontwikkeling en productie-omgevingsgegevens in een bestand namd DevProdEnvData.psd1 als volgt:We'll define the development and production environment data in a file namd DevProdEnvData.psd1 as follows:

@{

    AllNodes = @(

        @{
            NodeName        = "*"
            SQLServerName   = "MySQLServer"
            SqlSource       = "C:\Software\Sql"
            DotNetSrc       = "C:\Software\sxs"
        WebSiteName     = "New website"
        },

        @{
            NodeName        = "Prod-SQL"
            Role            = "MSSQL"
        },

        @{
            NodeName        = "Prod-IIS"
            Role            = "Web"
            SiteContents    = "C:\Website\Prod\SiteContents\"
            SitePath        = "\\Prod-IIS\Website\"
        },

        @{
            NodeName         = "Dev"
            Role             = "MSSQL", "Web"
            SiteContents     = "C:\Website\Dev\SiteContents\"
            SitePath         = "\\Dev\Website\"
        }
    )
}

Script-configuratiebestandConfiguration script file

Nu in de configuratie die is gedefinieerd in een .ps1 -bestand filteren we de knooppunten die is gedefinieerd in DevProdEnvData.psd1 door hun rol (MSSQL, Dev, of beide), en ze dienovereenkomstig configureren.Now, in the configuration, which is defined in a .ps1 file, we filter the nodes we defined in DevProdEnvData.psd1 by their role (MSSQL, Dev, or both), and configure them accordingly. De ontwikkelomgeving heeft de SQL Server- en IIS op één knooppunt, terwijl de productie-omgeving ze op twee verschillende knooppunten heeft.The development environment has both the SQL Server and IIS on one node, while the production environment has them on two different nodes. De site-inhoud is ook verschillend zijn, zoals opgegeven door de SiteContents eigenschappen.The site contents is also different, as specified by the SiteContents properties.

Aan het einde van het configuratiescript noemen we de configuratie (gecompileerd deze naar een MOF-document), waarbij DevProdEnvData.psd1 als de $ConfigurationData parameter.At the end of the configuration script, we call the configuration (compile it into a MOF document), passing DevProdEnvData.psd1 as the $ConfigurationData parameter.

Opmerking: voor deze configuratie zijn de modules xSqlPs en xWebAdministration worden geïnstalleerd op het doelknooppunt.Note: This configuration requires the modules xSqlPs and xWebAdministration to be installed on the target node.

Stel de configuratie wordt gedefinieerd in een bestand met de naam MyWebApp.ps1:Let's define the configuration in a file named MyWebApp.ps1:

Configuration MyWebApp
{
    Import-DscResource -Module PSDesiredStateConfiguration
    Import-DscResource -Module xSqlPs
    Import-DscResource -Module xWebAdministration

    Node $AllNodes.Where{$_.Role -contains "MSSQL"}.Nodename
   {
        # Install prerequisites
        WindowsFeature installdotNet35
        {            
            Ensure      = "Present"
            Name        = "Net-Framework-Core"
            Source      = "c:\software\sxs"
        }

        # Install SQL Server
        xSqlServerInstall InstallSqlServer
        {
            InstanceName = $Node.SQLServerName
            SourcePath   = $Node.SqlSource
            Features     = "SQLEngine,SSMS"
            DependsOn    = "[WindowsFeature]installdotNet35"

        }
   }

   Node $AllNodes.Where{$_.Role -contains "Web"}.NodeName
   {
        # Install the IIS role
        WindowsFeature IIS
        {
            Ensure       = 'Present'
            Name         = 'Web-Server'
        }

        # Install the ASP .NET 4.5 role
        WindowsFeature AspNet45
        {
            Ensure       = 'Present'
            Name         = 'Web-Asp-Net45'

        }

        # Stop the default website
        xWebsite DefaultSite 
        {
            Ensure       = 'Present'
            Name         = 'Default Web Site'
            State        = 'Stopped'
            PhysicalPath = 'C:\inetpub\wwwroot'
            DependsOn    = '[WindowsFeature]IIS'

        }

        # Copy the website content
        File WebContent

        {
            Ensure          = 'Present'
            SourcePath      = $Node.SiteContents
            DestinationPath = $Node.SitePath
            Recurse         = $true
            Type            = 'Directory'
            DependsOn       = '[WindowsFeature]AspNet45'

        }       


        # Create the new Website

        xWebsite NewWebsite

        {

            Ensure          = 'Present'
            Name            = $Node.WebSiteName
            State           = 'Started'
            PhysicalPath    = $Node.SitePath
            DependsOn       = '[File]WebContent'
        }

    }

}

MyWebApp -ConfigurationData DevProdEnvData.psd1

Wanneer u deze configuratie uitvoert, drie MOF-bestanden worden gemaakt (één voor elk item in met de naam de AllNodes matrix):When you run this configuration, three MOF files are created (one for each named entry in the AllNodes array):

    Directory: C:\DscTests\MyWebApp


Mode                LastWriteTime         Length Name                                                                                                                    
----                -------------         ------ ----                                                                                                                    
-a----        3/31/2017   5:47 PM           2944 Prod-SQL.mof                                                                                                            
-a----        3/31/2017   5:47 PM           6994 Dev.mof                                                                                                                 
-a----        3/31/2017   5:47 PM           5338 Prod-IIS.mof

Met behulp van de gegevens niet-knooppuntUsing non-node data

U kunt aanvullende sleutels toevoegen de ConfigurationData hashtabel voor gegevens die niet specifiek zijn voor een knooppunt.You can add additional keys to the ConfigurationData hashtable for data that is not specific to a node. De volgende configuratie zorgt ervoor dat de aanwezigheid van twee websites.The following configuration ensures the presence of two websites. Gegevens voor elke website zijn gedefinieerd in de AllNodes matrix.Data for each website are defined in the AllNodes array. Het bestand Config.xml wordt gebruikt voor beide websites, zodat we Definieer dit in een extra sleutel met de naam NonNodeData.The file Config.xml is used for both websites, so we define it in an additional key with the name NonNodeData. Houd er rekening mee dat u net zoveel aanvullende sleutels als u wilt en u kunt deze de naam elke gewenste kan hebben.Note that you can have as many additional keys as you want, and you can name them anything you want. NonNodeDatais niet een gereserveerd woord is zojuist wat we besloten om de extra sleutel een naam.NonNodeData is not a reserved word, it is just what we decided to name the additional key.

U aanvullende sleutels openen met behulp van de speciale variabele $ConfigurationData.You access additional keys by using the special variable $ConfigurationData. In dit voorbeeld ConfigFileContents wordt geopend met de regel:In this example, ConfigFileContents is accessed with the line:

 Contents = $ConfigurationData.NonNodeData.ConfigFileContents

in de File resource blok.in the File resource block.

$MyData = 
@{
    AllNodes = 
    @(
        @{
            NodeName           = “*”
            LogPath            = “C:\Logs”
        },

        @{
            NodeName = “VM-1”
            SiteContents = “C:\Site1”
            SiteName = “Website1”
        },


        @{
            NodeName = “VM-2”;
            SiteContents = “C:\Site2”
            SiteName = “Website2”
        }
    );

    NonNodeData = 
    @{
        ConfigFileContents = (Get-Content C:\Template\Config.xml)
     }   
} 

configuration WebsiteConfig
{
    Import-DscResource -ModuleName xWebAdministration -Name MSFT_xWebsite

    node $AllNodes.NodeName
    {
        xWebsite Site
        {
            Name         = $Node.SiteName
            PhysicalPath = $Node.SiteContents
            Ensure       = “Present”
        }

        File ConfigFile
        {
            DestinationPath = $Node.SiteContents + “\\config.xml”
            Contents = $ConfigurationData.NonNodeData.ConfigFileContents
        }
    }
} 

Zie ookSee Also