加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 00:14:43 所属栏目:Windows 来源:网络整理
导读:我有一个运行 Windows 2012 R2的应用程序服务器,它生成大量日志文件,以便半定期地从可用空间运行应用程序卷.由于应用程序本身的限制,我无法移动或重命名日志文件或启用NTFS重复数据删除,并且由于它不再是十年前了,我不想使用批处理或vbscript来执行此操作为
我有一个运行 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代码创建一个函数可能是有意义的,这将是一个相当简单的练习.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读