Ich mag es, ein wenig Parameter mehr zu bearbeiten. Jetzt teilt es die Datei jede $ linesperfile, aber ich möchte in den Params $ split hinzufügen, die ein Boolean sein sollte. es sollte es jede $ linesperfile teilen oder in nur einer Datei einlassen .. Ich habe es schon versucht, aber jedesmal endet es in einer permanenten Schleife.Add boolean zu teilen log
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 ############################
ok, ich habe es zu den Parametern hinzugefügt. Dank dafür. - Jetzt möchte ich die Schleife bearbeiten, dass er auch den $ split-Parameter überprüft, dass wenn er falsch ist, er nicht beginnt, es zu teilen, so dass alles in einer Protokolldatei. wenn es wahr ist, sollte er es durch die Zahl teilen, die im Parameter $ linesperfile angegeben ist. – RedSmookey
kann mir jemand mit diesem Problem helfen? – RedSmookey