8
0

Anlage des Repos

This commit is contained in:
2024-01-24 16:42:38 +01:00
commit 38d6a271c4
1785 changed files with 3051496 additions and 0 deletions

View File

@@ -0,0 +1,752 @@
# PowerShell 4.0 Script
# Script for handeling rejected files, with SQL-DB support
# Digital Data
# Ludwig-Rinn-Strasse 16
# 35452 Heuchelheim
# Tel.: 0641 / 202360
# E-Mail: info@didalog.de
# Version Number: 1.0.0.0 Pre-Release
# Version Date: 30.09.2015
# Minimum Requirement for this Script:
# Microsoft Windows XP SP3 / Server 2008 R2 SP1 -> look at KB976932
# Microsoft .NET Framework 4.5 -> look at KB2858728
# Microsoft PowerShell 4.0 -> look at KB2819745
# Microsoft SQL Client is needed!
# WICHTIG: Falls sich dieses Skript nicht ausführen lässt,
# gibt es mehrere Möglichkeiten die Ausführung zuzulassen.
# Zwei Möglichkeiten lauten wie folgt:
#
# 1. PowerShell Skripte generell erlauben.
# Dazu muss dieser PowerShell-Befehl noch mit administrativen Rechten ausgeführt werden:
# "set-executionpolicy unrestricted"
#
# 2. Die Ausführungseinschränkung für dieses Skript durch einen veränderten Aufruf umgehen:
# PowerShell.exe -ExecutionPolicy Bypass -File <ThisScript.ps1>
#Requires Version 4.0
#-----------------------------------------------------------------------------------------------------#
###################################### add additional assemblys #######################################
#-----------------------------------------------------------------------------------------------------#
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#-----------------------------------------------------------------------------------------------------#
############################################ set variables ############################################
#-----------------------------------------------------------------------------------------------------#
Set-Variable -Name ScriptName -Value (($MyInvocation.MyCommand.Name) -split "\.")[0].ToString() -Scope script
Set-Variable -Name ScriptPath -Value (Split-Path ($MyInvocation.MyCommand.Path)) -Scope script
Set-Variable -Name ConfigFile -Value (Get-ChildItem -Path "$ScriptPath" -Recurse -Filter "$ScriptName`_Settings.ini" -File -Force).FullName -Scope script
Set-Variable -Name ConfigValues -Value $NULL -Scope script
Set-Variable -Name Timestamp1 -Value $(Get-Date -Format 'ddMMyyyy') -Scope script
Set-Variable -Name Timestamp2 -Value $(Get-Date -Format 'ddMMyyyy_HHmmss') -Scope script
Set-Variable -Name Timestamp3 -Value $(Get-Date -Format 'ddMMyyyy_HHmmssffff') -Scope script
Set-Variable -Name Timestamp4 -Value $(Get-Date -Format 'yyyyMMdd HH:mm:ss.fff') -Scope script
Set-Variable -Name LogFile -Value "$ScriptName`_$Timestamp2.log" -Scope script
Set-Variable -Name LogFileKeepTime -Value 900 -Scope script
Set-Variable -Name LogLine -Value $NULL -Scope local
Set-Variable -Name LogPath -Value $NULL -Scope script
Set-Variable -Name LogPathError -Value $NULL -Scope local
Set-Variable -Name LogPathValue -Value $NULL -Scope script
Set-Variable -Name LogPathValues -Value $NULL -Scope script
Set-Variable -Name FileDelayAge -Value 5 -Scope script
Set-Variable -Name FilePath_and_FileName -Value $NULL -Scope local
Set-Variable -Name FileCheckResult -Value $NULL -Scope local
Set-Variable -Name SourcePathSplit -Value $NULL -Scope script
Set-Variable -Name Item -Value $NULL -Scope local
Set-Variable -Name Items -Value $NULL -Scope local
Set-Variable -Name Path -Value $NULL -Scope local
Set-Variable -Name PathTest -Value $NULL -Scope local
Set-Variable -Name VersionSeperator -Value '~' -Scope script
Set-Variable -Name FileSeperator -Value '_' -Scope script
Set-Variable -Name Counter -Value $NULL -Scope local
Set-Variable -Name FileName -Value $NULL -Scope local
Set-Variable -Name FileName_noExt -Value $NULL -Scope local
Set-Variable -Name FileHash -Value $NULL -Scope local
Set-Variable -Name FileQuery -Value $NULL -Scope local
Set-Variable -Name FileQuery_Limit -Value $NULL -Scope local
Set-Variable -Name filestream -Value $NULL -Scope local
Set-Variable -Name SourcePath -Value $NULL -Scope local
Set-Variable -Name Destinationpath -Value $NULL -Scope local
Set-Variable -Name newfilename -Value $NULL -Scope local
Set-Variable -Name newfilenamelength -Value $NULL -Scope local
Set-Variable -Name DBSQLDataSet -Value $NULL -Scope script
Set-Variable -Name DBSQLQuery -Value $NULL -Scope script
Set-Variable -Name DBSQLCommand -Value $NULL -Scope script
Set-Variable -Name DBSQLAdapter -Value $NULL -Scope script
Set-Variable -Name DBSQLConnection -Value $NULL -Scope script
Set-Variable -Name DBSQLConnectServer -Value $NULL -Scope script
Set-Variable -Name DBSQLConnectUser -Value $NULL -Scope script
Set-Variable -Name DBSQLConnectPassword -Value $NULL -Scope script
Set-Variable -Name DBSQLConnectDatabase -Value $NULL -Scope script
Set-Variable -Name DBSQLConnectIntegratedSecurity -Value $NULL -Scope script
Set-Variable -Name DBSQLErrorAction -Value 'continue' -Scope script
Set-Variable -Name DBSQL_NewFilename -Value $NULL -Scope script
#-----------------------------------------------------------------------------------------------------#
############################################ set functions ############################################
#-----------------------------------------------------------------------------------------------------#
#Most of the necessery functions will be loaded as moduls (.psm1 files) in PSSession in the preparing part.
#-----------------------------------------------------------------------------------------------------#
########################################### preparing part ############################################
#-----------------------------------------------------------------------------------------------------#
#Clear Console Window
Clear-Host
#Load Functions into current PSSession
$RegTest = (Test-Path -Path "HKLM:\SOFTWARE\Digital Data\FunctionModules")
IF ($RegTest -eq $True) {
Try {
$PSModuleItems = Get-ChildItem -Path (Get-ItemPropertyValue "HKLM:\SOFTWARE\Digital Data\FunctionModules" -Name PSRepositoryPath1) -Filter *.psm1
Write-Host "DEBUG: $PSModuleItems"
FOREACH ($PSModuleItem in $PSModuleItems) {
Try {
Write-Host "DEBUG: Loading PowerShell Module:" $PSModuleItem.FullName
#Import-Module $PSModuleItem.FullName
$var1 =Import-Module -PassThru -Function $PSModuleItem.FullName -Global -name $PSModuleItem.FullName #-Force -DisableNameChecking
write-host $var1
} #end try
Catch {
Write-Host "DEBUG: WARNING Error while loading PowerShell Module:" $PSModuleItem.FullName
} #end catch
} #end foreach
} #end try
Catch {
$form = new-object Windows.Forms.Form
$form.Text = Beispielfenster
$button = new-object Windows.Forms.Button
$button.Text = Yes
$button.Left = 100
$button.Top = 100
$button.Width = 50
$button.Height = 25
$button.Add_Click({$form.close()})
$button2 = new-object Windows.Forms.Button
$button2.Text = No
$button2.Left = 100
$button2.Top = 100
$button2.Width = 50
$button2.Height = 25
$button2.Add_Click({$form.close()})
$form.Controls.Add($button)
$form.ShowDialog()
} #end catch
} #end if
ELSE {
$form = new-object Windows.Forms.Form
$form.Text = Beispielfenster
$button = new-object Windows.Forms.Button
$button.Text = Yes
$button.Left = 100
$button.Top = 100
$button.Width = 50
$button.Height = 25
$button.Add_Click({$form.close()})
$button2 = new-object Windows.Forms.Button
$button2.Text = No
$button2.Left = 200
$button2.Top = 200
$button2.Width = 50
$button2.Height = 25
$button2.Add_Click({$form.close()})
$form.Controls.Add($button)
$form.Controls.Add($button2)
$form.ShowDialog()
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowser.Description = "Select Folder within the PowerShell Function Scripts (PSM1 Files), please!"
$FolderBrowser.ShowDialog()
$folder = $FolderBrowser.SelectedPath
write-host $Folder
Try {
New-Item -Path "HKLM:\SOFTWARE\Digital Data\FunctionModules" -Force -ErrorAction Stop | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Digital Data\FunctionModules" -Name PSRepositoryPath1 -Value $Folder -ErrorAction Stop | Out-Null
} #end try
Catch {
$form = new-object Windows.Forms.Form
$form.Text = Beispielfenster
$form.AcceptButton
$button = new-object Windows.Forms.Button
#$button.Text = „Yes“
$button.Left = 100
$button.Top = 100
$button.Width = 50
$button.Height = 25
$button.Add_Click({$form.close()})
$form.Controls.Add($button)
$form.Controls.Add($button2)
$form.ShowDialog()
} #end catch
} #end elseif
pause
#Read ConfigValues from ConfigFile
Func-Read-ConfigFile -ConfigFile $ConfigFile
write-warning $ConfigValues
#Read each ConfigValue from ConfigValues
Set-Variable -Name LogPathValues -Value (Func-Read-ConfigValue -ConfigLabel LogPathValue)
Set-Variable -Name LogFileKeepTime -Value (Func-Read-ConfigValue -ConfigLabel LogFileKeepTime)
Set-Variable -Name FileDelayAge -Value (Func-Read-ConfigValue -ConfigLabel FileDelayAge)
Set-Variable -Name FileSeperator -Value (Func-Read-ConfigValue -ConfigLabel FileSeperator)
Set-Variable -Name VersionSeperator -Value (Func-Read-ConfigValue -ConfigLabel VersionSeperator)
Set-Variable -Name FileNameConstructor -Value (Func-Read-ConfigValue -ConfigLabel FileNameConstructor)
Set-Variable -Name DBSQLConnectServer -Value (Func-Read-ConfigValue -ConfigLabel DBSQLConnectServer)
Set-Variable -Name DBSQLConnectUser -Value (Func-Read-ConfigValue -ConfigLabel DBSQLConnectUser)
Set-Variable -Name DBSQLConnectPassword -Value (Func-Read-ConfigValue -ConfigLabel DBSQLConnectPassword)
Set-Variable -Name DBSQLConnectDatabase -Value (Func-Read-ConfigValue -ConfigLabel DBSQLConnectDatabase)
Set-Variable -Name DBSQLConnectIntegratedSecurity -Value (Func-Read-ConfigValue -ConfigLabel DBSQLConnectIntegratedSecurity)
Set-Variable -Name DBSQLErrorAction -Value (Func-Read-ConfigValue -ConfigLabel DBSQLErrorAction)
Set-Variable -Name feh_rulelist -Value (Func-Read-ConfigValue -ConfigLabel feh_rule??)
pause
FOREACH ($feh_rule in $feh_rulelist) {
Write-Host ""
Write-Host "DEBUG Info: Folgende Zeilen wurden ausgelesen: --> $feh_rule <--"
$Counter = $Counter -as [int]
$Counter++ | Out-Null
#If Counter is less then 10, we need to fill it with a zero
IF ($counter -lt 10) {
$counter = $counter -as [String]
$counter = ("0"+$counter)
} #end if
IF ($feh_rule -is [String]) {
$feh_rule = @($feh_rule)
$feh_rule = ($feh_rule -split ";")
#$feh_rule = ($feh_rule -split ",")
} #end if
ELSE {
$feh_rule = @($feh_rule)
$feh_rule = ($feh_rule -Split "=" )
$feh_rule = ($feh_rule[1])
$feh_rule = ($feh_rule -split ";")
#$feh_rule = ($feh_rule -split ",")
} #end else
[System.Collections.ArrayList]$feh_rulevalues = @()
# Split an merge Array to remove blanks
FOREACH ($feh_rulevalue in $feh_rule) {
$feh_rulevalue = ($feh_rulevalue.TrimStart())
$feh_rulevalue = ($feh_rulevalue.TrimEnd())
$feh_rulevalues.Add($feh_rulevalue)
} #end foreach
IF ($feh_rulevalues -eq $NULL) {
Write-Host "DEBUG Info: Der erwarteter Wert ist leer!"
Write-Host "DEBUG Info: Standardwert wird eingetragen!"
Set-Variable -Name ("feh_rule"+$Counter) -value "Standard" -Scope script
} #end if
ELSE {
Write-Host DEBUG Info: ("feh_rule"+$Counter) wurde als Variable gesetzt und hat folgende Werte bekommen: $feh_rulevalues
Set-Variable -Name ("feh_rule"+$Counter) -value $feh_rulevalues -Scope script
} #end else
} #end foreach
#-----------------------------------------------------------------------------------------------------#
############################################# main part ###############################################
#-----------------------------------------------------------------------------------------------------#
Write-Host ""
Func-Write-Logfile -LogLine "*******************************************************************************************"
Func-Write-Logfile -LogLine "Program Startup: $ScriptName on $env:computername from Account $env:USERDOMAIN\$env:USERNAME."
Func-Write-Logfile -LogLine "*******************************************************************************************"
IF ($($feh_rulelist.count) -gt 0) {
Func-Write-Logfile -LogLine "There is/are $($feh_rulelist.count) out of 99 Rule(s) to process, starting now."
#Reset counter
Set-Variable -Name Counter -Value $NULL
#Loop for each rule
FOREACH ($feh_rule in $(get-variable -Name feh_rule??)) {
$Counter = $Counter -as [int]
$Counter++ | out-null
#If Counter is less then 10, we need to fill it with a zero
IF ($counter -lt 10) {
$counter = $counter -as [String]
$counter = ("0"+$counter)
} #end if
Func-Write-Logfile -LogLine ""
Func-Write-Logfile -LogLine "==========================================================================================="
Func-Write-Logfile -LogLine "Processing $((Get-Variable -name ("feh_rule"+$Counter)).name) now."
Func-Write-Logfile -LogLine "==========================================================================================="
Func-Write-Logfile -LogLine ""
Func-Write-Logfile -LogLine "These Values are setup: $(Get-Variable -Name ("feh_rule"+$Counter) -ValueOnly)."
# Save all given parameters of this profile.
Set-Variable -Name feh_rulevalues -Value $(get-variable -name ("feh_rule"+$Counter) -ValueOnly) -Scope local
# Save the first array value in the given parameters of this profile.
Set-Variable -Name FileTyps -Value $(get-variable -name ("feh_rule"+$Counter) -ValueOnly)[0] -Scope local
# Save the second array value in the given parameters of this profile.
Set-Variable -Name SourcePath -Value $(get-variable -name ("feh_rule"+$Counter) -ValueOnly)[1] -Scope local
# Save the third array value in the given parameters of this profile.
Set-Variable -Name DestinationPath -Value $(get-variable -name ("feh_rule"+$Counter) -ValueOnly)[2] -Scope local
# Save the fourth array value in the given parameters of this profile.
Set-Variable -Name EscalationPath -Value $(get-variable -name ("feh_rule"+$Counter) -ValueOnly)[3] -Scope local
# Save the fifth array value in the given parameters of this profile.
Set-Variable -Name FileQuery_Limit -Value $(get-variable -name ("feh_rule"+$Counter) -ValueOnly)[4] -Scope local
$FileQuery_Limit = $FileQuery_Limit -as [Int]
# If more than five parameters are given, check optional parameters.
IF ($(Get-Variable -Name ("feh_rule"+$Counter) -ValueOnly).count -gt 5) {
# Set value for date if given in the parameters.
IF ($(Get-Variable -Name ("feh_rule"+$Counter) -ValueOnly) -contains "%date") {
Set-Variable -Name newfilename -Value ($Timestamp1+$FileSeperator)
} #end if
ELSEIF ($(Get-Variable -Name ("feh_rule"+$Counter) -ValueOnly) -contains "%datetime") {
Set-Variable -Name newfilename -Value ($Timestamp2+$FileSeperator)
} #end elseif
ELSEIF ($(Get-Variable -Name ("feh_rule"+$Counter) -ValueOnly) -contains "%datetime2") {
Set-Variable -Name newfilename -Value ($Timestamp3+$FileSeperator)
} #end elseif
# Set value for sourcepath if given in the parameters.
IF ($(get-variable -Name ("feh_rule"+$Counter) -ValueOnly) -contains "%sourcefolder") {
Set-Variable -Name SourcePathSplit -Value ($SourcePath -split "\\")
Set-Variable -Name SourcePathSplit -Value ($SourcePathSplit[-1])
Set-Variable -Name newfilename -Value ($newfilename+$SourcePathSplit+$FileSeperator)
} #end if
ELSEIF ($(get-variable -Name ("feh_rule"+$Counter) -ValueOnly) -contains "%sourcefolder2") {
Set-Variable -Name SourcePathSplit -Value ($SourcePath -split "\\")
Set-Variable -Name SourcePathSplit -Value ($SourcePathSplit[-2])
Set-Variable -Name newfilename -Value ($newfilename+$SourcePathSplit+$FileSeperator)
} #end elseif
ELSEIF ($(get-variable -Name ("feh_rule"+$Counter) -ValueOnly) -contains "%sourcefolder3") {
Set-Variable -Name SourcePathSplit -Value ($SourcePath -split "\\")
Set-Variable -Name SourcePathSplit -Value ($SourcePathSplit[-3])
Set-Variable -Name newfilename -Value ($newfilename+$SourcePathSplit+$FileSeperator)
} #end elseif
# Set value for static text if given in the parameters.
IF ($(get-variable -name ("feh_rule"+$Counter) -ValueOnly) -like "%%*%%") {
Set-Variable -Name statictext -Value ((($(get-variable -name ("feh_rule"+$Counter) -ValueOnly) -like "%%*%%") | Where-Object {$_ like "%%*%%"}).ToString()).Replace("%%",'')
Set-Variable -Name newfilename -Value ($newfilename+$statictext+$FileSeperator)
} #end if
ELSE {
Set-Variable -Name statictext -value $NULL
} #end else
} #end if
Func-Write-Logfile -LogLine "This run, searches for files in folder: $SourcePath"
Set-Variable -Name Items -Value (Func-File-Collector -SearchPath $SourcePath -SearchWhiteList $filetyps | where-object {$_.lastwritetime -lt (get-date).addminutes(-$FileDelayAge)})
#Loop for each file found in the SourcePath, processing by current profile.
FOREACH ($Item in $Items) {
Func-Write-Logfile -LogLine ""
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
Func-Write-Logfile -LogLine "Processing file: $Item"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
Set-Variable -Name FileHash -Value (Get-FileHash -Path "$($Item.FullName)" -Algorithm SHA512 | select Hash | Foreach-Object {$_ -replace "@{Hash=", ""} | Foreach-Object {$_ -replace "}", ""})
Write-Host "DEBUG Info: Filehash: $FileHash"
$DBSQLDataSet.clear
Set-Variable -Name DBSQLDataSet -Value (Func-DB-SQL-Query -DBSQLQueryType read -DBSQLErrorAction stop -DBSQLQuery "SELECT DISTINCT * FROM TBDD_LURATECH_ERROR WHERE FILENAME_AND_FILEPATH = '$($Item.FullName)' AND FILEHASH = '$FileHash'")
#$DBSQLDataSet.Tables[0].rows | Out-GridView
#If there are rows in DB for this file.
IF ($($DBSQLDataSet.Tables[0].Rows.Count) -gt 0) {
Set-Variable -Name FileQuery -Value $DBSQLDataSet.Tables[0].rows[0][2].ToString()
$FileQuery = $FileQuery -as [Int]
Func-Write-Logfile -LogLine "File: $Item already exits in SQL Table TBDD_LURATECH_ERROR - current FileQuery counter is at: $FileQuery"
#If Limit for retrys is reached
IF (($FileQuery -eq $FileQuery_Limit) -or ($FileQuery -gt $FileQuery_Limit)) {
Func-Path-Check -Path $EscalationPath
#If file is available
IF ((Func-File-check-state -FilePath_and_FileName $Item.FullName -filechecktyp write) -eq 'writeable') {
#If File will be renamed by a set prefix
IF (($newfilename -gt $NULL) -and ($FileNameConstructor -eq "prefix")) {
Try {
Set-Variable -Name FileQuery -Value $DBSQLDataSet.Tables[0].rows[0][2].ToString()
$FileQuery = $FileQuery -as [Int]
$FileQuery++
Set-Variable -Name DBSQL_NewFilename -Value (Split-Path -Leaf (Func-File-copy-or-move -FilePath_and_FileName $Item.FullName -DestinationPath $EscalationPath -move_or_copy move -newfilename_prefix $newfilename))
Func-DB-SQL-Query -DBSQLQueryType write -DBSQLErrorAction stop -DBSQLQuery "UPDATE TBDD_LURATECH_ERROR SET FILEQUERY=$FileQuery,COMMENT='Die Verarbeitung der Datei, ist zu oft im Luratech Prozess fehlgeschlagen! Die Datei wurde umbenannt zu - $DBSQL_NewFilename - und in den Ordner - $EscalationPath - verschoben.',CHANGED_WHO='Script: $ScriptName - User: $env:username',CHANGED_WHEN='$Timestamp4' WHERE FILENAME_AND_FILEPATH = '$($Item.FullName)' AND FILEHASH = '$FileHash';"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
} #end try
Catch {
Func-Write-Logfile -LogLine "ERROR: File: $Item could not be moved, or something went wrong by updating the DB."
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
break
} #end catch
} #end if
#If File will be renamed
ELSEIF (($newfilename -gt $NULL) -and ($FileNameConstructor -eq "complete")) {
IF ($newfilename -like "*_") {
#If exisits, remove last "_" from new filename
Set-Variable -Name newfilenamelength -Value (($newfilename.Length)-1)
Set-Variable -Name newfilename -Value ($newfilename.Remove($newfilenamelength,1))
} #end if
Try {
Set-Variable -Name FileQuery -Value $DBSQLDataSet.Tables[0].rows[0][2].ToString()
$FileQuery = $FileQuery -as [Int]
$FileQuery++
Set-Variable -Name DBSQL_NewFilename -Value (Split-Path -Leaf (Func-File-copy-or-move -FilePath_and_FileName $Item.FullName -DestinationPath $EscalationPath -move_or_copy move -newfilename $newfilename))
Func-DB-SQL-Query -DBSQLQueryType write -DBSQLErrorAction stop -DBSQLQuery "UPDATE TBDD_LURATECH_ERROR SET FILEQUERY=$FileQuery,COMMENT='Die Verarbeitung der Datei, ist zu oft im Luratech Prozess fehlgeschlagen! Die Datei wurde umbenannt zu - $DBSQL_NewFilename - und in den Ordner - $EscalationPath - verschoben.',CHANGED_WHO='Script: $ScriptName - User: $env:username',CHANGED_WHEN='$Timestamp4' WHERE FILENAME_AND_FILEPATH = '$($Item.FullName)' AND FILEHASH = '$FileHash';"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
} #end try
Catch {
Func-Write-Logfile -LogLine "ERROR: File: $Item could not be moved, or something went wrong by updating the DB."
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
break
} #end catch
} #end elseif
#If File will be renamed by a set suffix
ELSEIF (($newfilename -gt $NULL) -and ($FileNameConstructor -eq "suffix")) {
IF ($newfilename -like "*_") {
#If exisits, remove last "_" from new filename
Set-Variable -Name newfilenamelength -Value (($newfilename.Length)-1)
Set-Variable -Name newfilename -Value ($newfilename.Remove($newfilenamelength,1))
} #end if
Try {
Set-Variable -Name FileQuery -Value $DBSQLDataSet.Tables[0].rows[0][2].ToString()
$FileQuery = $FileQuery -as [Int]
$FileQuery++
Set-Variable -Name DBSQL_NewFilename -Value (Split-Path -Leaf (Func-File-copy-or-move -FilePath_and_FileName $Item.FullName -DestinationPath $EscalationPath -move_or_copy move -newfilename_suffix $newfilename))
Func-DB-SQL-Query -DBSQLQueryType write -DBSQLErrorAction stop -DBSQLQuery "UPDATE TBDD_LURATECH_ERROR SET FILEQUERY=$FileQuery,COMMENT='Die Verarbeitung der Datei, ist zu oft im Luratech Prozess fehlgeschlagen! Die Datei wurde umbenannt zu - $DBSQL_NewFilename - und in den Ordner - $EscalationPath - verschoben.',CHANGED_WHO='Script: $ScriptName - User: $env:username',CHANGED_WHEN='$Timestamp4' WHERE FILENAME_AND_FILEPATH = '$($Item.FullName)' AND FILEHASH = '$FileHash';"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
} #end try
Catch {
Func-Write-Logfile -LogLine "ERROR: File: $Item could not be moved, or something went wrong by updating the DB."
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
break
} #end catch
} #end elseif
ELSE {
Try {
Set-Variable -Name FileQuery -Value $DBSQLDataSet.Tables[0].rows[0][2].ToString()
$FileQuery = $FileQuery -as [Int]
$FileQuery++
Func-File-copy-or-move -FilePath_and_FileName $Item.FullName -DestinationPath $DestinationPath -move_or_copy move
Func-DB-SQL-Query -DBSQLQueryType write -DBSQLErrorAction stop -DBSQLQuery "UPDATE TBDD_LURATECH_ERROR SET FILEQUERY=$FileQuery,COMMENT='Die Verarbeitung der Datei, ist zu oft im Luratech Prozess fehlgeschlagen! Die Datei wurde in den Ordner - $EscalationPath - verschoben.',CHANGED_WHO='Script: $ScriptName - User: $env:username',CHANGED_WHEN='$Timestamp4' WHERE FILENAME_AND_FILEPATH = '$($Item.FullName)' AND FILEHASH = '$FileHash';"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
} #end try
Catch {
Func-Write-Logfile -LogLine "ERROR: File: $Item could not be moved, or something went wrong by updating the DB."
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
break
} #end catch
} #end else
} #end if
ELSE {
Func-Write-Logfile "ERROR: File: $Item is not available for this Script."
} #end else
} #end if
#If Limit for retrys is not reached
ELSE {
Func-Path-Check -Path $DestinationPath
IF ((Func-File-check-state -FilePath_and_FileName $Item.FullName -filechecktyp write) -eq 'writeable') {
Try {
Set-Variable -Name FileQuery -Value $DBSQLDataSet.Tables[0].rows[0][2].ToString()
$FileQuery = $FileQuery -as [Int]
$FileQuery++
Func-File-copy-or-move -FilePath_and_FileName $Item.FullName -DestinationPath $DestinationPath -move_or_copy move
Func-DB-SQL-Query -DBSQLQueryType write -DBSQLErrorAction stop -DBSQLQuery "UPDATE TBDD_LURATECH_ERROR SET FILEQUERY=$FileQuery,COMMENT='Die Verarbeitung der Datei, ist wiederholt im Luratech Prozess fehlgeschlagen! Die Datei wurde in den Ordner - $DestinationPath - verschoben.',CHANGED_WHO='Script: $ScriptName - User: $env:username',CHANGED_WHEN='$Timestamp4' WHERE FILENAME_AND_FILEPATH = '$($Item.FullName)' AND FILEHASH = '$FileHash';"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
} #end try
Catch {
Func-Write-Logfile -LogLine "ERROR: File: $Item could not be moved, or something went wrong by updating the DB."
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
break
}
} #end if
ELSE {
Func-Write-Logfile "ERROR: File: $Item is not available for this Script."
} #end else
} #end else
} #end if
#If there are no rows in DB for this file.
ELSE {
Try {
Func-File-copy-or-move -FilePath_and_FileName $Item.FullName -DestinationPath $DestinationPath -move_or_copy move
Func-DB-SQL-Query -DBSQLQueryType write -DBSQLErrorAction stop -DBSQLQuery "INSERT INTO TBDD_LURATECH_ERROR (FILENAME_AND_FILEPATH,FILEQUERY,FILEHASH,COMMENT,ADDED_WHO,ADDED_WHEN) VALUES ('$($Item.FullName)',1,'$FileHash','Die Verarbeitung der Datei, ist erstmals im Luratech Prozess fehlgeschlagen! Die Datei wurde in den Ordner - $DestinationPath - verschoben.','Script: $ScriptName - User: $env:username','$Timestamp4');"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
} #end try
Catch {
Func-Write-Logfile -LogLine "ERROR: File: $Item could not be moved, or something went wrong by updating the DB."
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
break
} #end catch
} #end else
} #end foreach
Func-Write-Logfile -LogLine "==========================================================================================="
} #end foreach
} #end if
ELSE {
Func-Write-Logfile -LogLine "There is/are no Rule(s) to process."
} #end else
#-----------------------------------------------------------------------------------------------------#
########################################### finishing part ############################################
#-----------------------------------------------------------------------------------------------------#
#Delete old LogFiles, depending on Variable $LogFileKeepTime.
Func-Write-Logfile -LogLine ""
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
Func-Write-Logfile -LogLine "Checking LogFiles:"
Func-Write-Logfile -LogLine "-------------------------------------------------------------------------------------------"
IF ($LogFileKeepTime -gt 0) {
Func-Write-Logfile -LogLine "Log Files should be removed which are older than $LogFileKeepTime Day(s)."
Set-Variable -Name Items -Value (Func-File-Collector -SearchPath "$LogPath\*" -SearchWhiteList *.log | where {$_.Name -like "*$ScriptName*" -and $_.lastwritetime -lt $((Get-Date).AddDays(-$LogFileKeepTime)) -and -not $_.psiscontainer})
IF ($Items -eq $null) {
Func-Write-Logfile -LogLine "Deleting no old LogFiles."
} #end if
ELSE {
Func-Write-Logfile -LogLine "Deleting old LogFiles:"
FOREACH ($Item in $Items) {
Try {
Remove-Item -Path $Item -Force -Verbose
Func-Write-Logfile -LogLine "LogFile: $Item was removed."
} #end try
Catch {
Func-Write-Logfile -LogLine "LogFile: $Item cannot been removed."
Func-Write-Logfile -LogLine "Please check your privileges!"
} #end catch
} #end foreach
} # end else
} #end if
ELSE {
Func-Write-Logfile -LogLine "You disabled LogFile deleting in ConfigFile, they all will be kept."
} #end else
Func-Write-Logfile -LogLine ""
Func-Write-Logfile -LogLine "*******************************************************************************************"
Func-Write-Logfile -LogLine "Program Completed: $ScriptName on $env:computername from Account $env:USERDOMAIN\$env:USERNAME."
Func-Write-Logfile -LogLine "*******************************************************************************************"
#Delete Variables used by this Script, to clean up the RAM.
Remove-Variable -Name ScriptName
Remove-Variable -Name ScriptPath
Remove-Variable -name ConfigFile
Remove-Variable -name ConfigValues
Remove-Variable -Name Timestamp1
Remove-Variable -Name Timestamp2
Remove-Variable -Name Timestamp3
Remove-Variable -Name Timestamp4
Remove-Variable -Name feh_rule??
Remove-Variable -Name feh_rulelist
Remove-Variable -Name feh_rulevalue
Remove-Variable -Name feh_rulevalues
Remove-Variable -Name Counter
Remove-Variable -Name FileQuery_Limit
Remove-Variable -Name SourcePath
Remove-Variable -Name newfilename
Remove-Variable -Name statictext
Remove-Variable -Name filetyps
Remove-Variable -Name FileHash
Remove-Variable -Name DBSQLDataSet
Remove-Variable -Name FileName
Remove-Variable -Name FileName_noExt
Remove-Variable -Name FileQuery
Remove-Variable -Name filestream
Remove-Variable -Name EscalationPath
Remove-Variable -Name FileNameConstructor
Remove-Variable -Name newfilenamelength
Remove-Variable -Name DestinationPath
Remove-Variable -Name LogFileKeepTime
Remove-Variable -Name LogPath
Remove-Variable -Name LogPathError
Remove-Variable -Name LogPathValue
Remove-Variable -Name LogPathValues
Remove-Variable -Name DBSQLConnectDatabase
Remove-Variable -Name DBSQLConnectIntegratedSecurity
Remove-Variable -Name DBSQLConnectPassword
Remove-Variable -Name DBSQLConnectServer
Remove-Variable -Name DBSQLConnectUser
Remove-Variable -Name DBSQLQuery
Remove-Variable -Name DBSQLCommand
Remove-Variable -Name DBSQLAdapter
Remove-Variable -Name DBSQL_NewFilename
Remove-Variable -Name FileCheckResult
Remove-Variable -Name FilePath_and_FileName
Remove-Variable -Name VersionSeperator
Remove-Variable -Name SourcePathSplit
Remove-Variable -Name FileSeperator
Remove-Variable -name FileDelayAge
Remove-Variable -Name Item
Remove-Variable -Name Items
$error.clear()

View File

@@ -0,0 +1,84 @@
# Digital Data Konfigurationsdatei.
# UTF-8 Kodierung benötigt!
#-----------------------------------------------------------------------------------------------------
############################################ General Settings ########################################
#-----------------------------------------------------------------------------------------------------
# Pfadangabe in der die Log Dateien abgelegt werden
# Wenn Sie diesen Wert leer lassen, wird im Skriptverzeichnis ein Ordner "Logs" erstellt,
# in diesem werden entsprechende Logdateien abgelegt.
LogPathValue =
# Zahlenwert, wie lange (in Tagen) Logdateien aufbewahrt werden sollen (Default: 60).
# Wenn Sie diesen Wert leer lassen, wird der Standardwert von 60 Tagen verwendet.
# Wert 0 schaltet die Löschfunktion komplett aus.
LogKeepTime = 90
# Sonderzeichen welches verwendet wird, um Werte in Dateinamen zu trennen (Beispiel: Dateiname_4711_1606.pdf)
FileSeperator = _
# Sonderzeichen welches verwendet wird, um Dateiversionen zu trennen (Beispiel: Dateiname_4711_1606~2.pdf)
VersionSeperator = ~
# Zahlenwert, wie lange (in Minuten) gewartet wird, bis Dateien verarbeitet werden.
FileDelayAge = 1
#-----------------------------------------------------------------------------------------------------
######################################### Database Connection ########################################
#-----------------------------------------------------------------------------------------------------
DBSQLConnectServer = 172.24.12.41\tests
DBSQLConnectUser = sa
DBSQLConnectPassword = dd
DBSQLConnectDatabase = DD_ECM
DBSQLConnectIntegratedSecurity = false
# In case a SQL Query doesnt succed, you can configer the whole
# continue or stop
DBSQLErrorAction = stop
#-----------------------------------------------------------------------------------------------------
##################################### Erweiterte Einstellungen #######################################
#-----------------------------------------------------------------------------------------------------
# Tragen Sie einen der folgenden Werte ein: prefix | complete | suffix
FileNameConstructor = suffix
#-----------------------------------------------------------------------------------------------------
############################################## Profile ###############################################
#-----------------------------------------------------------------------------------------------------
# Parameter für ein Profil (Reihenfolge für die MUSS-Parameter beachten!)
# 1. Parameter (MUSS): Dateitypen die behandelt werden sollen (Beispiel: *.pdf,*.tif,*.jpg,*.txt)
# 2. Parameter (MUSS): Zu überwachender Ordner (E:\Quellepfad)
# 3. Parameter (MUSS): Ordner in den verschoben werden soll (Beispiel: E:\Zielpfad)
# 4. Parameter (MUSS): Ordner in den verschoben werden soll,
# 5. Parameter (MUSS): Anzahl der Versuche bis in Wert von Parameter 3 verschoben wird
# 6. Parameter (OPTIONAL): Auswahl aus Liste "Mögliche Datums Variablen"
# 7. Parameter (OPTIONAL): Auswahl aus Liste "Mögliche Herkunfts Variablen"
# 8. Parameter (OPTIONAL): Fester Wert maskiert mit zwei "%%" Beispiel: %%Erkennungsvorgang12%%
# Mögliche Datums Variablen:
# 1. %date -> Datum (01.01.2015 = 01012015)
# 2. %datetime -> Datum und Zeit (01.01.2015 9:11,22 Uhr = 01012015_091122)
# 3. %datetime2 -> Datum und Zeit inkl Millisekunden (01.01.2015 9:11,223333 Uhr = 01012015_0911223333)
# Mögliche Herkunfts Variablen:
# 1. %sourcefolder -> Quellordner aus dem die Datei kam.
# 2. %sourcefolder2 -> Quellordner minus eine Ebene aus dem die Datei kam.
# 3. %sourcefolder3 -> Quellordner minus zwei Ebenen aus dem die Datei kam.
# Beispiel:
# feh_rule = *.pdf,*.tif,*.txt ; E:\Quellpfad ; E:\Zielpfad ; E:\Eskalationspfad ; 2 ; %date ; %sourcefolder ; %%Erkennungsvorgang12%%
# Tragen Sie ab hier bis zu 99 Regeln ein:
feh_rule = *.txt ; E:\Fehler ; E:\erneut ; E:\neu ; 3; %date; %sourcefolder; %%Berlin_OCR1%%