我有一个运行
Windows 2012 R2的应用程序服务器,它生成大量日志文件,以便半定期地从可用空间运行应用程序卷.由于应用程序本身的限制,我无法移动或重命名日志文件或启用NTFS重复数据删除,并且由于它不再是十年前了,我不想使用批处理或vbscript来执行此操作为了我.
日志文件都在应用程序安装目录的各个子文件夹中,具有不同的扩展名(一个组件将日期添加为日志文件扩展名),并且应用程序安装目录中有一个空格,因为应用程序开发人员是恶意的.写入日志的子文件夹至少专门用于编写日志.这也是一个cpu密集型应用程序,因此我不想压缩日志文件夹本身,并且会因为为日志编写压缩文件而导致cpu损失.
如何使用PowerShell在x天以上的日志文件上就地启用NTFS压缩?
最简单的解决方案,因为PowerShell对文件操作的支持仍然相当缺乏,就是创建一个PowerShell脚本来调用compact.exe实用程序并将其设置为计划任务.由于路径名中的空格,您希望直接调用compact.exe,而不是使用Invoke-WMIMethod和CIM_DataFile类(这将导致很多额外的工作来处理路径中的空间).
原文链接:https://www.f2er.com/windows/368380.html假设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代码创建一个函数可能是有意义的,这将是一个相当简单的练习.