我想更多地编辑一个参数。现在它将每个$ linesper文件拆分为File但我想在params中添加$ split应该是一个布尔值。它应该将每个$ linesper文件拆分或仅留在一个文件中..我已经尝试过了,但每次都以永久循环结束。
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 ############################
答案 0 :(得分:0)
所以你要做的就是在脚本开头添加一个param
块并定义你的参数:
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 ##############################
$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))
$filecount++
$linecount = 0
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 ############################