Paraméterek hozzáadása konfigurációkhoz

A Functionshöz hasonlóan a konfigurációk is paraméterezhetők, hogy dinamikusabb konfigurációkat engedélyezzenek a felhasználói bevitel alapján. A lépések hasonlóak a Functions with Parameters (Paraméterekkel rendelkező függvények) című cikkben leírt lépésekhez.

Ez a példa egy alapszintű konfigurációval kezdődik, amely úgy konfigurálja a "Spooler" szolgáltatást, hogy "Fut".

Configuration TestConfig
{
    # It is best practice to explicitly import any required resources or modules.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration

    Node localhost
    {
        Service 'Spooler'
        {
            Name = 'Spooler'
            State = 'Running'
        }
    }
}

Beépített konfigurációs paraméterek

A függvényekkel ellentétben azonban a CmdletBinding attribútum nem ad hozzá funkciót. A gyakori paraméterek mellett a konfigurációk a következő beépített paramétereket is használhatják anélkül, hogy meg kellene adnia őket.

Paraméter Leírás
-InstanceName Összetett konfigurációk definiálásához használatos
-DependsOn Összetett konfigurációk definiálásához használatos
-PSDSCRunAsCredential Összetett konfigurációk definiálásához használatos
-ConfigurationData Strukturált konfigurációs adatok átadására szolgál a konfigurációban való használathoz.
-OutputPath Itt adhatja meg, hogy a "<computername.mof>" fájl hol lesz lefordítva

Saját paraméterek hozzáadása a konfigurációkhoz

A beépített paraméterek mellett saját paramétereket is hozzáadhat a konfigurációkhoz. A paraméterblokk közvetlenül a konfigurációs deklaráción belülre kerül, ugyanúgy, mint egy függvény. A konfigurációs paraméterblokknak minden csomópont-deklaráción kívül kell lennie, és minden importálási utasítás felett kell lennie. Paraméterek hozzáadásával robusztusabbá és dinamikusabbá teheti a konfigurációkat.

Configuration TestConfig
{
    param
    (

    )

ComputerName paraméter hozzáadása

Az első paraméter, amelyet felvehet, egy -Computername paraméter, így dinamikusan lefordíthat egy ".mof" fájlt a konfigurációnak átadott fájlokhoz -Computername . A Függvényekhez hasonlóan megadhat egy alapértelmezett értéket is, ha a felhasználó nem ad át értéket a következőhöz: -ComputerName

param
(
    [String]
    $ComputerName="localhost"
)

A konfiguráción belül megadhatja a paramétert -ComputerName a csomópontblokk definiálásakor.

Node $ComputerName
{

}

A konfiguráció meghívása paraméterekkel

Miután hozzáadta a paramétereket a konfigurációhoz, ugyanúgy használhatja őket, mint egy parancsmaggal.

TestConfig -ComputerName "server01"

Több .mof fájl fordítása

A Csomópont blokk a számítógépnevek vesszővel tagolt listáját is elfogadhatja, és mindegyikhez létrehoz ".mof" fájlokat. Az alábbi példában ".mof" fájlokat hozhat létre a paraméternek átadott összes számítógéphez -ComputerName .

Configuration TestConfig
{
    param
    (
        [String[]]
        $ComputerName="localhost"
    )

    # It is best practice to explicitly import any required resources or modules.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration

    Node $ComputerName
    {
        Service 'Spooler'
        {
            Name = 'Spooler'
            State = 'Running'
        }
    }
}

TestConfig -ComputerName "server01", "server02", "server03"

Speciális paraméterek a konfigurációkban

A paraméter mellett -ComputerName paramétereket is hozzáadhatunk a szolgáltatás nevéhez és állapotához. Az alábbi példa egy paraméterblokkot ad hozzá egy -ServiceName paraméterhez, és a használatával dinamikusan definiálja a Szolgáltatás erőforrásblokkot. Emellett hozzáad egy paramétert -State , amely dinamikusan definiálja az állapotot a Szolgáltatás erőforrásblokkban.

Configuration TestConfig
{
    param
    (
        [String]
        $ServiceName,

        [String]
        $State,

        [String]
        $ComputerName="localhost"
    )

    # It is best practice to explicitly import any required resources or modules.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration

    Node $ComputerName
    {
        Service $ServiceName
        {
            Name = $ServiceName
            State = $State
        }
    }
}

Megjegyzés

A fejlettebb forgatókönyvekben célszerűbb lehet a dinamikus adatokat strukturált konfigurációs adatokba áthelyezni.

A példakonfiguráció most dinamikus $ServiceName, de ha nincs megadva, a fordítás hibát eredményez. Ehhez a példához hasonló alapértelmezett értéket adhat hozzá.

[String]
$ServiceName="Spooler"

Ebben a példában azonban célszerűbb a felhasználót arra kényszeríteni, hogy adjon meg egy értéket a $ServiceName paraméterhez. Az parameter attribútum lehetővé teszi további ellenőrzés és folyamattámogatás hozzáadását a konfiguráció paramétereihez.

Minden paraméterdeklaráció felett adja hozzá az parameter attribútumblokkot az alábbi példához hasonlóan.

[parameter()]
[String]
$ServiceName

A definiált paraméter jellemzőinek szabályozásához minden parameter attribútumhoz megadhat argumentumokat. Az alábbi példa kötelező$ServiceName paramétert ad meg.

[parameter(Mandatory)]
[String]
$ServiceName

$State A paraméter esetében szeretnénk megakadályozni, hogy a felhasználó előre definiált készleten kívüli értékeket adjon meg (például Futtatás, Leállítva). Az ValidationSet*attribútum megakadályozza, hogy a felhasználó előre definiált készleten kívüli értékeket adjon meg (például Futtatás, Leállítva). Az alábbi példa hozzáadja az ValidationSet attribútumot a $State paraméterhez. Mivel nem szeretnénk kötelezővé tenni a $State paramétert, hozzá kell adnunk hozzá egy alapértelmezett értéket.

[ValidateSet("Running", "Stopped")]
[String]
$State="Running"

Megjegyzés

Attribútum használata esetén nem kell attribútumot parametervalidation megadnia.

További információt a about_Functions_Advanced_Parameters és az parameter érvényesítési attribútumokról olvashat.

Teljes paraméteres konfiguráció

Most már rendelkezünk egy paraméteres konfigurációval, amely kényszeríti a felhasználót, hogy adjon meg egy -InstanceName, -ServiceName, és érvényesítse a paramétert -State .

Configuration TestConfig
{
    param
    (
        [parameter(Mandatory)]
        [String]
        $ServiceName,

        [ValidateSet("Running","Stopped")]
        [String]
        $State="Running",

        [String]
        $ComputerName="localhost"
    )

    # It is best practice to explicitly import any required resources or modules.
    Import-DSCResource -ModuleName PSDesiredStateConfiguration

    Node $ComputerName
    {
        Service $ServiceName
        {
            Name = $ServiceName
            State = $State
        }
    }
}

Lásd még