Använda konfigurationsdata i DSC

Gäller för: Windows PowerShell 4.0, Windows PowerShell 5.0

Med hjälp av den inbyggda DSC ConfigurationData-parametern kan du definiera data som kan användas i en konfiguration. På så sätt kan du skapa en enda konfiguration som kan användas för flera noder eller för olika miljöer. Om du till exempel utvecklar ett program kan du använda en konfiguration för både utvecklings- och produktionsmiljöer och använda konfigurationsdata för att ange data för varje miljö.

Det här avsnittet beskriver strukturen för ConfigurationData-hashtabellen. Exempel på hur du använder konfigurationsdata finns i Separera konfigurations- och miljödata.

Common-parametern ConfigurationData

En DSC-konfiguration tar en gemensam parameter, ConfigurationData, som du anger när du kompilerar konfigurationen. Information om hur du kompilerar konfigurationer finns i DSC-konfigurationer.

Parametern ConfigurationData är en hashtable som måste ha minst en nyckel med namnet AllNodes. Den kan också ha en eller flera andra nycklar.

Anteckning

Exemplen i det här avsnittet använder en enda ytterligare nyckel (förutom den namngivna AllNodes-nyckeln ) med namnet NonNodeData, men du kan inkludera valfritt antal ytterligare nycklar och namnge dem vad du vill.

$MyData =
@{
    AllNodes = @()
    NonNodeData = ""
}

Värdet för AllNodes-nyckeln är en matris. Varje element i den här matrisen är också en hash-tabell som måste ha minst en nyckel med namnet NodeName:

$MyData =
@{
    AllNodes =
    @(
        @{
            NodeName = "VM-1"
        },


        @{
            NodeName = "VM-2"
        },


        @{
            NodeName = "VM-3"
        }
    );

    NonNodeData = ""
}

Du kan också lägga till andra nycklar i varje hash-tabell:

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


        @{
            NodeName = "VM-2"
            Role     = "SQLServer"
        },


        @{
            NodeName = "VM-3"
            Role     = "WebServer"
        }
    );

    NonNodeData = ""
}

Om du vill tillämpa en egenskap på alla noder kan du skapa en medlem i AllNodes-matrisen som har NodeName*på . Om du till exempel vill ge varje nod en LogPath egenskap kan du göra följande:

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


        @{
            NodeName     = "VM-1"
            Role         = "WebServer"
            SiteContents = "C:\Site1"
            SiteName     = "Website1"
        },


        @{
            NodeName     = "VM-2"
            Role         = "SQLServer"
        },


        @{
            NodeName     = "VM-3"
            Role         = "WebServer"
            SiteContents = "C:\Site2"
            SiteName     = "Website3"
        }
    );
}

Detta motsvarar att lägga till en egenskap med ett namn på LogPath med värdet "C:\Logs" för i vart och ett av de andra blocken (VM-1, VM-2, och VM-3).

Definiera ConfigurationData-hashtabellen

Du kan definiera ConfigurationData antingen som en variabel i samma skriptfil som en konfiguration (som i våra tidigare exempel) eller i en separat .psd1 fil. Om du vill definiera ConfigurationData i en .psd1 fil skapar du en fil som endast innehåller hashtabellen som representerar konfigurationsdata.

Du kan till exempel skapa en fil med namnet MyData.psd1 med följande innehåll:

@{
    AllNodes =
    @(
        @{
            NodeName    = 'VM-1'
            FeatureName = 'Web-Server'
        },

        @{
            NodeName    = 'VM-2'
            FeatureName = 'Hyper-V'
        }
    )
}

Kompilera en konfiguration med konfigurationsdata

Om du vill kompilera en konfiguration som du har definierat konfigurationsdata för skickar du konfigurationsdata som värde för parametern ConfigurationData .

Då skapas en MOF-fil för varje post i AllNodes-matrisen . Varje MOF-fil namnges med NodeName egenskapen för motsvarande matrispost.

Om du till exempel definierar konfigurationsdata som i MyData.psd1 filen ovan skulle kompilering av en konfiguration skapa både VM-1.mofVM-2.mof och filer.

Kompilera en konfiguration med konfigurationsdata med hjälp av en variabel

Om du vill använda konfigurationsdata som definieras som en variabel i samma .ps1 fil som konfigurationen skickar du variabelnamnet som värdet för parametern ConfigurationData när du kompilerar konfigurationen:

MyDscConfiguration -ConfigurationData $MyData

Kompilera en konfiguration med konfigurationsdata med hjälp av en datafil

Om du vill använda konfigurationsdata som definieras i en .psd1-fil skickar du sökvägen och namnet på filen som värdet för parametern ConfigurationData när du kompilerar konfigurationen:

MyDscConfiguration -ConfigurationData .\MyData.psd1

Använda ConfigurationData-variabler i en konfiguration

DSC innehåller följande särskilda variabler som kan användas i ett konfigurationsskript:

  • $AllNodes refererar till hela samlingen noder som definierats i ConfigurationData. Du kan filtrera AllNodes-samlingen med hjälp av . Where() och . ForEach().
  • ConfigurationData refererar till hela hash-tabellen som skickas som parameter när en konfiguration kompileras.
  • MyTypeName innehåller konfigurationsnamnet som variabeln används i. I konfigurationen MyDscConfiguration$MyTypeName har till exempel värdet MyDscConfiguration.
  • Node refererar till en viss post i AllNodes-samlingen när den har filtrerats med hjälp av . Where() eller . ForEach().

Använda icke-noddata

Som vi har sett i tidigare exempel kan ConfigurationData-hashtabellen ha en eller flera nycklar utöver den nödvändiga AllNodes-nyckeln. I exemplen i det här avsnittet har vi bara använt en enda ytterligare nod och döpt den NonNodeDatatill . Du kan dock definiera valfritt antal ytterligare nycklar och namnge dem vad du vill.

Ett exempel på hur du använder icke-noddata finns i Separera konfigurations- och miljödata.

Se även