PowerShell 实现删除指定路径X天前文件功能并添加定时JOB实例

公司的POA服务器的E盘隔三差五就爆满,原因是数据库备份文件越来越大,现在已经大到需要高频清理的地步了

十一前出现的这个问题,当时为了不专门在假期里某天特地去清理磁盘,想着一定要搞个定时JOB实现自动清理

最后选用了PowerShell脚本实现

新建一个txt文件,打开编辑内容如下:

# 设置要搜索的目录路径  
$searchPath = "E:\OracleFRA\RMAN\Backup\"  
  
# 获取日期(作为DateTime对象)  
$beforeday = (Get-Date).AddDays(-10)  
  
# 遍历指定路径下的所有文件  
Get-ChildItem -Path $searchPath -File | Where-Object { $_.LastWriteTime -lt $beforeday } | ForEach-Object {  
    # 输出将要删除的文件路径(可选)  
    Write-Host "Deleting: $($_.FullName)"  
    # 删除文件  
    Remove-Item -Path $_.FullName -Force  
}  
  
# 输出完成消息(可选)  
Write-Host "Done."

修改文件名及后缀为deletefiles.ps1

放到指定位置既可,参考位置D:\TOOL\IMT\deletefiles.ps1

然后打开Task Scheduler(任务计划程序)添加定时JOB既可

这里添加定时JOB的基础操作不提供了,只补充一个Action设置例图:

 下面那两个框的内容分别是

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
-NoProfile -ExecutionPolicy Bypass -File "D:\TOOL\IMT\deletefiles.ps1"

 

补充一些后面想把这个JOB复制到其他服务器遇到的问题

遇到的第一个问题是PowerShell 脚本执行策略阻止运行 deletefiles.ps1 脚本

具体错误信息:File D:\Tool\IMT\deletefiles.ps1 cannot be loaded because the execution of disabled on this system

解决方法是以管理员身份运行 PowerShell,输入命令,更改执行策略,注意PowerShell 会进行命令确认, 输入 Y 并按回车键既可

更改执行策略的命令:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

遇到的第二个问题是服务器上PowerShell 版本太低不支持 -File 参数

具体错误信息:Get-ChildItem:A parameter cannot be found that matches parameter name 'File'

解决方法是使用 -Filter 参数配合文件通配符(如 *.*)来模拟 -File 参数的行为 或  通过将 Get-ChildItem 的输出传递给 Where-Object 来过滤实现相同功能

使用 -Filter 参数的PowerShell脚本:

# 设置要搜索的目录路径  
$searchPath = "E:\OracleFRA\RMAN\Backup\"  
  
# 获取要删除的日期(作为DateTime对象)  
$beforeday = (Get-Date).AddDays(-10)  
  
# 遍历指定路径下的所有文件(使用 -Filter 参数)  
Get-ChildItem -Path $searchPath -Filter *.* | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $beforeday } | ForEach-Object {  
    # 输出将要删除的文件路径(可选)  
    Write-Host "Deleting: $($_.FullName)"  
    # 删除文件  
    Remove-Item -Path $_.FullName -Force  
}  
  
# 输出完成消息(可选)  
Write-Host "Done."

 

使用 Where-Object 过滤的PowerShell脚本:

# 设置要搜索的目录路径  
$searchPath = "E:\OracleFRA\RMAN\Backup\"  
  
# 获取要删除的日期(作为DateTime对象)  
$beforeday = (Get-Date).AddDays(-10)  
  
# 遍历指定路径下的所有项,然后过滤出文件  
Get-ChildItem -Path $searchPath | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $beforeday } | ForEach-Object {  
    # 输出将要删除的文件路径(可选)  
    Write-Host "Deleting: $($_.FullName)"  
    # 删除文件  
    Remove-Item -Path $_.FullName -Force  
}  
  
# 输出完成消息(可选)  
Write-Host "Done."

 

posted @ 2024-10-16 15:27  路小乙  阅读(31)  评论(0编辑  收藏  举报