Powershell 将日志文件复制到正确的文件夹中
我目前正在学习Powershell并获得制作日志旋转脚本的任务 我的工作几乎完成,但我仍然需要一个脚本,以移动到正确的文件夹中的日志文件 要求:我有一个目录“XY:\”,Powershell脚本在其中转储“*.log”文件。脚本应该获取这些文件并将其移动到另一个目录“Z:\”,将其复制到文件夹结构中存在的最新子目录中Powershell 将日志文件复制到正确的文件夹中,powershell,Powershell,我目前正在学习Powershell并获得制作日志旋转脚本的任务 我的工作几乎完成,但我仍然需要一个脚本,以移动到正确的文件夹中的日志文件 要求:我有一个目录“XY:\”,Powershell脚本在其中转储“*.log”文件。脚本应该获取这些文件并将其移动到另一个目录“Z:\”,将其复制到文件夹结构中存在的最新子目录中 ###############Logrotationsskript############### #-Splittung bei Übergröße in mehrere .log
###############Logrotationsskript###############
#-Splittung bei Übergröße in mehrere .log-Files#
#-Timestamp im Filename #
#-Archivierung der Logs in Timestampfolder #
#-Löschung veralteter Logfiles #
#-Leerung der Quelllog nach backup #
################################################
############################## Parameter ##############################
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start() # Timer startet
$filename = "D:\Test\WindowsUpdate.log" # Angabe des Pfads wo die Quell Logdatei ablegt ist.
$rootName = "D:\backup-logs\Apache2_Lognummer_" # Dateipfad\Dateiname
$ext = ".log" # Dateiendung
$linesperFile = 10000 # Dateigröße (Zeilen) ab wann die Splittung erfolgen soll
$path = "D:\backup-logs\" # Log Verzeichnis
$DateNow = ((Get-date).Day).ToString()+"-"+`
((Get-date).Month).ToString()+"-"+`
((Get-date).Year).ToString()+"-"+`
((Get-date).Hour).ToString()+"-"+`
((Get-date).Minute).ToString()+"-"+`
((Get-date).Second).ToString()+".log" # Ermittelt das aktuelle Datum (Deutscher Timestamp Tag-Monat-Jahr-Stunde-Minute-Sekunde !)
$filecount = 1 # Namenszähler
$reader = $null
############################ Skript Start ############################
try{
$reader = [io.file]::OpenText($filename)
try{
"Creating file number $filecount"
$writer= [system.io.directory]::CreateDirectory("D:\backup-logs\$DateNow")
$writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
$filecount++
$linecount = 0
while($reader.EndOfStream -ne $true) {
"Reading $linesperFile"
while( ($linecount -lt $linesperFile) -and ($reader.EndOfStream -ne $true)){
$writer.WriteLine($reader.ReadLine());
$linecount++
}
if($reader.EndOfStream -ne $true) {
"Closing file"
$writer.Dispose();
"Creating file number $filecount"
$writer= [system.io.directory]::CreateDirectory("D:\backup-logs\$DateNow")
$writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
$filecount++
$linecount = 0
}
}
} finally {
$writer.Dispose();
}
} finally {
$reader.Dispose();
}
####################### Veraltete Verzeichnisse und Logdateien löschen/leeren #######################
$limit = (Get-Date).AddDays(-60) # Anzahl Tage bis Löschung
# Lösche Dateien älter als $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Löscht leere Verzeichnisse -- > Auskommentieren
#Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
Clear-Content $filename # Löscht alten Inhalt der .Logfile ($filename siehe oben) nachdem diese gebackupt wurde.
#####################################################################################################
$sw.Stop() # Timer stoppt
Write-Host "Backup complete in " $sw.Elapsed.TotalSeconds "seconds" # Ausgabe des Timers über die Kommandozeile
############################ Skript Ende ############################
有人能帮我实现这个小剧本吗
文件和文件夹以时间戳命名,因此最近的日志文件应复制到当前时间戳文件夹中
要求:我有一个目录“XY:\”,Powershell脚本在其中转储“*.log”文件。脚本应该获取这些文件并将其移动到另一个目录“Z:\”,将其复制到文件夹结构中存在的最新子目录中
###############Logrotationsskript###############
#-Splittung bei Übergröße in mehrere .log-Files#
#-Timestamp im Filename #
#-Archivierung der Logs in Timestampfolder #
#-Löschung veralteter Logfiles #
#-Leerung der Quelllog nach backup #
################################################
############################## Parameter ##############################
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start() # Timer startet
$filename = "D:\Test\WindowsUpdate.log" # Angabe des Pfads wo die Quell Logdatei ablegt ist.
$rootName = "D:\backup-logs\Apache2_Lognummer_" # Dateipfad\Dateiname
$ext = ".log" # Dateiendung
$linesperFile = 10000 # Dateigröße (Zeilen) ab wann die Splittung erfolgen soll
$path = "D:\backup-logs\" # Log Verzeichnis
$DateNow = ((Get-date).Day).ToString()+"-"+`
((Get-date).Month).ToString()+"-"+`
((Get-date).Year).ToString()+"-"+`
((Get-date).Hour).ToString()+"-"+`
((Get-date).Minute).ToString()+"-"+`
((Get-date).Second).ToString()+".log" # Ermittelt das aktuelle Datum (Deutscher Timestamp Tag-Monat-Jahr-Stunde-Minute-Sekunde !)
$filecount = 1 # Namenszähler
$reader = $null
############################ Skript Start ############################
try{
$reader = [io.file]::OpenText($filename)
try{
"Creating file number $filecount"
$writer= [system.io.directory]::CreateDirectory("D:\backup-logs\$DateNow")
$writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
$filecount++
$linecount = 0
while($reader.EndOfStream -ne $true) {
"Reading $linesperFile"
while( ($linecount -lt $linesperFile) -and ($reader.EndOfStream -ne $true)){
$writer.WriteLine($reader.ReadLine());
$linecount++
}
if($reader.EndOfStream -ne $true) {
"Closing file"
$writer.Dispose();
"Creating file number $filecount"
$writer= [system.io.directory]::CreateDirectory("D:\backup-logs\$DateNow")
$writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
$filecount++
$linecount = 0
}
}
} finally {
$writer.Dispose();
}
} finally {
$reader.Dispose();
}
####################### Veraltete Verzeichnisse und Logdateien löschen/leeren #######################
$limit = (Get-Date).AddDays(-60) # Anzahl Tage bis Löschung
# Lösche Dateien älter als $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Löscht leere Verzeichnisse -- > Auskommentieren
#Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
Clear-Content $filename # Löscht alten Inhalt der .Logfile ($filename siehe oben) nachdem diese gebackupt wurde.
#####################################################################################################
$sw.Stop() # Timer stoppt
Write-Host "Backup complete in " $sw.Elapsed.TotalSeconds "seconds" # Ausgabe des Timers über die Kommandozeile
############################ Skript Ende ############################
根据您的要求,您可以这样做
$mostRecentSubDir = Get-ChildItem Z:\ | Where-Object { $_.psiscontainer } | Sort-Object CreationTime -Descending | Select-Object -first 1
Robocopy XY:\ Z:\$mostRecentSubDir *.log
这在谷歌上很容易找到。尝试一些东西,然后提出具体的问题,你的具体挑战是什么,我们会提供帮助。我在上面添加了脚本。。