首页 > 其他分享 >BackUpLogView 系列 - ps1 文件代码及参考

BackUpLogView 系列 - ps1 文件代码及参考

时间:2023-07-02 23:00:17浏览次数:52  
标签:文件 BackUpLogView logFile 代码 Object Host command 日志 ps1

注意保存为 .ps1 后缀的文件

 

$sourceDirectory = "C:\FromDIR"
$targetLocalDirectory = "D:\ToDIR"
$btree = "数据库"
$taskName = "HIS"
$memo = "心电系统"

# ---btree 为一级类目 比如 数据库 taskname 为 二级类目 比如 his---- memo 在详情页展示,显示具体的备注人读信息

 

# ---------------------------------以下勿动!----------------------------------
# -----------------------------------------------------------------------------
$logDirectory = "C:\logs"

# 设置脚本文件的编码为 UTF-8
$OutputEncoding = [System.Text.Encoding]::UTF8

# 创建日志文件夹
if (-not (Test-Path $logDirectory)) {
New-Item -ItemType Directory -Path $logDirectory | Out-Null
Write-Host "已创建文件夹: $logDirectory"
}
else {
Write-Host "文件夹已存在: $logDirectory"
}

# 获取当前日期和时间
$datetime = Get-Date -Format "yyyyMMddHHmmss"
$currentDate = $datetime.ToString()

# 设置日志文件路径
$logFile = "$logDirectory\robocopy_log_$taskName_$currentDate.txt"

# 设置 rem 日志文件路径
$remLogFile = "$logDirectory\rem_log_$taskName_$currentDate.txt"
Write-Host "正在记录 rem 信息到 $remLogFile"

# 执行 Robocopy 同步操作
robocopy $sourceDirectory $targetLocalDirectory /LOG:$logFile /NFL /TEE /E /XX /Z /R:3 /W:10

# robocopy D:\Document H:\Project /mir 完全拷贝并同步增删 /J 可以提高拷贝速度
##自动删除备份文件夹中过时文件,慎用!尤其是拷贝断档的文件,请仅用于日常每日数据库日志备份自动删除!
## 获取文件夹中修改日期在一个月以上的文件,并删除它们

#$thresholdDate = (Get-Date).AddMonths(-1)
#Get-ChildItem -Path $targetLocalDirectory | Where-Object { $_.LastWriteTime -lt $thresholdDate } | Remove-Item -Force

$ipAddresses = Get-NetIPAddress | Where-Object { $_.AddressFamily -eq 'IPv4' -and $_.PrefixOrigin -eq 'Manual' } | Select-Object -ExpandProperty IPAddress
$ipAddressesString = $ipAddresses -join ','

# 等待 30 秒
Start-Sleep -Seconds 10

# 将日志文件内容保存到 MSSQL Server 数据库
$connectionString = "Server=192.10.203.204;Database=BackUpLog;User ID=backupuser;Password=backupuser"

try {
# 创建数据库连接对象
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)

# 打开数据库连接
$connection.Open()

# 创建 SQL 命令对象
$command = $connection.CreateCommand()

# 设置 SQL 命令文本
$command.CommandText = "INSERT INTO LogFiles (BTree, Tree, FileName, FileContent, memo) VALUES (@BTree, @Tree, @FileName, @FileContent,@memo)"

# 添加参数
$command.Parameters.AddWithValue("@Tree", "$taskName")
$command.Parameters.AddWithValue("@BTree", "$btree")
$command.Parameters.AddWithValue("@FileName", "$logFile")
$command.Parameters.AddWithValue("@memo", "$memo")

# 读取日志文件内容
$logFileContent = Get-Content -Path $logFile -Raw
# 附加上 IP 地址
$logFileContent = $logFileContent + $ipAddressesString
$command.Parameters.AddWithValue("@FileContent", $logFileContent)

# 执行 SQL 命令
$command.ExecuteNonQuery()

Write-Host "日志文件内容已成功保存到数据库表。"
}
catch {
Write-Host "发生错误: $($_.Exception.Message)"
}
finally {
# 关闭数据库连接
$connection.Close()
}

# 删除日志文件
if (Test-Path $logFile) {
Remove-Item -Path $logFile -Force
Write-Host "已删除日志文件: $logFile"
}
else {
Write-Host "未找到日志文件: $logFile"
}

 

# -------------------------以下仅适用于删除旧文件,保留5份最新文件的情况!----------------------

 

$folderPath = $targetLocalDirectory
$fileExtension = ".bak" # 文件扩展名
$keepLatestCount = 5 # 保留的最新文件数量

# 获取文件列表并按照日期降序排序
$fileList = Get-ChildItem -Path $folderPath | Where-Object { $_.Extension -eq $fileExtension } | Sort-Object -Property LastWriteTime -Descending

# 创建一个哈希表,用于存储不同文件的前缀和对应的文件列表
$filePrefixes = @{}

# 遍历文件列表,将文件按前缀存入哈希表
foreach ($file in $fileList) {
$fileName = $file.Name
$filePrefix = $fileName -replace "_\d{4}-\d{2}-\d{2}.*$"

if (-not $filePrefixes.ContainsKey($filePrefix)) {
$filePrefixes[$filePrefix] = @()
}

$filePrefixes[$filePrefix] += $file
}

# 遍历哈希表,对每个前缀的文件列表进行处理,保留最新的文件数量
foreach ($prefixFiles in $filePrefixes.Values) {
if ($prefixFiles.Count -gt $keepLatestCount) {
$filesToDelete = $prefixFiles | Select-Object -Skip $keepLatestCount
$filesToDelete | Remove-Item -Force
}
}

 


# -------------------------以下勿拷贝,备份参数仅供参考!----------------------


# -----------------------------------------------------------------------------
Usage: ROBOCOPY source destination [file [file]...] [options]

source 源路径(源文件夹)
destination目标路径(目标文件夹)
file 可选参数,指定要复制的特定文件(可以是通配符或文件名列表)

Options:
/S 复制子目录(包括空子目录)
/E 复制子目录(包括空子目录),连同目录树中的空目录一起复制
/Z 在网络连接出现故障时重新尝试
/R:n 在错误发生时重新尝试的次数(默认值为1,000,000)
/W:n 在错误发生时的等待时间(默认值为30秒)
/NFL 不记录文件列表
/NDL 不记录目录列表
/TEE 在屏幕上显示复制的输出
/LOG:file 将输出信息写入指定的日志文件
/XX排除已经存在于目标目录中的额外文件(根据文件大小和修改日期进行匹配)
/XL排除目标目录中已经存在于源目录中的额外文件和目录
/COPY:copyflags 复制文件的属性(默认值为DAT)
D - 日期
A - 属性
T - 时间
S - 安全
O - 拥有者信息
U - 重新启动数据:包括非数据流文件
M - 重新启动数据:不包括非数据流文件
B - 离线文件
/IS包括同样的文件
/IT包括更改的文件和时代

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:文件,BackUpLogView,logFile,代码,Object,Host,command,日志,ps1
From: https://www.cnblogs.com/dentist/p/17521628.html

相关文章

  • java代码加密
    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version><execution......
  • classfinal加密java代码并且启动
    maven插件方式配置参数解释: 参数说明-file加密的jar/war完整路径-packages加密的包名(可为空,多个用","分割)-libjarsjar/war包lib下要加密jar文件名(可为空,多个用","分割)-cfgfiles需要加密的配置文件,一般是classes目录下的yml或propertie......
  • 代码计时工具类stop_watch
    //copyfromspdlog#pragmaonce#include<chrono>#include<iostream>classstopwatch{usingclock=std::chrono::steady_clock;std::chrono::time_point<clock>start_tp_;public:stopwatch():start_tp_{clock::now()}......
  • BackUpLogView 系列 - 生成日志数据库脚本(MS Sql Server)
     在企业管理器中执行脚本CREATEDATABASE[BackupLogview]ONPRIMARY(NAME=N'BackupLogview',FILENAME=N'C:\DATA\BackupLogview.mdf',SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB)LOGON(NAME=N'BackupLogview_log',F......
  • BackUpLogView 系列 - 数据库备份脚本
    一键备份MSserver主机中所有数据库USEmaster;GOCREATEORALTERPROCEDUREdbo.BackupAllDatabases@BackupDirectoryNVARCHAR(255)ASBEGIN--获取当前日期和时间DECLARE@CurrentDateVARCHAR(8)=CONVERT(VARCH......
  • SSM项目整合思路以及代码
    当前真实的企业开发中,SpringBoot已经统一Java企业应用开发,很少有在使用SSM项目来进行项目开发的。可是在教学阶段,还是很有必要给学生讲解Java开发中一套很经典的框架,SSM框架。作为一个过渡阶段讲解的项目比较合适,之后在讲解SpringBoot项目,相对来说要好理解一些。如果以开始......
  • 从代码整洁之道 看什么是好的代码
    整洁的代码只做好一件事:每个函数、每个类和每个模块都全身神贯注于一件事。这里结合自己之前代码设计和处理的时候想一下子把整体都思考完全,无论是思维还是代码设计都不是好的方法。方法减少重复代码提供表达力提早构建简单抽象有意义的命名函数函数应该做一件事,做好这件......
  • OpenGL环境配置 和 测试代码(GLEW/GLFW VS2019)
    1.配置 2.测试代码:2.1 在黑板色的窗口上画一个三角形1#include<iostream>23//GLEW4#defineGLEW_STATIC5#include<GL/glew.h>67//GLFW8#include<GLFW/glfw3.h>91011//Functionprototypes12voidkey_callback(GLFWw......
  • [代码]如何在ASP.NET网页间传递数据
    重点总结目前为止在ASP.NET网页中传递数据的方式至少有5种:1、通过查询字符串传递数据。2、通过HTTPPOST传递数据。3、通过会话状态传递数据。4、通过源页的公共属性传递数据。5、通过源页中的控件值传递数据。到底使用哪种方式来进行数据的传递,这可能受到两方面的影响:1、页面重定......
  • N层研习中的测试代码01
    这是前文《N层研习记录01:试图通过Boolean参数控制并发冲突的检查方式(LINQtoSQL)》用到的测试代码。只是包含了其中最重要的部分,如果要想获取完整的代码,可以通过以下地址进行下载:下载地址2:http://u.115.com/file/f26716bcc2以上地址如果均不能下载,请留言通知我!测试代码的服务端使......