如何以编程方式查找和打开以前版本的文件夹(使用 PowerShell、WMI 等)?

Vla*_*kov 19 windows powershell windows-explorer previous-versions windows-8

我正在运行 Windows 8 Enterprise x64。当我\\localhost\c$作为网络文件夹打开,然后使用上下文菜单打开子文件夹的“属性”窗口(例如\\localhost\c$\Deploy,如下例所示)时,有“以前的版本”选项卡,我可以在其中看到该文件夹​​的可用以前版本的列表,以及相应的时间戳:

以前的版本选项卡


如果我选择一个版本并单击“打开”按钮,则会打开一个新的资源管理器窗口,我可以在其中浏览所选文件夹的先前版本:

常规选项卡上的位置


地址栏显示一个位置,其中时间戳(以人类可读的长格式)附加到每个文件夹名称。如果从那里复制该位置,则不能直接用作另一个资源管理器窗口或命令行工具中的有效路径。但是,如果我打开子文件夹的“属性”窗口,它会以类似\\localhost\c$\@GMT-2013.08.27-04.01.18\Deploy. 这种形式实际上可以在资源管理器和命令行中使用:

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
Run Code Online (Sandbox Code Playgroud)

在 PowerShell 中也是:

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
Run Code Online (Sandbox Code Playgroud)

看起来具有魔法名称的文件夹@GMT-2013.08.27-04.01.18(大概代表 GMT 时区中的时间戳)的行为就像它确实存在于那里一样,只是dir除非您已经知道它的名称,否则您无法使用该命令发现它的存在。此文件夹下的所有文件和文件夹都是只读的:在那里不能创建、删除、重命名或更改任何内容(包括文件/文件夹属性和权限)。如果您是管理员,但没有查看某些文件的权限,则无法更改它,除非您首先设法将包含文件夹复制到非只读位置。

问题:是否可以获取某个文件夹的版本列表,例如第一个屏幕截图中显示的版本列表,并以编程方式(使用 PowerShell、WMI、WSH、BAT、Win32 API 等)在新的资源管理器窗口中打开其中一个)?是否可以以@GMT-2013.08.27-04.01.18 编程方式获取具有魔术名称的相应文件夹的列表?

har*_*ymc 13

volrest实用程序可从 Windows Server 2003 Resource Kit Tools 获得,可用于列出文件夹的先前版本。它在 Windows 7 上对我有用,并且在 Windows 8 上仍然可以使用。请注意您的参数,因为它也可以恢复以前的版本。

使用示例(来自下面引用的链接):

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)
Run Code Online (Sandbox Code Playgroud)

通过该程序的输出,可能与/B裸格式参数一起使用,您应该能够构建一个脚本来探索列出的版本之一。

有关详细信息,请参阅: Windows Server Hacks:使用命令行恢复卷影副本