2016-03-22 75 views
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 ############################ 

回答

1

的問題是,你把所有的聲明爲[string]您的變量。聲明$linesperfile作爲[int]

[Parameter(Mandatory=$true,Position=3)] 
[int]$linesperFile, 

我還建議您更改$split變量爲[Switch]類型。

+0

好的,我將它添加到參數。感謝那。 - 現在我喜歡編輯循環,他還檢查$ split參數,當它錯誤時,他不會開始分割它,因此它全部放在一個日誌文件中。當它是真的時,他應該根據$ linesperfile參數給出的數字來分割它。 – RedSmookey

+0

有人可以幫我解決這個問題嗎? – RedSmookey