0
我喜歡爲它編輯更多的參數。現在它分裂文件every $ linesperfile但我想添加參數$分裂至極應該是一個布爾值。它應該將它分割爲每個$ lineperfile或者只保留在一個文件中。我嘗試了allready,但每次都以永久循環結束。添加布爾值來分割日誌
call.ps1
D:\powershell.ps1 -filename "D:\Test\WindowsUpdate.log" -rootName "D:\backup-logs\Apache2_Lognummer_" -ext ".log" -linesperFile 10000 -path "D:\backup-logs\" -split "true"
powershell.ps1
param(
[Parameter(Mandatory=$true,Position=0)]
[string]$filename,
[Parameter(Mandatory=$true,Position=1)]
[string]$rootName,
[Parameter(Mandatory=$true,Position=2)]
[string]$ext,
[Parameter(Mandatory=$true,Position=3)]
[string]$linesperFile,
[Parameter(Mandatory=$true,Position=4)]
[string]$path,
[Parameter(Mandatory=$true,Position=5)]
[string]$split
)
############################## Parameter ##############################
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start() # Timer startet
$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("$path\$DateNow")
$writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
$linecount = 0
$filecount++
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("$path\$DateNow")
$writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
$filecount++
$linecount = 0
}
}
} finally {
$writer.Dispose();
}
} finally {
$reader.Dispose();
}
############################ Logfile verschieben ############################
$mostRecentSubDir = Get-ChildItem $path\ | Where-Object { $_.psiscontainer } | Sort-Object CreationTime -Descending | Select-Object -first 1
Robocopy $path $path\$mostRecentSubDir *.log /move
#Remove-Item $path | Where-Object name -like "*.log"
####################### 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 -- > Uncomment
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 stops
Write-Host "Backup complete in " $sw.Elapsed.TotalSeconds "seconds" # Ausgabe des Timers über die Kommandozeile
############################ Skrict End ############################
好的,我將它添加到參數。感謝那。 - 現在我喜歡編輯循環,他還檢查$ split參數,當它錯誤時,他不會開始分割它,因此它全部放在一個日誌文件中。當它是真的時,他應該根據$ linesperfile參數給出的數字來分割它。 – RedSmookey
有人可以幫我解決這個問題嗎? – RedSmookey