2016-03-22 22 views
0

少しパラメータを編集するのが好きです。今度は$ linesperfileごとにファイルを分割していますが、ブール値でなければならないparams $ splitを追加したいと思います。 $ lineperfileごとにそれを分割するか、ただ一つのファイルに残しておくべきです。私はいつもそれを試しましたが、毎回永久的なループで終わります。ログを分割ログに追加する

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]としてあなたのすべての変数を宣言しているということです。 [int]として$linesperfileを宣言します。

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

私も[Switch]タイプのお$split変数を変更することをお勧めします。

+0

私はパラメータに追加しました。ありがとうございました。 - 今度はループを編集して、$ splitパラメータもチェックします。これは、falseであれば、分割して1つのログファイルに収まるようにします。それが真実であれば、$ linesperfileパラメータで与えられた数で分割するべきです。 – RedSmookey

+0

誰かがこの問題を私に助けてくれますか? – RedSmookey

関連する問題