2016-03-22 18 views
0

Biraz daha fazla Parametre düzenlemek istiyorum. Şimdi Dosya her $ linesperfile bölüyor ama paraşütlere eklemek istiyorum $ split bir boole olmalıdır. her $ linesperfile bölünmeli ya da sadece bir dosyaya bırakılmalıdır .. Her şeyi denedim ama her zaman kalıcı bir döngüde bitiyor.Günlük bölmek için boolean ekleyin

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

cevap

1

sorun [string] olarak ilan değişkenlerinizin hepsine sahip olmasıdır. Beyan $linesperfile[int] bir şekilde:

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

Ben de [Switch] türüyle $split değişkeni değiştirerek önerilir.

+0

Tamam, Parametrelere ekledim. Bunun için teşekkürler. - Şimdi, aynı zamanda, $ split parametresini de kontrol ettiği gibi, yanlış olduğunda, tek bir günlük dosyasına böyledir. true olduğunda, $ linesperfile parametresinde verilen sayıya bölünmelidir. – RedSmookey

+0

birisi bu konuda bana yardımcı olabilir mi? – RedSmookey

İlgili konular