title: Script to generate Logrotationscript
body: <p>I like to edit a little Parameter more to it. Now it is splitting the File every $linesperfile but I want to add in the params $split wich should be a boolean. it should split it every $linesperfile or leave in in only one file .. I tried it allready but everytime it`s ending in a permanent loop.</p>
  
  <p><strong>call.ps1</strong></p>
  
  <pre><code>D:\powershell.ps1 -filename "D:\Test\WindowsUpdate.log" -rootName "D:\backup-logs\Apache2_Lognummer_" -ext ".log" -linesperFile 10000 -path "D:\backup-logs\" -split "true"
  </code></pre>
  
  <p><strong>powershell.ps1</strong></p>
  
  <pre><code>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 -- &gt; 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 ############################
  </code></pre>