我的公司最近搬到了outlook365。我们完全基于VDI,因此我们的用户配置文件存储在一个服务器上。因此,我们的用户现在都有2+ .ost文件占用服务器上的存储空间。我想编写一个脚本来查找和删除无关的.ost文件。此外,我想安排脚本每月运行,以清理任何孤儿. .ost's发生的任何其他原因。
我尝试了几种不同的解决方案,但似乎找不到正确的语法来识别每个子目录中最古老的/原始的,所有的尝试都从整个目录或目录中的所有.ost文件中识别出最老的文件。
$Path = "<path>"
$SubFolders = dir $Path -Recurse | Where-Object {$_.PSIsContainer} | ForEach-Object -Process {$_.FullName}
ForEach ($Folder in $SubFolders)
{
$FullFileName = dir $Folder | Where-Object {!$_.PSIsContainer} | Sort-Object {$_.LastWriteTime} -Descending | Select-Object -First 1
}发布于 2019-05-07 18:09:49
这个班轮应该完成这个工作,用最新的LastWriteTime保存ost文件。
gci -Path $Path -directory | where {(gci -Path $_\*.ost).count -gt 1}|%{gci -Path $_\*.cmd|Sort-Object LastWriteTime -Descending|Select-Object -Skip 1|Remove-Item -WhatIf}后面是较长的变体。
$Path = '<path>'
$Ext = '*.ost'
Get-ChildItem -Path $Path -directory -Recurse |
Where-Object {(Get-ChildItem -Path "$_\$Ext" -File -EA 0).Count -gt 1} |
ForEach-Object {
Get-ChildItem -Path "$_\$Ext" -File -EA 0| Sort-Object LastWriteTime -Descending |
Select-Object -Skip 1 | Remove-Item -WhatIf
}前两行使用多个.ost文件计算文件夹,下一行迭代这些文件夹并按LastWriteTime排序,跳过第一行(最新的),然后使用-WhatIf参数对另一行进行管道删除,只显示测试时要删除的内容。
当然,您也可以将它们移动到备份位置。
https://stackoverflow.com/questions/56028072
复制相似问题