windows – 如何使用PowerShell在x天以上的日志文件上启用NTFS压缩?

前端之家收集整理的这篇文章主要介绍了windows – 如何使用PowerShell在x天以上的日志文件上启用NTFS压缩?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个运行 Windows 2012 R2的应用程序服务器,它生成大量日志文件,以便半定期地从可用空间运行应用程序卷.由于应用程序本身的限制,我无法移动或重命名日志文件或启用NTFS重复数据删除,并且由于它不再是十年前了,我不想使用批处理或vbscript来执行此操作为了我.

日志文件都在应用程序安装目录的各个子文件夹中,具有不同的扩展名(一个组件将日期添加为日志文件扩展名),并且应用程序安装目录中有一个空格,因为应用程序开发人员是恶意的.写入日志的子文件夹至少专门用于编写日志.这也是一个cpu密集型应用程序,因此我不想压缩日志文件夹本身,并且会因为为日志编写压缩文件而导致cpu损失.

如何使用PowerShell在x天以上的日志文件上就地启用NTFS压缩?

最简单的解决方案,因为PowerShell对文件操作的支持仍然相当缺乏,就是创建一个PowerShell脚本来调用compact.exe实用程序并将其设置为计划任务.由于路径名中的空格,您希望直接调用compact.exe,而不是使用Invoke-WMIMethod和CIM_DataFile类(这将导致很多额外的工作来处理路径中的空间).

假设X的年龄为3天,您的PowerShell脚本将类似于:

$logfolder="[location of the first logging subfolder]"
$age=(get-date).AddDays(-3)

Get-ChildItem $logfolder | where-object {$_.LastWriteTime -le $age -AND $_.Attributes -notlike "*Compressed*"} | 
ForEach-Object {
compact /C $_.FullName
}

$logfolder="[location of the next logging subfolder]"

Get-ChildItem $logfolder | where-object {$_.LastWriteTime -le $age -AND $_.Attributes -notlike "*Compressed*"} | 
ForEach-Object {
compact /C $_.FullName
}

...

第二个条件是通过跳过已经压缩的文件(这将在第一次运行此脚本后出现)来加速脚本执行.如果你想,或者有很多不同的日志记录子文件夹,那么用重复的PowerShell代码创建一个函数可能是有意义的,这将是一个相当简单的练习.

猜你在找的Windows相关文章