Comment puis-je manipuler les bibliothèques Windows 7 via la stratégie de groupe?

11

J'essaie d'ajouter et de supprimer des emplacements de bibliothèque à partir des emplacements "Bibliothèque" de Windows 7 pour chacun de mes utilisateurs.

Bien qu'il soit facile de le faire depuis le bureau et qu'il soit facile de désactiver les bibliothèques apparaissant dans l'explorateur, comment puis-je ajouter ou supprimer des emplacements d'un emplacement de bibliothèque (par exemple, supprimer c: \ users \ public \ documents de la bibliothèque de documents de l'utilisateur)?

Je n'ai pas besoin de `` verrouiller '' leur liste d'emplacements de bibliothèque, je suis heureux qu'ils ajoutent et suppriment leurs propres emplacements comme ils le souhaitent, mais je veux contrôler les emplacements initiaux qui leur sont proposés.

Rob Moir
la source
Ajout de cette question et réponse pour documenter quelque chose que j'ai trouvé difficile à résoudre, afin qu'il puisse aider les autres. Je suis toujours très intéressé d'entendre parler d'autres méthodes, en particulier plus faciles, que j'ai ratées!
Rob Moir

Réponses:

11

Les bibliothèques Windows 7 ne sont en fait que des fichiers XML avec des extensions de shell intelligentes qui les gèrent. Ils sont tous appelés [Library_Name] .library-ms (par exemple Pictures.library-ms) et peuvent être ouverts dans n'importe quel éditeur de texte tel que le bloc-notes par glisser-déposer.

Les fichiers peuvent ensuite être publiés en utilisant n'importe quel mécanisme normal - scripts, préférences de stratégie de groupe, etc.

Il y a quelques choses que j'ai découvertes, que vous devez savoir:

  • Le XML stocke des informations sur l'utilisateur qui utilise le fichier de bibliothèque

  • Windows met automatiquement à jour / écrase le XML lorsque vous double-cliquez dessus / le manipulez. Ceci est particulièrement problématique en tant qu'administrateur où un double-clic rendra votre fichier inutilisable pour les utilisateurs

  • Si vous rendez le fichier en lecture seule, cela aura pour effet de faire apparaître la bibliothèque en lecture seule, empêchant ainsi les utilisateurs d'enregistrer.

Après quelques essais et erreurs, j'ai développé des modèles «vides» en utilisant les bibliothèques par défaut que je publierai ci-dessous.

Vous pouvez utiliser le guide des dossiers connus suivant pour personnaliser les nouveaux emplacements par défaut:

http://msdn.microsoft.com/en-us/library/bb882665.aspx

Et j'ai trouvé les éléments suivants comme des références utiles concernant l'architecture de la bibliothèque:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd798389(v=vs.85).aspx http://msdn.microsoft.com/en-us/magazine/dd861346.aspx

Essentiellement, cependant, la meilleure façon d'expérimenter était de simplement apporter des modifications à l'aide de l'interface graphique et d'examiner ce qui a changé.

Les documents

<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
  <name>@shell32.dll,-34575</name>
  <version>20</version>
  <isLibraryPinned>true</isLibraryPinned>
  <iconReference>imageres.dll,-1002</iconReference>
  <templateInfo>
    <folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
  </templateInfo>
  <propertyStore>
    <property name="HasModifiedLocations" type="boolean"><![CDATA[false]]></property>
  </propertyStore>
  <searchConnectorDescriptionList>
    <searchConnectorDescription publisher="Microsoft" product="Windows">
      <description>@shell32.dll,-34577</description>
      <isDefaultSaveLocation>true</isDefaultSaveLocation>
      <isDefaultNonOwnerSaveLocation>true</isDefaultNonOwnerSaveLocation>
      <isSupported>true</isSupported>
      <simpleLocation>
        <url>knownfolder:{FDD39AD0-238F-46AF-ADB4-6C85480369C7}</url>
      </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>

La musique

<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
  <name>@shell32.dll,-34584</name>
  <version>12</version>
  <isLibraryPinned>true</isLibraryPinned>
  <iconReference>imageres.dll,-1004</iconReference>
  <templateInfo>
    <folderType>{94d6ddcc-4a68-4175-a374-bd584a510b78}</folderType>
  </templateInfo>
  <propertyStore>
    <property name="HasModifiedLocations" type="boolean"><![CDATA[false]]></property>
  </propertyStore>
  <searchConnectorDescriptionList>
    <searchConnectorDescription publisher="Microsoft" product="Windows">
      <description>@shell32.dll,-34577</description>
      <isDefaultSaveLocation>true</isDefaultSaveLocation>
      <isDefaultNonOwnerSaveLocation>true</isDefaultNonOwnerSaveLocation>
      <isSupported>true</isSupported>
      <simpleLocation>
        <url>knownfolder:{4BD8D571-6D19-48D3-BE97-422220080E43}</url>
        </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>

Des photos

<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
  <name>@shell32.dll,-34595</name>
  <ownerSID></ownerSID>
  <version>6</version>
  <isLibraryPinned>true</isLibraryPinned>
  <iconReference>imageres.dll,-1003</iconReference>
  <templateInfo>
    <folderType>{b3690e58-e961-423b-b687-386ebfd83239}</folderType>
  </templateInfo>
  <propertyStore>
    <property name="HasModifiedLocations" type="boolean"><![CDATA[false]]></property>
  </propertyStore>
  <searchConnectorDescriptionList>
    <searchConnectorDescription publisher="Microsoft" product="Windows">
      <description>@shell32.dll,-34577</description>
      <isDefaultSaveLocation>true</isDefaultSaveLocation>
      <isDefaultNonOwnerSaveLocation>true</isDefaultNonOwnerSaveLocation>
      <isSupported>false</isSupported>
      <simpleLocation>
        <url>knownfolder:{33E28130-4E1E-4676-835A-98395C3BC3BB}</url>
      </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>

Vidéos

<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
  <name>@shell32.dll,-34620</name>
  <ownerSID></ownerSID>
  <version>4</version>
  <isLibraryPinned>true</isLibraryPinned>
  <iconReference>imageres.dll,-1005</iconReference>
  <templateInfo>
    <folderType>{5fa96407-7e77-483c-ac93-691d05850de8}</folderType>
  </templateInfo>
  <propertyStore>
    <property name="HasModifiedLocations" type="boolean"><![CDATA[false]]></property>
  </propertyStore>
  <searchConnectorDescriptionList>
    <searchConnectorDescription publisher="Microsoft" product="Windows">
      <description>@shell32.dll,-34577</description>
      <isDefaultSaveLocation>true</isDefaultSaveLocation>
      <isDefaultNonOwnerSaveLocation>true</isDefaultNonOwnerSaveLocation>
      <isSupported>false</isSupported>
      <simpleLocation>
        <url>knownfolder:{18989B1D-99B5-455B-841C-AB7C74E4DDFC}</url>
       </simpleLocation>
    </searchConnectorDescription>
  </searchConnectorDescriptionList>
</libraryDescription>
Dan
la source
2
Pour ceux qui se demandent où ils sont stockés, ils peuvent être trouvés sous%APPDATA%\Microsoft\Windows\Libraries
Agent_9191
Une mise à jour agréable serait un moyen de pointer une bibliothèque à un partage réseau: \\server\%username%\documents, \\server\%username%\music, etc, alors qu'il ne fonctionnera quel que soit utilisateur ouvre une session dans.
Joel Coel
7

La seule méthode que j'ai trouvée consiste à utiliser les extensions Windows 7 Powershell pour les bibliothèques, disponibles auprès de codeplex ici .

Cela peut être utilisé dans un script de connexion (il doit être exécuté pour chaque utilisateur, dans leur contexte), et il comprend des méthodes pour ajouter et supprimer des emplacements de bibliothèque.

Exemple de code

Import-Module "\\myserver\location\Windows7Library\Windows7Library.psm1"
# Before we can use the new commands from this module, it needs to be imported.

add-LibraryFolder -LibraryPath (Get-KnownFolder "VideosLibrary").path -FolderPath "\\borehamwood\dvds"
# add location to video library
#
Remove-LibraryFolder -LibraryPath (Get-KnownFolder "DocumentsLibrary").path -FolderPath "C:\users\Public\Documents"
Remove-LibraryFolder -LibraryPath (Get-KnownFolder "MusicLibrary").path -FolderPath "C:\users\Public\Music"
# remove locations from both the documents, and then the music library.
Rob Moir
la source