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.