Egy konfiguráción belül ugyanazt a Node nevet többszöt is használhatjuk, ilyenkor az adott gépre vonatkozó eredő MOF fájlban minden, az adott gépre vonatkozó erőforrás szerepelni fog. Az alábbi példát nézve:
configuration FajlRegLegyenOtt {
Node ("localhost", "valami") {
Registry Reg {
Key = "HKLM:\SOFTWARE\SoosTibor"
ValueName = "AzEnErtekem"
Ensure = 'Present'
ValueData = "DSC-vel létrehozva"
ValueType = "String"
}
}
Node localhost {
File Fájl {
Ensure = 'Present'
Type = 'File'
SourcePath = 'C:\PowerShell\Default.txt'
DestinationPath = 'c:\FolderByDSC\Default.txt'
MatchSource = $true
}
}
}
A localhost.mof-ban a Reg és a Fájl erőforrás is szerepel, míg a valami.mof-ban csak a Reg.
Viszont ne próbáljuk meg átverni a DSC-t olyan trükkökkel, hogy ugyanarra a géppel több néven hivatkozunk:
configuration FajlRegLegyenOtt {
Node stleno {
Registry Reg {
Key = "HKLM:\SOFTWARE\SoosTibor"
ValueName = "AzEnErtekem"
Ensure = 'Present'
ValueData = "DSC-vel létrehozva"
ValueType = "String"
}
}
Node localhost {
File Fájl {
Ensure = 'Present'
Type = 'File'
SourcePath = 'C:\PowerShell\Default.txt'
DestinationPath = 'c:\FolderByDSC\Default.txt'
MatchSource = $true
}
}
}
A fenti konfigurációban egyszer a gép „igazi” nevével (STLENO), egyszer meg az általános localhost-tal hivatkoztam. Ha legenerálom a MOF fájlokat, majd végrehajtatom a konfigurációt, a következő kimenetet és hibajelzést kapom (az elejét kicsit megkurtítottam):
PS C:\WINDOWS\system32> Start-DscConfiguration -Path C:\PowerShell\MOF\ -Wait -
Verbose -Force
…
VERBOSE: [STLENO]: LCM: [ End Set ]
VERBOSE: An LCM method call arrived from computer STLENO with user sid
S-1-5-21-2156952311-2926033462-1066486086-1000.
The current configuration was cancelled.
+ CategoryInfo : NotSpecified: (root/Microsoft/...gurationManage
r:String) [], CimException
+ FullyQualifiedErrorId : MI RESULT 1
+ PSComputerName : stleno
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: [STLENO]: LCM: [ Start Set ]
VERBOSE: [STLENO]: LCM: [ Start Resource ] [[File]Fájl]
VERBOSE: [STLENO]: LCM: [ Start Test ] [[File]Fájl]
VERBOSE: [STLENO]: [[File]Fájl] Building file list
without using cache.
VERBOSE: [STLENO]: [[File]Fájl] The destination
object was found and no action is required.
VERBOSE: [STLENO]: LCM: [ End Test ] [[File]Fájl] in 0.0080 seconds.
VERBOSE: [STLENO]: LCM: [ Skip Set ] [[File]Fájl]
VERBOSE: [STLENO]: LCM: [ End Resource ] [[File]Fájl]
VERBOSE: [STLENO]: LCM: [ End Set ]
VERBOSE: [STLENO]: LCM: [ End Set ] in 0.0200 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 0.465 seconds
Azaz a két MOF párhuzamosan hajtódik végre, de a később elindított leállítja az első futtatását, azaz végeredményben csak az egyik hajtodótt végre, az én példámban csak a Fájl erőforrás.
Korábban említettem, hogy a konfigurációk nagyon hasonlítanak a függvényekhez. Olyannyira, hogy változókat is definiálhatunk bennük, amelyek a MOF generálásakor behelyettesítődnek és így dinamikosan a MOF fájl(ok) sokkal rugalmasabban hozhatók létre. Például, ha nem szeretném fixen „bedrótozni” a gépneveket, akkor ezeket paraméterként is átadhatom:
configuration RegLegyenOtt {
param(
[string[]] $computer
)
Node $computer {
Registry Reg {
Key = "HKLM:\SOFTWARE\SoosTibor"
ValueName = "AzEnErtekem"
Ensure = 'Present'
ValueData = "DSC-vel létrehozva: $computer"
ValueType = "String"
}
}
}
Ezt futtatva a paraméterértékeknek megfelelő MOF fájlok jöttek létre:
PS C:\> RegLegyenOtt -computer STLENO, ketto, harom -OutputPath C:\PowerShell\M
OF
WARNING: The configuration 'RegLegyenOtt' is loading one or more built-in
resources without explicitly importing associated modules. Add
Import-DscResource -ModuleName 'PSDesiredStateConfiguration' to your
configuration to avoid this message.
Directory: C:\PowerShell\MOF
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2015.12.05. 17:57 2080 STLENO.mof
-a---- 2015.12.05. 17:57 2078 ketto.mof
-a---- 2015.12.05. 17:57 2078 harom.mof