Előfordulhat, hogy egy alkalmazott konfigurációt később vissza akarunk vonni. Önmagában az nem elég, hogy a MOF fájlt eltávolítjuk, mert ettől még a változtatások ottmaradnak a gépen, hanem ellentétes értelmű konfigurációt kell alkalmazni. Ehhez az összes erőforrás
Ensure = 'Present'
részt módosítani kellene
Ensure = 'Absent'
-re.
Ez elég nehézkes művelet, főleg ha sok erőforrásunk van a konfigurációban, így érdemes lehet paramétert alkalmazni erre, így sokkal könnyebb változtatni a paraméter segítségével a konfiguráción. Ebben a verzióban szeretnénk még megszabadulni attól a figyelmeztetéstől, amit a 3.3.3 A konfiguráció futtatása, a MOF fájl tartalma fejezetben láttunk:
WARNING: The configuration 'FajlRegLegyenOtt' 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.
Ez a figyelmeztetés arról szól, hogy ugyan most már PowerShell 3.0 óta van u.n. module autoload, azaz a standard helyeken található modulokat PowerShell megtalálja, de azért jobb a békesség, inkább explicit importáljuk az erőforrás-definiciókat tartalmazó modulokat.
Mindezzel kiegészítve a konfigurációnk így néz ki:
configuration FajlRegLegyenOtt {
param(
[switch] $rollback
)
Import-DscResource –ModuleName ’PSDesiredStateConfiguration’
if($rollback){
$ensure = 'Absent'
}
else{
$ensure = 'Present'
}
Node localhost {
File Fájl {
Ensure = $ensure
Type = 'File'
SourcePath = 'C:\PowerShell\Default.txt'
DestinationPath = 'c:\FolderByDSC\Default.txt'
MatchSource = $true
}
Registry Reg {
Key = "HKLM:\SOFTWARE\SoosTibor"
ValueName = "AzEnErtekem"
Ensure = $ensure
ValueData = "DSC-vel létrehozva"
ValueType = "String"
}
}
}
Látható, hogy a függvényekhez teljesen hasonló módon paramétereket lehet definiálni a konfigurációkban, amelyek értékeit felhasználhatjuk az erőforrások tulajdonságainak beállításánál. A példámban a -rollback kapcsoló értékétől függően egy $ensure változó értékét állítom be vagy ’Present’-re vagy ’Absent’-re és ezt a $ensure változót használom az erőforrás Ensure tulajdonságának beállítására.
Természetesen ilyenkor a konfiguráció futtatásakor is használhatom ezt a -rollback paramétert:
PS C:\> FajlRegLegyenOtt -OutputPath C:\PowerShell -rollback
Directory: C:\PowerShell
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2015.10.31. 18:44 2912 localhost.mof
Ha pedig ezzel a paraméterrel hajtom végre a konfigurációt látható, hogy a korábban létrehozott fájl és registry bejegyzés törlődött:
PS C:\> Start-DscConfiguration -Path C:\PowerShell -Wait -Verbose
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters,
''methodName' = SendConfigurationApply,'className' =
MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer STLENO with user sid
S-1-5-21-2156952311-2926033462-1066486086-1000.
VERBOSE: [STLENO]: LCM: [ Start Set ]
VERBOSE: [STLENO]: LCM: [ Start Resource ] [[File]Fájl]
VERBOSE: [STLENO]: LCM: [ Start Test ] [[File]Fájl]
VERBOSE: [STLENO]: LCM: [ End Test ] [[File]Fájl] in 0.0070 seconds.
VERBOSE: [STLENO]: LCM: [ Start Set ] [[File]Fájl]
VERBOSE: [STLENO]: [[File]Fájl]
c:\FolderByDSC\Default.txt was successfully deleted.
VERBOSE: [STLENO]: LCM: [ End Set ] [[File]Fájl] in 0.0020 seconds.
VERBOSE: [STLENO]: LCM: [ End Resource ] [[File]Fájl]
VERBOSE: [STLENO]: LCM: [ Start Resource ] [[Registry]Reg]
VERBOSE: [STLENO]: LCM: [ Start Test ] [[Registry]Reg]
VERBOSE: [STLENO]: [[Registry]Reg] Found registry
key value 'HKLM:\SOFTWARE\SoosTibor\AzEnErtekem' with type 'String' and data
'DSC-vel létrehozva'
VERBOSE: [STLENO]: LCM: [ End Test ] [[Registry]Reg] in 0.2450
seconds.
VERBOSE: [STLENO]: LCM: [ Start Set ] [[Registry]Reg]
VERBOSE: [STLENO]: [[Registry]Reg] (REMOVAL)
Registry key value 'HKLM:\SOFTWARE\SoosTibor\AzEnErtekem' removed
VERBOSE: [STLENO]: LCM: [ End Set ] [[Registry]Reg] in 0.0700
seconds.
VERBOSE: [STLENO]: LCM: [ End Resource ] [[Registry]Reg]
VERBOSE: [STLENO]: LCM: [ End Set ]
VERBOSE: [STLENO]: LCM: [ End Set ] in 0.7540 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 0.834 seconds
Ezzel tehát nagyon egyszerűen lehet ki és bekapcsolni a konfigurációkat. De vajon teljes volt a takarítás?
PS C:\> dir c:\folder*
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2015.10.31. 18:44 FolderByDSC
PS C:\> dir C:\FolderByDSC\
PS C:\>
PS C:\> dir HKLM:\SOFTWARE\SoosTibo*
Hive: HKEY_LOCAL_MACHINE\SOFTWARE
Name Property
---- --------
SoosTibor
Látható, hogy a fájl és a registry érték nincs ott, de maga a mappa és a registry kulcs ottmaradt, azaz nem tökéletes a takarítás. Ha ez nekünk nem jó, akkor például kettébonthatjuk mindkét erőforrást, hogy legyen része a konfigurációnak explicit módon a könyvtár és a registry kulcs létrehozása, majd egy újabb elemként hozzuk benne létre a fájlt, illetve a registry értéket.