2016-03-22 9 views
0

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 ############################ 

Antwort

1

Das Problem ist, dass Sie als [string] erklärt alle Ihre Variablen haben. Deklarieren $linesperfile als [int]:

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

Ich empfehle auch Ihre $split Variable auf einen [Switch] Typ verändern.

+0

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

+0

kann mir jemand mit diesem Problem helfen? – RedSmookey