我的目标是集中有关上次用户备份何时完成的信息。
在我的网络上,我有备份运行到以下位置:
\serverbackupuser1
\serverbackupuser2
\serverbackupuser3
等等
我的目标是运行一个脚本,该脚本将检查每个文件夹,并返回每个文件夹中最新文件的日期信息,并将其附加到用户的名称中。
输出看起来像这样:
user1-2-17-12-1457
user2-1-18-12-1312
user3-2-6-12-0857
其中2-17-12-1457表示\server\backup\user1 上最新文件的日期和时间
这个脚本将在Windows2008SBS机器上运行,所以无论我有什么工具都可以使用。我运行相对基本的批处理文件,但我对完成任务持开放态度。
感谢
下面这样的东西应该能起到作用。如果您担心文件创建日期,请将"lastwritetime"的两个实例替换为"creationtime"。还需要调整最终的.totstring()格式,以防我没有收集到您想要的时间戳的格式。
$directories = get-childitem "\serverbackup" | where-object { $_.psiscontainer }
foreach ($dir in $directories) {
get-childitem $dir | sort-object lastwritetime | select-object -last 1 | foreach-object { $dir.name + $_.lastwritetime.tostring("-MM-dd-yy-hhmm") }
}
这应该输出这样的东西:
copy-04-13-11-0213
Fiddler2-10-21-10-0120
My Received Files-11-14-11-0233
net-09-03-10-1023
OneNote Notebooks-02-07-12-0306
SQL Server Management Studio-03-17-11-1056
Visual Studio 2005-03-17-11-1056
Visual Studio 2008-03-17-11-1048
Visual Studio 2010-03-22-11-0650
windowspowershell-11-07-11-0303
编辑:根据评论。。将日志记录添加到文件中(文件本身带有当前日期的时间戳),并使用fullpath来确保我们不依赖相对路径。
$directories = get-childitem "\serverbackup" | where-object { $_.psiscontainer }
$outFile = "C:recentfiles" + (get-date).toString("-MM-dd-yy") + ".txt"
foreach ($dir in $directories) {
get-childitem $dir.Fullname | sort-object lastwritetime | select-object -last 1 | foreach-object { $dir.name + $_.lastwritetime.tostring("-MM-dd-yy-hhmm") } | out-file $outFile -append
}
这里有一个例子,它递归地搜索配置文件中的所有文件,以找到最近编写的文件。然后,它将数据信息解析为一个字符串,该字符串连接到初始文件夹的名称。
$Folders = @(
"\serverbackupuser1",
"\serverbackupuser2",
"\serverbackupuser3"
)
$Folders | % {
$Directory = [System.IO.DirectoryInfo]$_
$AllFiles = Get-ChildItem $_ -Recurse
$NewestDate = ($AllFiles | Sort-Object -property LastWriteTime -Descending)[0].LastWriteTime | Get-Date -Format "-M-d-yy-HHmm"
$NewFileName = "$($Directory.Name)$NewestDate"
$NewFileName
}