微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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代码创建一个函数可能是有意义的,这将是一个相当简单的练习.

原文地址:https://www.jb51.cc/windows/368380.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐