Windowsin järjestelmätiedostoja ei useinkaan pysty muuttamaan käsin - tai Puppetilla - ilman niiden suojaustason alentamista. Ongelma on siinä, että järjestelmätiedostojen omistaja on usein (pseudo)käyttäjä "TrustedInstaller", eikä edes administrator-tason käyttäjillä ole niihin kirjoitusoikeutta. Onneksi rajoitukset voi kiertää melko suoraviivaisesti käyttämällä takeown.exe -komentoa sekä puppetlabs/acl -moduulia. Alla on muokattu erästä Group Policyn XML-tiedostoa, jonka merkistökoodaus oli siinä määrin poikkeuksellinen, että sen lukeminen Rubyn reXML -kirjastolla ei onnistunut:
include ::acl
# Vaihda tiedoston omistaja
exec { 'takeown-Search.admx':
command => 'C:WindowsSystem32takeown.exe /f C:WindowsPolicyDefinitionsSearch.admx',
}
# Määritä uudet oikeudet
acl { 'Search.admx':
target => 'C:/Windows/PolicyDefinitions/Search.admx',
permissions => [
{ identity => 'Järjestelmänvalvojat', rights => ['full'] },
{ identity => 'SYSTEM', rights => ['full'] }
],
require => Exec['takeown-Search.admx'],
}
# Korvaa tiedosto
file { 'C:/Windows/PolicyDefinitions/Search.admx':
source => 'puppet:///modules/winpolicydefinitions/Search.admx',
require => Acl['Search.admx'],
}
Tästä prosessista kannattaisi muokata oma määritelty resurssinsa, tai jopa peräti oma tyyppinsä, mikäli sille löytyisi runsaasti käyttöä. Takeown-komentoon kannattaisi lisätä myös "unless"-parametri, jotta sitä ei ajeta turhaan joka kerta. Jos Execissä olisi "provider => 'powershell'", niin tarkistuksen voisi tehdä muutamin eri tavoin.



