Como encontrar e abrir versões anteriores de uma pasta programaticamente (usando PowerShell, WMI, etc)?

18

Estou executando o Windows 8 Enterprise x64. Quando abro \\localhost\c$como uma pasta de rede e, em seguida, usando um menu de contexto, abro a janela Propriedades de uma subpasta (por exemplo, \\localhost\c$\Deploycomo no exemplo abaixo), há a guia Versões Anteriores, onde posso ver uma lista das versões anteriores disponíveis da pasta, junto com os carimbos de data e hora correspondentes:

Guia Versões Anteriores


Se eu selecionar uma versão e clicar no botão Abrir , uma nova janela do Explorer será aberta, onde eu posso procurar a versão anterior selecionada da pasta:

Localização na guia Geral


A barra de endereço exibe um local em que um carimbo de data / hora (em formato legível por humanos) é anexado ao nome de cada pasta. Esse local, se copiado de lá, não pode ser usado diretamente como um caminho válido em outra janela do Explorer ou em uma ferramenta de linha de comando. Mas se eu abrir a janela Propriedades de um subfloder, ele exibirá um local da subpasta em um formato como \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy. Este formulário pode realmente ser usado no Explorer e na linha de comando:

C:\>dir \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy /s
 Volume in drive \\localhost\c$ is OSDisk
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy

04/11/2013  10:53 AM    <DIR>          .
04/11/2013  10:53 AM    <DIR>          ..
04/11/2013  10:53 AM    <DIR>          Tools
               0 File(s)              0 bytes

 Directory of \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy\Tools

04/11/2013  10:53 AM    <DIR>          .
04/11/2013  10:53 AM    <DIR>          ..
04/11/2013  10:53 AM    <DIR>          x64
               0 File(s)              0 bytes

 Directory of \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy\Tools\x64

04/11/2013  10:53 AM    <DIR>          .
04/11/2013  10:53 AM    <DIR>          ..
08/30/2012  06:10 PM           325,272 ▨▨▨▨▨▨▨▨.dll
               1 File(s)        325,272 bytes

     Total Files Listed:
               1 File(s)        325,272 bytes
               8 Dir(s)  70,546,321,408 bytes free

E no PowerShell também:

PS C:\> pushd \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy
PS Microsoft.PowerShell.Core\FileSystem::\\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy> ls -r


    Directory: \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         4/11/2013  10:53 AM            Tools


    Directory: \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy\Tools


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         4/11/2013  10:53 AM            x64


    Directory: \\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy\Tools\x64


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         8/30/2012   6:10 PM     325272 ▨▨▨▨▨▨▨▨.dll

Parece que a pasta com um nome mágico @GMT-2013.08.27-04.01.18(presumivelmente representando um carimbo de data / hora no fuso horário GMT) se comporta como se realmente tivesse saído de lá, exceto que você não pode descobrir sua existência usando o dircomando, a menos que já saiba seu nome. Todos os arquivos e pastas abaixo desta pasta são somente leitura: nada pode ser criado, excluído, renomeado ou alterado lá (incluindo atributos e permissões de arquivo / pasta). Se você é um administrador, mas não possui permissões para exibir determinados arquivos, não poderá alterar isso, a menos que primeiro consiga copiar uma pasta que contém para um local não somente leitura.

Pergunta: É possível obter a lista de versões de uma determinada pasta, como a mostrada na primeira captura de tela, e abrir uma delas em uma nova janela do Explorer programaticamente (usando PowerShell, WMI, WSH, BAT, API do Win32, etc. )? É possível obter a lista de pastas correspondentes com nomes mágicos, como @GMT-2013.08.27-04.01.18 programaticamente?

Vladimir Reshetnikov
fonte

Respostas:

12

O volrestutilitário, disponível nas Ferramentas do Windows Server 2003 Resource Kit , pode ser usado para listar as versões anteriores de uma pasta. Funcionou para mim no Windows 7 e ainda deve funcionar no Windows 8. Apenas tome cuidado com os parâmetros, pois ele também pode restaurar as versões anteriores.

Um exemplo de uso (no link abaixo):

C:\>volrest "\\test220\reports\Annual Reports 2004\doc.4.rtf"

VOLREST 1.1 - Previous Version command-line tool
(C) Copyright 2003 Microsoft Corp.

 Searching previous versions on \\test220\reports\annual report 2004\doc.4.rtf

07/01/2004  01:28 PM    37,786 \\test220\reports\@GMT-2004.07.01-18.34.35\annual 
                           report 2004\doc.4.rtf
07/01/2004  01:27 PM    37,740 \\test220\reports\@GMT-2004.07.01-18.28.02\annual 
                           report 2004\doc.4.rtf
07/01/2004  11:47 AM    37,690 \\test220\reports\@GMT-2004.07.01-18.24.41\annual 
                           report 2004\doc.4.rtf

            3 File(s)  113,216 bytes
            0 Dir(s)

Com a saída deste programa, talvez usada com o /Bparâmetro para formato simples, você poderá criar um script que explore uma das versões listadas.

Para obter mais informações, consulte: Hacks do Windows Server: Restaurando cópias de sombra usando a linha de comando .

harrymc
fonte
1

Resposta tardia, mas tentei volreste parece não funcionar no Windows 10. Como o OP observou, a @GMT-yadayadayadapasta mágica não aparece até você abrir a pasta no Explorer na guia Versões Anteriores, em Propriedades.

Uma abordagem que funcionou para mim é usar mklink. Como administrador no computador / servidor em questão, abra um prompt de comando e digite vssadmin list shadows:

C:\WINDOWS\system32>vssadmin list shadows
vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool
(C) Copyright 2001-2013 Microsoft Corp.

Contents of shadow copy set ID: {5a052a28-96de-4924-b669-9e671b5ce069}
   Contained 1 shadow copies at creation time: 4/07/2019 4:31:12 PM
      Shadow Copy ID: {aaeab260-fef9-4ddc-9190-78d226de07a7}
         Original Volume: (C:)\\?\Volume{010e4355-9f97-4911-99f7-4ef45974b946}\
         Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1
         Originating Machine: DESKTOPPC.domain.local
         Service Machine: DESKTOPPC.domain.local
         Provider: 'Microsoft Software Shadow Copy provider 1.0'
         Type: ClientAccessibleWriters
         Attributes: Persistent, Client-accessible, No auto release, Differential, Auto recovered

Contents of shadow copy set ID: {f2494e05-cb0c-4161-aa67-a545fe562b50}
   Contained 1 shadow copies at creation time: 11/07/2019 3:00:16 AM
      Shadow Copy ID: {c3e0566b-0b39-4080-b5ae-ca6e2a2c56c4}
         Original Volume: (C:)\\?\Volume{010e4355-9f97-4911-99f7-4ef45974b946}\
         Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2
         Originating Machine: DESKTOPPC.domain.local
         Service Machine: DESKTOPPC.domain.local
         Provider: 'Microsoft Software Shadow Copy provider 1.0'
         Type: ClientAccessibleWriters
         Attributes: Persistent, Client-accessible, No auto release, Differential, Auto recovered

Contents of shadow copy set ID: {aa9f8acb-0a06-4584-9f9e-dee2269b88f3}
   Contained 1 shadow copies at creation time: 19/07/2019 3:45:20 AM
      Shadow Copy ID: {9e3044a8-19e9-4fa8-82ea-b97a836a71d2}
         Original Volume: (C:)\\?\Volume{010e4355-9f97-4911-99f7-4ef45974b946}\
         Shadow Copy Volume: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3
         Originating Machine: DESKTOPPC.domain.local
         Service Machine: DESKTOPPC.domain.local
         Provider: 'Microsoft Software Shadow Copy provider 1.0'
         Type: ClientAccessibleWriters
         Attributes: Persistent, Client-accessible, No auto release, Differential, Auto recovered

Procure o campo Volume de cópias de sombra e use o seguinte comando para mapear o que você precisa para uma nova pasta (nesse caso, a última da lista):

C:\>mklink /d C:\vsstest \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\
symbolic link created for vsstest <<===>> \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\

Adicione a barra invertida à direita, como fiz acima, ou ela não funcionará.

Agora você terá sua própria pasta mágica para acessar uma versão anterior do conteúdo do seu disco rígido:

C:\>dir vsstest
 Volume in drive C is Local Disk
 Volume Serial Number is DEAD-BEEF

 Directory of C:\vsstest

26/06/2018  12:49 PM             1,024 .rnd
01/07/2019  01:01 PM    <DIR>          apps
20/12/2018  10:51 AM    <DIR>          ESD
29/05/2019  09:16 PM    <DIR>          inetpub
29/01/2018  12:33 PM    <DIR>          Intel
19/03/2019  02:52 PM    <DIR>          PerfLogs
04/07/2019  04:32 PM    <DIR>          Program Files
16/07/2019  12:40 PM    <DIR>          Program Files (x86)
30/05/2019  11:26 AM    <DIR>          Scripts
14/06/2019  10:46 AM    <DIR>          temp
16/10/2018  01:12 PM    <DIR>          Tools
28/05/2019  09:19 AM    <DIR>          Users
18/06/2019  09:22 AM    <DIR>          VMs
11/07/2019  03:39 AM    <DIR>          Windows
               1 File(s)          1,024 bytes
              14 Dir(s)  107,573,796,864 bytes free

Para removê-lo depois de terminar, use rmdir.

Aaron Mason
fonte