Como posso manipular as bibliotecas do Windows 7 por meio da Diretiva de Grupo?

11

Estou tentando adicionar e remover locais da Biblioteca dos locais "Biblioteca" do Windows 7 para cada um dos meus usuários.

Embora seja fácil fazer isso na área de trabalho e fácil desativar as bibliotecas que aparecem no explorer, como posso adicionar ou remover locais de um local da biblioteca (por exemplo, remova c: \ users \ public \ documents da biblioteca de documentos do usuário)?

Não preciso 'bloquear' a lista de locais da biblioteca, fico feliz por adicionar e remover os próprios locais como desejarem, mas desejo controlar os locais iniciais que são oferecidos.

Rob Moir
fonte
Adicionamos esta pergunta e resposta para documentar algo que achei difícil de resolver, para que pudesse ajudar outras pessoas. Ainda estou muito interessado em ouvir sobre outros métodos, especialmente os mais fáceis, que perdi!
Rob Moir

Respostas:

11

As bibliotecas do Windows 7 são na verdade apenas arquivos XML, com algumas extensões de shell inteligentes que os gerenciam. Todos eles são chamados [Library_Name] .library-ms (por exemplo, Pictures.library-ms) e podem ser abertos em qualquer editor de texto, como o bloco de notas, arrastando e soltando.

Os arquivos podem ser publicados usando qualquer mecanismo normal - scripts, Preferências de Diretiva de Grupo etc.

Descobri algumas coisas que você deve saber:

  • O XML armazena informações sobre o usuário que está usando o arquivo de biblioteca

  • O Windows atualizará / substituirá automaticamente o XML quando você clicar duas vezes nele / manipulá-lo. Isso é especialmente problemático como administrador, em que o clique duplo tornará seu arquivo inutilizável para os usuários.

  • Se você tornar o arquivo somente leitura, isso fará com que a biblioteca pareça somente leitura, impedindo que os usuários salvem.

Após algumas tentativas e erros, desenvolvi alguns modelos "em branco" usando as Bibliotecas padrão que publicarei abaixo.

Você pode usar o seguinte guia de pastas conhecidas para personalizar novos locais padrão:

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

E eu achei as seguintes referências úteis sobre a arquitetura da biblioteca:

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

Essencialmente, porém, a maneira que achei melhor para experimentar foi simplesmente fazer alterações usando a GUI e examinar o que foi alterado.

Documentos

<?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>

Música

<?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>

As fotos

<?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>

Vídeos

<?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
fonte
2
Para aqueles que se perguntam onde estão armazenados, eles podem ser encontrados em #%APPDATA%\Microsoft\Windows\Libraries
Agent_9191 8/12/12
A atualização agradável seria uma maneira de apontar uma biblioteca para um compartilhamento de rede: \\server\%username%\documents, \\server\%username%\music, etc, enquanto ele vai trabalhar, não importa qual usuário efetuar login.
Joel Coel
7

O único método que encontrei é usar as extensões do Windows 7 Powershell para bibliotecas, disponíveis no codeplex aqui .

Isso pode ser usado em um script de logon (ele precisa ser executado para cada usuário, em seu contexto) e inclui métodos para adicionar e remover locais da biblioteca.

Código de amostra

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
fonte