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