首页 > 系统相关 >PowerShell实现定时备份并清理文件夹数据

PowerShell实现定时备份并清理文件夹数据

时间:2024-06-01 15:01:49浏览次数:19  
标签:backup 备份 Write Host 文件夹 Path BACKUP PowerShell DIR

脚本backup.ps1

# 设置执行策略以允许脚本运行
Set-ExecutionPolicy Bypass -Scope Process -Force

Write-Host "正在备份文件,请勿关闭...."

# 设置源目录和目标备份目录
# 备份源文件路径
$SOURCE_DIR = "D:\data\app\images"
# 备份目标路径
$BACKUP_DIR = "D:\data\backup"
$TIMESTAMP = (Get-Date).ToString('yyyyMMdd_HHmmss')
$BACKUP_FILE = "backup_$TIMESTAMP.zip"
# 备份日志文件
$LOG_FILE = "D:\data\backup\backup_$TIMESTAMP.log"

# 初始化标志变量
$FILES_FOUND = $false

# 创建临时目录用于存放备份文件
$TEMP_DIR = "$env:TEMP\backup_temp"
New-Item -ItemType Directory -Path $TEMP_DIR -Force | Out-Null

# 开始日志记录
Start-Transcript -Path $LOG_FILE -Append

Write-Host "Backup started at $(Get-Date)"
Write-Host "Source directory: $SOURCE_DIR"
Write-Host "Backup directory: $BACKUP_DIR"
Write-Host "Temporary directory: $TEMP_DIR"


# 查找并复制指定时间范围内的文件到临时目录(这边备份当前时间12小时之前得数据)
$startTime = (Get-Date).AddHours(-12)
$endTime = (Get-Date)


# 格式化时间以便输出
$formattedStartTime = $startTime.ToString("yyyy-MM-dd HH:mm:ss")
$formattedEndTime = $endTime.ToString("yyyy-MM-dd HH:mm:ss")

# 输出到控制台
Write-Host "Finding and copying files for $formattedStartTime to $formattedEndTime to a temporary directory"


Get-ChildItem -Path $SOURCE_DIR -Recurse | Where-Object {$_.CreationTime -ge $startTime -and $_.CreationTime -le $endTime} | ForEach-Object {
    # 获取文件或目录的相对路径
    $relativePath = $_.FullName.Substring($SOURCE_DIR.Length)

    # 构建目标路径
    $targetPath = Join-Path $TEMP_DIR $relativePath

    # 检查并创建目标路径,如果不存在
    if (-not (Test-Path $targetPath)) {
        New-Item -ItemType Directory -Path (Split-Path $targetPath -Parent) -Force | Out-Null
    }

    # 复制文件或目录
    Copy-Item $_.FullName -Destination $targetPath -Recurse -Force
    Write-Host "Copied: $_.FullName"
    $FILES_FOUND = $true
}

# 确保备份目录存在
if (-not (Test-Path $BACKUP_DIR)) {
    New-Item -ItemType Directory -Path $BACKUP_DIR | Out-Null
}

# 检查临时目录是否有文件,有文件则进行备份压缩
if ($FILES_FOUND) {
    Write-Host "Package and compress backup files..."
    Compress-Archive -Path "$TEMP_DIR\*" -DestinationPath "$BACKUP_DIR\$BACKUP_FILE" -Update
    if ($?) {
        Write-Host "Backup file created: $BACKUP_DIR\$BACKUP_FILE"
        Write-Host "Delete original files..."
        Get-ChildItem -Path $SOURCE_DIR -Recurse | Where-Object {$_.CreationTime -ge $startTime -and $_.CreationTime -le $endTime} | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
    } else {
        Write-Host "Error creating backup file"
    }
} else {
    Write-Host "The file does not exist and will not be backed up"
}

# 删除临时目录
Remove-Item -Path $TEMP_DIR -Recurse -Force

# 结束日志记录
if ($FILES_FOUND) {
	Write-Host "Backup completed at $(Get-Date)"
	Write-Host "Backup completed: $BACKUP_DIR\$BACKUP_FILE"
}
Stop-Transcript

windows定时执行

  1. 进入任务计划程序
  2. 新增定时任务
  3. 定时任务操作

    程序或脚本:%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    添加参数:-File D:\backup.ps1
  4. 触发器不做介绍

标签:backup,备份,Write,Host,文件夹,Path,BACKUP,PowerShell,DIR
From: https://www.cnblogs.com/IamHzc/p/18225987

相关文章

  • 转 Win10 共享文件夹、打印机。 使用微软账户登录共享文件夹,如何确认账号密码。
    目的是通过该方法实现了局域网内 共享目录给电视盒子,放在电视盒子使用。感谢不爱吃山楂大佬https://zhuanlan.zhihu.com/p/446872571   Win10共享文件夹、打印机。使用微软账户登录共享文件夹,如何确认账号密码。......
  • springboot 获取静态资源文件夹
    @ComponentpublicclassStaticResourcePathResolver{privatefinalServletContextservletContext;@AutowiredpublicStaticResourcePathResolver(ServletContextservletContext){this.servletContext=servletContext;}publicS......
  • Azure SQL 备份无法还原至新服务器
    我正在为我的Azure应用程序创建一个简单的灾难恢复计划。该应用程序的RTO长达一周,因此它不是一个关键应用程序,所以我不需要设置主动/被动服务器或任何类型的自动故障转移。如果数据中心断电六个小时,我也不在乎。实际上,我只是为某些导致整个数据中心离线的事件(如火灾......
  • rsync备份项目
    rsync备份项目rsync的同步都不是实时同步的,操作一次才能同步一次,即使放定时任务,也不是实时同步。rsync项目1 rsync命令本地同步备份一使用rsync实现数据本地同步备份(前提:本地无需开启rsync服务,但要安装rsync命令)常见的备份时保持文件属性不变的选项:-avz,下面的-av,也可......
  • 在 Windows Server 2022 中,您可以使用 PowerShell 来管理 DNS 服务器,以下是一些常用的
    在WindowsServer2022中,您可以使用PowerShell来管理DNS服务器,以下是一些常用的PowerShell命令及其示例:安装DNS服务器角色:安装DNS服务器角色:powershellCopyCodeInstall-WindowsFeature-NameDNS-IncludeManagementTools配置DNS区域和记录:创建新的......
  • 20个PowerShell命令
    1.get-command,查找都有哪些指令,get-cmmand简写gcm例如gcm>aaa.txt结果输入到aaa.txt文件中cataaa.txt查看文本文件内容moreaaa.txt2、get-help后面跟命令get-helpcat3、clear-host,简称cls,相当于Linux里面的清屏命令clear,这里也可以用clear4、get-location,简称gl,相当......
  • nodejs判断文件、文件夹是否存在,不存在则创建
    方法解释ensureFileExistence(filePath):接受一个文件路径作为参数。使用path.dirname(filePath)获取文件目录路径。使用fs.existsSync和fs.mkdirSync确保目录存在。使用fs.existsSync和fs.writeFileSync确保文件存在。使用示例可以调用ensureFileExistenc......
  • 免费数据恢复软件,可在Windows 11 / 10中恢复已删除的文件和文件夹
    是否要恢复或还原已删除的文件,文件夹和数据,甚至已从回收站中删除?那么您需要的是良好的数据恢复软件。我们已经看了一些可以帮助您从CDDVD恢复数据的免费软件-现在是一些适用于Windows的免费软件,它们可以帮助您找回意外删除的丢失文件。适用于Windows11/10的免费数据恢......
  • info信息备份
    Privacy-CameraUsageDescription<string>App申请访问您的相机,用于进行拍摄,如禁止将无法拍照拍摄图片上传信息</string>NSCameraUsageDescription="DuringtheKYCprocess,wewillneedaccesstoyourcameratocaptureyourIDandverifyyourinformationthroughfac......
  • 读取文件夹文件
    publicfunctiongetFolderData($dir){$data=array();//打开目录并读取其中的文件/文件夹$handle=opendir($dir);while(false!==($file=readdir($handle))){if($file!="."&&$file!=".."){......