#PowerShell 3.0 Script #Please use the "_Settings.ini"-File for configurations. #Digital Data #Ludwig-Rinn-Strasse 16 #35452 Heuchelheim #Tel.: 0641 / 202360 #E-Mail: info@didalog.de #Version Number: 1.0.1.1 #Version Date: 18.08.2025 - MD #Requires –Version 3.0 #-----------------------------------------------------------------------------------------------------# ######################################## check for arguments ########################################## #-----------------------------------------------------------------------------------------------------# #-----------------------------------------------------------------------------------------------------# ################################## add additional buildin assemblys ################################### #-----------------------------------------------------------------------------------------------------# Add-Type -AssemblyName System.Windows.Forms -ErrorAction Stop Add-Type -AssemblyName PresentationCore -ErrorAction Stop Add-Type -AssemblyName PresentationFramework -ErrorAction Stop #-----------------------------------------------------------------------------------------------------# ############################################ set variables ############################################ #-----------------------------------------------------------------------------------------------------# Set-Variable -Scope Global -Name ScriptName -Value (($MyInvocation.MyCommand.Name) -split "\.")[0].ToString() Set-Variable -Scope Global -Name ScriptPath -Value (Split-Path ($MyInvocation.MyCommand.Path)) Set-Variable -Scope Global -Name ConfigFile -Value (Get-ChildItem -Path "$ScriptPath" -Recurse:$false -Filter "$ScriptName`_Settings.ini" -File -Force).FullName | Select-Object -First 1 Set-Variable -Scope Global -Name ConfigValues -Value $NULL Set-Variable -Scope Global -Name Timestamp1 -Value $(Get-Date -Format 'ddMMyyyy') Set-Variable -Scope Global -Name Timestamp2 -Value $(Get-Date -Format 'ddMMyyyy_HHmmss') Set-Variable -Scope Global -Name Timestamp3 -Value $(Get-Date -Format 'ddMMyyyy_HHmmssffff') Set-Variable -Scope Global -Name Timestamp4 -Value $(Get-Date -Format 'yyyyMMdd HH:mm:ss.fff') Set-Variable -Scope Global -Name Item -Value $NULL Set-Variable -Scope Global -Name Items -Value $NULL Set-Variable -Scope Global -Name VersionSeperator -Value "~" Set-Variable -Scope Global -Name Counter1 -Value 0 Set-Variable -Scope Global -Name LogFile -Value "$ScriptName`_$Timestamp2.log" Set-Variable -Scope Global -Name LogFileKeepTime -Value 60 Set-Variable -Scope Global -Name LogPath -Value $NULL Set-Variable -Scope Global -Name FileDelayAge -Value 5 Set-Variable -Scope Global -Name FileTest -Value $NULL Set-Variable -Scope Global -Name FileTest2 -Value $NULL Set-Variable -Scope Global -Name FileTest3 -Value $NULL Set-Variable -Scope Global -Name PathTest -Value $NULL Set-Variable -Scope Global -Name Module -Value $NULL Set-Variable -Scope Global -Name Modules -Value ("Read-ConfigFile","Write-LogFile","Remove-Item-withLogging","Test-Path-withLogging","Load-EMLFile-withLogging","MoveOrCopy-Item-withLogging","Test-FileState-withLogging","DD_LIB_Standards") Set-Variable -Scope Global -Name ModuleOverrideSourcePath -Value $NULL Set-Variable -Scope Global -Name ModuleDefaultSourcePath -Value $NULL Set-Variable -Scope Global -Name ModuleHKLMRegistryPath -Value "HKLM:\SOFTWARE\Digital Data\Modules" Set-Variable -Scope Global -Name ModuleHKCURegistryPath -Value "HKCU:\SOFTWARE\Digital Data\Modules" Set-Variable -Scope Global -Name SMTPDomains -Value $NULL Set-Variable -Scope Global -Name SourcePath -Value $NULL Set-Variable -Scope Global -Name SourcePathRecurse -Value $NULL Set-Variable -Scope Global -Name EMLFile -Value $NULL Set-Variable -Scope Global -Name EMLFileExtension -Value "eml" Set-Variable -Scope Global -Name EMLFileContent -Value $NULL Set-Variable -Scope Global -Name EMLObject -Value $NULL Set-Variable -Scope Global -Name EMailAddressTEMP -Value $NULL Set-Variable -Scope Global -Name EMailAddressesTEMP -Value $NULL Set-Variable -Scope Global -Name EMailAddressTo -Value $NULL Set-Variable -Scope Global -Name EMailAddressToRegEx -Value $NULL Set-Variable -Scope Global -Name EMailAddressesTo -Value $NULL Set-Variable -Scope Global -Name EMailAddressFrom -Value $NULL Set-Variable -Scope Global -Name EMailAddressFromRegEx -Value $NULL Set-Variable -Scope Global -Name EMailAddressesFrom -Value $NULL Set-Variable -Scope Global -Name EMailDateSentOn -Value $NULL Set-Variable -Scope Global -Name EMailDateSentOnTEMP -Value $NULL Set-Variable -Scope Global -Name EMailSubject -Value $NULL Set-Variable -Scope Global -Name WDObjecttyp -Value $NULL Set-Variable -Scope Global -Name WDIndexEMailTo -Value $NULL Set-Variable -Scope Global -Name WDIndexEMailFrom -Value $NULL Set-Variable -Scope Global -Name WDIndexEMailDate -Value $NULL Set-Variable -Scope Global -Name WDIndexEMailSubject -Value $NULL #-----------------------------------------------------------------------------------------------------# ############################################ set functions ############################################ #-----------------------------------------------------------------------------------------------------# Function Load-PowerShellModule { <# .SYNOPSIS Function will load external - additional - PowerShell Modules into current PSSession. .DESCRIPTION By working with Modules, this Function is necessary to load external Modul Functions into the current PowerShell Session. In a productive Enviroment it is recommanded to let this Function set the Registry Key in HKLM for the ModuleSourcePath. In develepment and Test Enviroment it is possible, to work with distributed Folders with different Modules. Therefor the Parameter "ModuleOverrideSourcePath" and the preset Variable "ModuleDefaultSourcePath" are made for. After a successful Import of a Module, Function will Return $True, otherwise a $False. .REQUIREMENT General PowerShell V3 .REQUIREMENT Assembly System.Windows.Forms, PresentationCore, PresentationFramework .REQUIREMENT Variables ModuleOverrideSourcePath, ModuleName, Path, Paths, PathTest, FileTest, Result .REQUIREMENT Variables preSet ScriptName, ScriptPath, ModuleDefaultSourcePath, Counter .REQUIREMENT Functions .VERSION 1.0.0.0 / 11.09.2016 .PARAMETER ModuleName Give the Module Name, you want to load into the current PSSession (without File-Extension). .PARAMETER ModuleOverrideSourcePath Optional Parameter. By giving the ModuleOverrideSourcePath, Function will not check other Paths for the Function you want to load. .PARAMETER ModuleFileExtension Optional Parameter. Give the Module File-Extension (regular: "psm1") without a dot ("."), this is just for the checking routine, not the Import itself.')] .PARAMETER Force Optional Parameter. By using the Force Parameter, Module will be unload and reload. .EXAMPLE Load-PowerShellModule -ModuleName Write-LogFile -ModuleFileExtension psm1 .EXAMPLE Load-PowerShellModule -ModuleName Write-LogFile -Force .EXAMPLE Load-PowerShellModule -ModuleName Write-LogFile -ModuleFileExtension psm1 -ModuleOverrideSourcePath D:\ScriptFiles\Modules #> [cmdletbinding()] Param ( [Parameter(Position=0,Mandatory=$True,ValueFromPipeline=$True,HelpMessage='Give the ModuleName, you want to load into the current PSSession (without File-Extension)')] [ValidateNotNullOrEmpty()] [String]$ModuleName, [Parameter(mandatory=$False,HelpMessage='Optional Parameter. By giving the ModuleOverrideSourcePath, Function will not check other Paths for the Function you want to load.')] [ValidateNotNullOrEmpty()] [String]$ModuleOverrideSourcePath, [Parameter(mandatory=$False,HelpMessage='Optional Parameter. Give the Module File-Extension (regular: "psm1") without a dot ("."), this is just for the checking routine, not the Import itself.')] [ValidateNotNullOrEmpty()] [String]$ModuleFileExtension = "psm1", [Parameter(mandatory=$False,HelpMessage='Optional Parameter. By using the Force Parameter, Module will be unload and reload.')] [Switch]$Force ) #end param Process { #Clear Error Variable $error.clear() #If FileExtension was given, remove it! Because otherwise "Import-Module" Function will have trouble importing. $ModuleName = $ModuleName.Replace(".$ModuleFileExtension","") Write-Host "DEBUG Info - Load-PowerShellModule: You want to load Module $ModuleName" #Try this if $ModuleOverrideSourcePath was given by calling the function IF ((([String]::IsNullOrWhiteSpace($ModuleOverrideSourcePath)) -ne $true) -and (([String]::IsNullOrEmpty($ModuleOverrideSourcePath)) -ne $true)) { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Function has been called with 'ModuleOverrideSourcePath' Parameter input!" Write-Host "DEBUG Info - Load-PowerShellModule: Testing for existence: $ModuleOverrideSourcePath\$ModuleName.$ModuleFileExtension" $PathTest = Test-Path -Path "$ModuleOverrideSourcePath\$ModuleName.$ModuleFileExtension" -PathType Leaf IF ($PathTest -eq $true) { Write-Host "DEBUG Info - Load-PowerShellModule: $ModuleOverrideSourcePath and ModuleName seems to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Trying to import Module: $ModuleName.$ModuleFileExtension" Try { $Result = Import-Module $ModuleOverrideSourcePath\$ModuleName -Verbose -DisableNameChecking -Scope Global -Force:$Force -PassThru -ErrorVariable Error -ErrorAction SilentlyContinue IF ("$Result" -eq "$ModuleName") { Write-Host "DEBUG Info - Load-PowerShellModule: Successfully loaded Module: $ModuleName.$ModuleFileExtension" Return $True } #end if ELSE { Write-Error "DEBUG Info - Load-PowerShellModule: Unsuccessfully loaded Module: $ModuleName.$ModuleFileExtension" Return $False } #end else } #end try Catch { Write-Host "DEBUG Info - Load-PowerShellModule: Error while importing the Module:" Write-Host "DEBUG Info - Load-PowerShellModule: $ModuleName" Write-Host $Error Return $False } #end catch } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: ModuleOverrideSourcePath and/or ModuleName seems not to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Cannot load Module, please check your input!" Return $False } #end else } #end if #If $ModuleOverrideSourcePath was not given, try to find a matching folder ELSE { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Function has been called without 'ModuleOverrideSourcePath' Parameter input!" Write-Host "DEBUG Info - Load-PowerShellModule: Trying to find Module Files on some Places of this Computer." #Set dynamic Array for locations Modul Path could be, even for some testing. #The first value of the array is just a dummy and will never be used -but keep it for the array value starting with 0! [System.Collections.ArrayList]$Paths = @() Write-Host "" $Paths.Add("$env:systemroot\") | Out-Null IF (([String]::IsNullOrEmpty($ModuleDefaultSourcePath)) -or ([String]::IsNullOrWhiteSpace($ModuleDefaultSourcePath))) { Write-Host "DEBUG Info - Load-PowerShellModule: ModuleDefaultSourcePath was not set! That could be a normal behavior in productive enviroment!" } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (1): $ModuleDefaultSourcePath" -ErrorAction SilentlyContinue $Paths.Add("$ModuleDefaultSourcePath") | Out-Null } #end else IF ([String]::IsNullOrEmpty($ScriptPath) -or ([String]::IsNullOrWhiteSpace($ScriptPath))) { Write-Host "DEBUG Info - Load-PowerShellModule: ScriptPath is invalid! That is terrifying! How could that be???" } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (2): $ScriptPath" -ErrorAction SilentlyContinue $Paths.Add("$ScriptPath") | Out-Null Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (3): $($ScriptPath+"\Module")" -ErrorAction SilentlyContinue $Paths.Add("$($ScriptPath+"\Module")") | Out-Null Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (4): $($ScriptPath+"\Modules")" -ErrorAction SilentlyContinue $Paths.Add("$($ScriptPath+"\Modules")") | Out-Null } #end else IF (([String]::IsNullOrEmpty((Get-Item $ScriptPath).Parent.FullName)) -or ([String]::IsNullOrWhiteSpace((Get-Item $ScriptPath).Parent.FullName))) { Write-Host "DEBUG Info - Load-PowerShellModule: ScriptPath has no Parent Folders!" } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (5): $((Get-Item $ScriptPath).Parent.FullName)" -ErrorAction SilentlyContinue $Paths.Add("$((Get-Item $ScriptPath).Parent.FullName)") | Out-Null Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (6): $(((Get-Item $ScriptPath).Parent.FullName)+"\Module")" -ErrorAction SilentlyContinue $Paths.Add("$(((Get-Item $ScriptPath).Parent.FullName)+"\Module")") | Out-Null Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (7): $(((Get-Item $ScriptPath).Parent.FullName)+"\Modules")" -ErrorAction SilentlyContinue $Paths.Add("$(((Get-Item $ScriptPath).Parent.FullName)+"\Modules")") | Out-Null } #end else IF (([String]::IsNullOrEmpty($((Get-ItemProperty -Path "$ModuleHKLMRegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath))) -or ([String]::IsNullOrWhiteSpace($((Get-ItemProperty -Path "$ModuleHKLMRegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath)))) { Write-Host "DEBUG Info - Load-PowerShellModule: ModuleSourcePath was not set to Windows Registry (HKLM)!" } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (8): $((Get-ItemProperty -Path "$ModuleHKLMRegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath)" -ErrorAction SilentlyContinue $Paths.Add("$((Get-ItemProperty -Path "$ModuleHKLMRegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath)") | Out-Null } #end else IF (([String]::IsNullOrEmpty($((Get-ItemProperty -Path "$ModuleHKCURegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath))) -or ([String]::IsNullOrWhiteSpace($((Get-ItemProperty -Path "$ModuleHKCURegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath)))) { Write-Host "DEBUG Info - Load-PowerShellModule: ModuleSourcePath was not set to Windows Registry (HKCU)!" } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Possible Path (8): $((Get-ItemProperty -Path "$ModuleHKCURegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath)" -ErrorAction SilentlyContinue $Paths.Add("$((Get-ItemProperty -Path "$ModuleHKCURegistryPath" -Name ModuleSourcePath -ErrorAction SilentlyContinue).ModuleSourcePath)") | Out-Null } #end else [Int]$Counter = 0 [String]$ModuleSourcePath = $Null #Loop for multiple Pathtests - for each Path, where psm1 files could be DO { $Counter++ Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Testing mutiple Paths ( $Counter of"($($Paths.Count)-1)") for existence, now testing:" Write-Host "DEBUG Info - Load-PowerShellModule: $($Paths[$Counter])" IF ($($Paths[$Counter]) -gt $Null) { $PathTest = Test-Path $($Paths[$Counter]) -ErrorAction SilentlyContinue IF ($PathTest -eq $true) { Write-Host "DEBUG Info - Load-PowerShellModule: Yes, Path seems to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Lets check, if there are any Module Files, in it." $FileTest = Get-ChildItem -Path $($Paths[$Counter]) -Filter *.$ModuleFileExtension IF ($($FileTest.count) -gt 0) { Write-Host "DEBUG Info - Load-PowerShellModule: Found $($FileTest.count) psm1 Module Files in Path!" Set-Variable -Name ModuleSourcePath -Value $($Paths[$Counter]) -Scope local } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Found no $ModuleFileExtension Module Files in Path!" } #end else } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: No, Path seems not to exist." } #end else } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Path seems to be invalid!" } #end else } #end do UNTIL ($Counter -ge ($($Paths.Count)-1) -or ($ModuleSourcePath -eq $($Paths[$Counter]))) IF ($ModuleSourcePath -eq $($Paths[$Counter])) { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Trying to import Module: $ModuleName.$ModuleFileExtension" Try { $Result = Import-Module $ModuleSourcePath\$ModuleName -Verbose -DisableNameChecking -Scope Global -Force:$Force -PassThru -ErrorVariable Error -ErrorAction SilentlyContinue IF ("$Result" -eq "$ModuleName") { Write-Host "DEBUG Info - Load-PowerShellModule: Successfully loaded Module: $ModuleName.$ModuleFileExtension" Return $true } #end if ELSE { Write-Error "DEBUG Info - Load-PowerShellModule: Unsuccessfully loaded Module: $ModuleName.$ModuleFileExtension" Return $False } #end else } #end try Catch { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Loading Module: $ModuleName went wrong." Write-Host "DEBUG Info - Load-PowerShellModule: Exiting Script, because of this error!" Write-Host $Error Return $False exit } #end catch } #end if ELSE { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Cant locate Module Files automaticlly!" Write-Host "DEBUG Info - Load-PowerShellModule: Please select Folder in Dialog." #Prepare Folder Browser Dialog, to choose the Directory with the .psm1 Files. $FolderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog $FolderBrowserDialog.Rootfolder = "Desktop" $FolderBrowserDialog.Description = "Please, choose the Folder, where the Module ""$ModuleName.$ModuleFileExtension"" is stored." $FolderBrowserDialog.SelectedPath = "$ScriptPath" $FolderBrowserDialog.ShowNewFolderButton = $true DO { #Now show the Folder Browser, if neccessary in a loop $FolderBrowserDialogShow = $FolderBrowserDialog.ShowDialog() #By pressing the OK Button.. If ($FolderBrowserDialogShow -eq "OK") { #Save selected folder path in the variable $ModuleSourcePath = ($FolderBrowserDialog.SelectedPath) Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: You choose: $ModuleSourcePath" Write-Host "DEBUG Info - Load-PowerShellModule: ...testing, if Module ""$ModuleName.$ModuleFileExtension"" can be found there." $PathTest = (Test-Path $ModuleSourcePath\$ModuleName.$ModuleFileExtension) IF ($PathTest -eq $True) { Write-Host "DEBUG Info - Load-PowerShellModule: Module seems to exist, in the selected Folder." Write-Host "DEBUG Info - Load-PowerShellModule: Now trying to load Module: $ModuleName.$ModuleFileExtension" Try { $Result = Import-Module $ModuleSourcePath\$ModuleName -Verbose -DisableNameChecking -Scope Global -Force:$Force -PassThru -ErrorVariable Error -ErrorAction SilentlyContinue IF ("$Result" -eq "$ModuleName") { $MessageBoxBody = "Module: $ModuleName.$ModuleFileExtension - successsfully loaded into current PSSession!" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "OK" $MessageBoxIcon = "Information" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) | Out-Null } #end if ELSE { $MessageBoxBody = "Module: $ModuleName.$ModuleFileExtension - cannot load into current PSSession!" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "OK" $MessageBoxIcon = "Warning" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) | Out-Null } #end else } #end try Catch { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Loading Module: $ModuleName.$ModuleFileExtension went wrong." Write-Host "DEBUG Info - Load-PowerShellModule: Exiting Script, because of this error!" Write-Host $Error exit } #end catch } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Module seems not to exist, in the selected Folder." Write-Host "DEBUG Info - Load-PowerShellModule: Please, select another one! ...this Time the right!" $MessageBoxBody = "Module seems not to exist, in the selected Folder! Please, select another one!" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "OK" $MessageBoxIcon = "Warning" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) | Out-Null } #end else } #end if #If you didnt pressed the OK Button.. Else { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Operation cancelled by user." Write-Host "DEBUG Info - Load-PowerShellModule: Exiting Script, because of this!" exit } #end else } #end do #Variable "$?" is $true when last operation was ok UNTIL ((($PathTest -eq $True) -and ($? -eq $true)) -or ($FolderBrowserDialogShow -eq "Cancel")) IF ($ModuleSourcePath -gt $Null) { Write-Host "" Write-Host "DEBUG Info - Load-PowerShellModule: Should ModuleSourcePath written to Windows Registry?" $MessageBoxBody = "Would you like to save the ModulePath to the Windows Registry?" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "YesNo" $MessageBoxIcon = "Question" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) IF ($MessageBox -eq 'Yes') { $PathTest = (Test-Path -Path "$ModuleHKLMRegistryPath") $MessageBox = $NULL IF ($PathTest -eq $False) { Write-Host "DEBUG Info - Load-PowerShellModule: Registry Key seems not to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Trying to write ModuleSourcepath to HKLM." Try { New-Item -Path "$ModuleHKLMRegistryPath" -Force -ErrorVariable Error -ErrorAction Stop | Out-Null New-ItemProperty -Path "$ModuleHKLMRegistryPath" -Name ModuleSourcePath -Value $ModuleSourcePath -ErrorVariable Error -ErrorAction Stop | Out-Null $env:PSModulePath = $env:PSModulePath + ";" + "$ModuleSourcePath" } #end try Catch { Write-Host $Error $MessageBoxBody = "Could not save ModuleSourcePath to Windows Registry! Check your access rights! To bypass this issue you can write the ModuleSourcePath to User Registry (HKCU). Would you?" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "YesNo" $MessageBoxIcon = "Question" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) } #end catch } #end if ELSEIF ($PathTest -eq $True) { Write-Host "DEBUG Info - Load-PowerShellModule: Registry Key seems to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Trying to write ModuleSourcepath to HKLM." Try { Set-ItemProperty -Path "$ModuleHKLMRegistryPath" -Name ModuleSourcePath -Value $ModuleSourcePath -ErrorVariable Error -ErrorAction Stop | Out-Null } #end try Catch { Write-Host $Error $MessageBoxBody = "Could not save ModuleSourcePath to Windows Registry! Check your access rights! To Bypass Error: Write ModuleSource Path to User Registry (HKCU)?" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "YesNo" $MessageBoxIcon = "Question" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) } #end catch } #end elseif ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Something went wrong, by getting the ModuleSourcePath!" Write-Host "DEBUG Info - Load-PowerShellModule: Exiting Script, because of this!" exit } #end else #Block for trying to write the ModuleSourcePath to the User Registry, if System Registry failed. IF ($MessageBox -eq 'Yes') { $PathTest = (Test-Path -Path "$ModuleHKCURegistryPath") $MessageBox = $NULL IF ($PathTest -eq $False) { Write-Host "DEBUG Info - Load-PowerShellModule: Registry Key seems not to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Trying to write ModuleSourcepath to HKCU." Try { New-Item -Path "$ModuleHKCURegistryPath" -Force -ErrorVariable Error -ErrorAction Stop | Out-Null New-ItemProperty -Path "$ModuleHKCURegistryPath" -Name ModuleSourcePath -Value $ModuleSourcePath -ErrorAction Stop | Out-Null $env:PSModulePath = $env:PSModulePath + ";" + "$ModuleSourcePath" } #end try Catch { Write-Host $Error $MessageBoxBody = "Could not save ModuleSourcePath to Windows Registry! Not even to User Registry! Check your access rights! Exiting now.." $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "OK" $MessageBoxIcon = "Warning" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) exit } #end catch } #end if ELSEIF ($PathTest -eq $True) { Write-Host "DEBUG Info - Load-PowerShellModule: Registry Key seems to exist." Write-Host "DEBUG Info - Load-PowerShellModule: Trying to write ModuleSourcepath to HKCU." Try { Set-ItemProperty -Path "$ModuleHKCURegistryPath" -Name ModuleSourcePath -Value $ModuleSourcePath -ErrorVariable Error -ErrorAction Stop | Out-Null } #end try Catch { Write-Host $Error $MessageBoxBody = "Could not save ModuleSourcePath to Windows Registry! Not even to User Registry! Check your access rights! Exiting now.." $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "OK" $MessageBoxIcon = "Warning" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) exit } #end catch } #end elseif ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Something went wrong, by getting the ModuleSourcePath!" Write-Host "DEBUG Info - Load-PowerShellModule: Exiting Script, because of this!" exit } #end else } #end if } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: You choose, not to save the ModuleSourcePath to the Windows Registry!" $MessageBoxBody = "You choose, not to save the ModuleSourcePath to the Windows Registry!" $MessageBoxTitle = "ScriptName: $ScriptName - Module/Section: Load-PowerShellModule" $MessageBoxButtonType = "OK" $MessageBoxIcon = "Warning" $MessageBox = [Windows.Forms.MessageBox]::Show($MessageBoxBody,$MessageBoxTitle,$MessageBoxButtonType,$MessageBoxIcon) } #end else } #end if ELSE { Write-Host "DEBUG Info - Load-PowerShellModule: Something went wrong, by getting the ModuleSourcePath!" Write-Host "DEBUG Info - Load-PowerShellModule: Exiting Script, because of this!" exit } #end else } #end else } #end else } #end process } #end function #[Reflection.Assembly]::LoadFrom("$ModuleDefaultSourcePath\DD_LIB_Standards.dll") #| Out-Null [DD_LIB_Standards.clsLogger]::LOGFILE_PATH=$LogPath+'\'+($LogFile.Replace('.log','.txt')) #-----------------------------------------------------------------------------------------------------# ########################################### preparing part ############################################ #-----------------------------------------------------------------------------------------------------# #Clear Console Content Clear-Host #Load external Modules - use Force ( -Force) Parameter, to reload in every run FOREACH ($Module in $Modules) { $Result = Load-PowerShellModule -ModuleName $Module -Force IF ($Result -eq $False) { Write-Host "DEBUG Info: Module: $Module was not succesful been loaded!" Write-Host "DEBUG Info: Please load the Module and try again, running this Function/Module!" Write-Host "DEBUG Info: Exiting, because of this Issue." Write-Host $Error EXIT } #end if } #end foreach #Allocate Variable Values, depending on the read ConfigFile Set-Variable -Scope Global -Name LogPaths -Value (Read-ConfigFile -ConfigLabel LogPath -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name LogFileKeepTime -Value (Read-ConfigFile -ConfigLabel LogFileKeepTime -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name VersionSeperator -Value (Read-ConfigFile -ConfigLabel VersionSeperator -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name FileDelayAge -Value (Read-ConfigFile -ConfigLabel FileDelayAge -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name SMTPDomains -Value (Read-ConfigFile -ConfigLabel SMTPDomains -ConfigLinesValue MultiValue) -Force Set-Variable -Scope Global -Name SourcePath -Value (Read-ConfigFile -ConfigLabel SourcePath -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name SourcePathRecurse -Value (Read-ConfigFile -ConfigLabel SourcePathRecurse -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name EMailAddressToRegEx -Value (Read-ConfigFile -ConfigLabel EMailAddressToRegEx -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name EMailAddressFromRegEx -Value (Read-ConfigFile -ConfigLabel EMailAddressFromRegEx -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name WDObjecttyp -Value (Read-ConfigFile -ConfigLabel WDObjecttyp -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name WDIndexEMailTo -Value (Read-ConfigFile -ConfigLabel WDIndexEMailTo -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name WDIndexEMailFrom -Value (Read-ConfigFile -ConfigLabel WDIndexEMailFrom -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name WDIndexEMailDate -Value (Read-ConfigFile -ConfigLabel WDIndexEMailDate -ConfigLinesValue SingleValue) -Force Set-Variable -Scope Global -Name WDIndexEMailSubject -Value (Read-ConfigFile -ConfigLabel WDIndexEMailSubject -ConfigLinesValue SingleValue) -Force #-----------------------------------------------------------------------------------------------------# ############################################# main part ############################################### #-----------------------------------------------------------------------------------------------------# Write-Logfile -LogLine " " Write-Logfile -LogLine "********************************************************************************" Write-Logfile -LogLine "Program Startup: $ScriptName on $env:COMPUTERNAME," Write-Logfile -LogLine "from Account $env:USERDOMAIN\$env:USERNAME." Write-Logfile -LogLine "********************************************************************************" IF ($SourcePath) { $PathTest = Test-Path -Path "$SourcePath" -PathType Container -ErrorAction SilentlyContinue Write-Logfile -LogLine " " Write-Logfile -LogLine "Checking the set SourcePath: $SourcePath" IF ($PathTest -eq $True) { IF ($SourcePathRecurse -like "True") { Write-Logfile -LogLine "Recurse mode is enabled!" $Items = Get-ChildItem -Path "$SourcePath" -Recurse -Force -ErrorAction SilentlyContinue -Filter "*.$EMLFileExtension" | where {$_.lastwritetime -lt $((Get-Date).AddMinutes(-$FileDelayAge)) -and -not $_.psiscontainer} } #end if ELSE { Write-Logfile -LogLine "Recurse mode is disabled!" $Items = Get-ChildItem -Path "$SourcePath" -Force -ErrorAction SilentlyContinue -Filter "*.$EMLFileExtension" | where {$_.lastwritetime -lt $((Get-Date).AddMinutes(-$FileDelayAge)) -and -not $_.psiscontainer} } #end else IF ($Items.count -gt 0) { Write-Logfile -LogLine " " Write-Logfile -LogLine "Found $($Items.count) $EMLFileExtension File(s) in SourcePath!" FOREACH ($Item in $Items) { Write-Logfile -LogLine " " Write-Logfile -LogLine "--------------------------------------------------------------------------------" Write-Logfile -LogLine "Processing File: $($Item.FullName)" Write-Logfile -LogLine "--------------------------------------------------------------------------------" #Retrieve EML Object $EMLObject = Load-EMLFile-withLogging -EMLFileName $($Item.FullName) Write-Logfile -LogLine " " Write-Logfile -LogLine "----------------- Getting EML Attributes... (unfilterd!) -----------------------" Write-Logfile -LogLine "EML Attribut TO:" Write-Logfile -LogLine "-> $($EMLObject.To)" Write-Logfile -LogLine "EML Attribut FROM:" Write-Logfile -LogLine "-> $($EMLObject.FROM)" Write-Logfile -LogLine "EML Attribut SentOn Date:" Write-Logfile -LogLine "-> $($EMLObject.SentOn)" Write-Logfile -LogLine "EML Attribut Subject:" Write-Logfile -LogLine "-> $($EMLObject.Subject)" Write-Logfile -LogLine "--------------------------------------------------------------------------------" #Prepare dynamic Arrays [System.Collections.ArrayList]$EMailAddressesTo = @() [System.Collections.ArrayList]$EMailAddressesFrom = @() [System.Collections.ArrayList]$EMailAddressesTEMP = @() #$SMTPDomains = $($SMTPDomains.tochararray()) #Get E-Mail To Attribut IF (($EMLObject.TO).count -gt 0) { Write-Logfile -LogLine " " Write-LogFile -LogLine "Found $($EMLObject.TO.Count) E-Mail Adress(es) in the TO Attribut." [Array]$EMailAddressesTEMP = ($EMLObject.TO) [Array]$EMailAddressesTEMP = ($EMailAddressesTEMP -Split ',') [Array]$EMailAddressesTEMP = ($EMailAddressesTEMP -Split ';') [Array]$EMailAddressesTEMP = ($EMailAddressesTEMP -Split ' ') FOREACH ($EMailAddressTEMP in $EMailAddressesTEMP) { $EMailAddressTEMP = ($EMailAddressTEMP -Replace('\<|\>|\(|\)|\[|\]|\"|\s\,\;\:\=\\','')) $EMailAddressTEMP = ($EMailAddressTEMP -Replace("'","")) $EMailAddressTEMP = ($EMailAddressTEMP.TrimStart()) $EMailAddressTEMP = ($EMailAddressTEMP.TrimEnd()) $EMailAddressTEMP = ($EMailAddressTEMP.ToLower()) $EMailAddressTEMP = ($EMailAddressTEMP | Select-String -Pattern $SMTPDomains -AllMatches) #Fill array, if Value is greater than $NULL IF ($EMailAddressTEMP) { Write-Host "DEBUG Info: Current Value (EML TO Attribut from EML Object) is valid!" Write-Host "DEBUG Info: $EMailAddressTEMP" $EMailAddressesTO.Add($EMailAddressTEMP) } #end if ELSE { Write-Host "DEBUG Info: Current Value (EML TO Attribut from EML Object) is invalid!" } #end else } #end foreach [Array]$EMailAddressesTo = $EMailAddressesTo | Sort-Object [Array]$EMailAddressesTo = $EMailAddressesTo | Select -Unique [String]$EMailAddressesTEMP = $EMailAddressesTo | Out-String -Stream [String]$EMailAddressesTo = $NULL [String]$EMailAddressesTo = $EMailAddressesTEMP [String]$EMailAddressesTo = $EMailAddressesTo.TrimStart() [String]$EMailAddressesTo = $EMailAddressesTo.TrimEnd() [String]$EMailAddressesTo = $EMailAddressesTo.Replace(" ",", ") [String]$EMailAddressTEMP = $NULL [Array]$EMailAddressesTEMP = $NULL Write-Logfile -LogLine " " Write-Logfile -LogLine "-----------------This is the final EML Object TO String:------------------------" Write-LogFile -LogLine "$EMailAddressesTo" Write-Logfile -LogLine "--------------------------------------------------------------------------------" } #end if ELSE { Write-LogFile -LogLine " " Write-LogFile -LogLine "Found none valid E-Mail adress(es)in the To Attribut for this Mail, via EML Object." Write-LogFile -LogLine "Now trying via EML Sourcecode!" Try { $EMLFileContent = $NULL $EMLFileContent = Get-Content $($Item.FullName) $EMailAddressesTEMP = [RegEx]::Matches($EMLFileContent, $EMailAddressToRegEx) $EMailAddressesTEMP = ($EMailAddressesTEMP -split " ") } #end try Catch { Write-LogFile -LogLine "Cannot get Sourcecode from EMLFile: $($Item.FullName)" } #end catch Finally { FOREACH ($EMailAddressTEMP in $EMailAddressesTEMP) { $EMailAddressTEMP = ($EMailAddressTEMP -Replace('\<|\>|\(|\)|\[|\]|\"|\s\,\;\:\=\\','')) $EMailAddressTEMP = ($EMailAddressTEMP -Replace("'","")) $EMailAddressTEMP = ($EMailAddressTEMP.TrimStart()) $EMailAddressTEMP = ($EMailAddressTEMP.TrimEnd()) $EMailAddressTEMP = ($EMailAddressTEMP.ToLower()) $EMailAddressTEMP = ($EMailAddressTEMP | Select-String -Pattern $SMTPDomains -AllMatches) IF ($EMailAddressTEMP) { Write-Host "DEBUG Info: Current Value (EML TO Attribut from EML Sourcecode) is valid!" Write-Host "DEBUG Info: $EMailAddressTEMP" $EMailAddressesTO.Add($EMailAddressTEMP) } #end if ELSE { Write-Host "DEBUG Info: Current Value (EML TO Attribut from EML Sourcecode) is invalid!" } #end else } #end foreach [String]$EMailAddressesTEMP = $EMailAddressesTo | Out-String -Stream [String]$EMailAddressesTo = $NULL [String]$EMailAddressesTo = $EMailAddressesTEMP [String]$EMailAddressesTo = $EMailAddressesTo.TrimStart() [String]$EMailAddressesTo = $EMailAddressesTo.TrimEnd() [String]$EMailAddressesTo = $EMailAddressesTo.Replace(" ",", ") [String]$EMailAddressTEMP = $NULL [Array]$EMailAddressesTEMP = $NULL Write-Logfile -LogLine "----------------This is the final EML Sourcecode TO String:---------------------" Write-LogFile -LogLine "$EMailAddressesTo" Write-Logfile -LogLine "--------------------------------------------------------------------------------" } #end finally } #end else #Get E-Mail From Attribut IF (($EMLObject.From) -match "$SMTPDomains") { Write-LogFile -LogLine " " Write-LogFile -LogLine "Found $($EMLObject.From.Count) E-Mail Adresses in the FROM Attribut." [Array]$EMailAddressesTEMP = ($EMLObject.FROM) [Array]$EMailAddressesTEMP = ($EMailAddressesTEMP -Split ',') [Array]$EMailAddressesTEMP = ($EMailAddressesTEMP -Split ';') [Array]$EMailAddressesTEMP = ($EMailAddressesTEMP -Split ' ') FOREACH ($EMailAddressTEMP in $EMailAddressesTEMP) { $EMailAddressTEMP = ($EMailAddressTEMP -Replace('\<|\>|\(|\)|\[|\]|\"|\s\,\;\:\=\\','')) $EMailAddressTEMP = ($EMailAddressTEMP -Replace("'","")) $EMailAddressTEMP = ($EMailAddressTEMP.TrimStart()) $EMailAddressTEMP = ($EMailAddressTEMP.TrimEnd()) $EMailAddressTEMP = ($EMailAddressTEMP.ToLower()) $EMailAddressTEMP = ($EMailAddressTEMP | Select-String -Pattern $SMTPDomains -AllMatches) #Fill array, if Value is greater than $NULL IF ($EMailAddressTEMP) { Write-Host "DEBUG Info: Current Value (EML FROM Attribut from EML Object) is valid!" Write-Host "DEBUG Info: $EMailAddressTEMP" $EMailAddressesFrom.Add($EMailAddressTEMP) } #end if ELSE { Write-Host "DEBUG Info: Current Value (EML FROM Attribut from EML Object) is invalid!" } #end else } #end foreach [Array]$EMailAddressesFrom = $EMailAddressesFrom | Sort-Object [Array]$EMailAddressesFrom = $EMailAddressesFrom | Select -Unique [String]$EMailAddressesTEMP = $EMailAddressesFrom | Out-String -Stream [String]$EMailAddressesFrom = $NULL [String]$EMailAddressesFrom = $EMailAddressesTEMP [String]$EMailAddressesFrom = $EMailAddressesFrom.TrimStart() [String]$EMailAddressesFrom = $EMailAddressesFrom.TrimEnd() [String]$EMailAddressesFrom = $EMailAddressesFrom.Replace(" ",", ") [String]$EMailAddressTEMP = $NULL [Array]$EMailAddressesTEMP = $NULL Write-Logfile -LogLine "---------------This is the final EML Object FROM String:------------------------" Write-LogFile -LogLine "$EMailAddressesFrom" Write-Logfile -LogLine "--------------------------------------------------------------------------------" } #end if ELSE { Write-LogFile -LogLine " " Write-LogFile -LogLine "Found none valid E-Mail adress(es)in the From Attribut for this Mail, via EML Object." Write-LogFile -LogLine "Now trying via EML Sourcecode!" Try { $EMLFileContent = $NULL $EMLFileContent = Get-Content $($Item.FullName) $EMailAddressesTEMP = [RegEx]::Matches($EMLFileContent, $EMailAddressFromRegEx) | Select-Object -First 1 $EMailAddressesTEMP = ($EMailAddressesTEMP -split " ") } #end try Catch { Write-LogFile -LogLine "Cannot get Sourcecode from EMLFile: $($Item.FullName)" } #end catch Finally { FOREACH ($EMailAddressTEMP in $EMailAddressesTEMP) { $EMailAddressTEMP = ($EMailAddressTEMP -Replace('\<|\>|\(|\)|\[|\]|\"|\s\,\;\:\=\\','')) $EMailAddressTEMP = ($EMailAddressTEMP -Replace("'","")) $EMailAddressTEMP = ($EMailAddressTEMP.TrimStart()) $EMailAddressTEMP = ($EMailAddressTEMP.TrimEnd()) $EMailAddressTEMP = ($EMailAddressTEMP.ToLower()) $EMailAddressTEMP = (($EMailAddressTEMP | Select-String -Pattern $SMTPDomains -AllMatches | Select-Object -First 1)) IF ($EMailAddressTEMP) { Write-Host "DEBUG Info: Current Value (EML FROM Attribut from EML Sourcecode) is valid!" Write-Host "DEBUG Info: $EMailAddressTEMP" $EMailAddressesFrom.Add($EMailAddressTEMP) } #end if ELSE { Write-Host "DEBUG Info: Current Value (EML FROM Attribut from EML Sourcecode) is invalid!" } #end else } #end foreach [Array]$EMailAddressesFrom = $EMailAddressesFrom | Sort-Object [Array]$EMailAddressesFrom = $EMailAddressesFrom | Select -Unique [String]$EMailAddressesTEMP = $EMailAddressesFrom | Out-String -Stream [String]$EMailAddressesFrom = $NULL [String]$EMailAddressesFrom = $EMailAddressesTEMP [String]$EMailAddressesFrom = $EMailAddressesFrom.TrimStart() [String]$EMailAddressesFrom = $EMailAddressesFrom.TrimEnd() [String]$EMailAddressesFrom = $EMailAddressesFrom.Replace(" ",", ") [String]$EMailAddressTEMP = $NULL [Array]$EMailAddressesTEMP = $NULL Write-Logfile -LogLine "---------------This is the final EML Sourcecode FROM String:--------------------" Write-LogFile -LogLine "$EMailAddressesFrom" Write-Logfile -LogLine "--------------------------------------------------------------------------------" } #end finally } #end else #Get E-Mail Date Attribut IF (($EMLObject.SentOn).count -eq 1) { Write-Logfile -LogLine " " Write-LogFile -LogLine "Found Date Value - $($EMLObject.SentOn) - seems to be valid!" $EMailDateSentOn = $($EMLObject.SentOn) $EMailDateSentOnTEMP = $EMailDateSentOn -split " " $EMailDateSentOn = $EMailDateSentOnTEMP[0] [Array]$EMailDateSentOn = $EMailDateSentOn -Split "/" [String]$EMailDateSentOn = ($EMailDateSentOn[1]+'.'+$EMailDateSentOn[0]+'.'+$EMailDateSentOn[2]) Write-Logfile -LogLine "-----------------This is the final EML Object SentOn Date-----------------------" Write-LogFile -LogLine "$EMailDateSentOn" Write-Logfile -LogLine "--------------------------------------------------------------------------------" } #end if ELSE { Write-LogFile -LogLine "Found Date Value seems to be invalid!" } #end else #Get E-Mail Subject Attribut IF (($EMLObject.Subject).count -eq 1) { Write-Logfile -LogLine " " Write-LogFile -LogLine "Found Subject Value - $($EMLObject.Subject) - seems to be valid!" $EMailSubject = $($EMLObject.Subject) $EMailSubject = $EMailSubject.TrimStart() $EMailSubject = $EMailSubject.TrimEnd() Write-Logfile -LogLine "--------------------This is the final EML Object Subject------------------------" Write-LogFile -LogLine "$EMailSubject" Write-Logfile -LogLine "--------------------------------------------------------------------------------" } #end if ELSE { Write-LogFile -LogLine "Found Subject Value seems to be invalid!" } #end else #Start indexing if all Values are set IF (($EMailAddressesTo) -and ($EMailAddressesFrom) -and ($EMailDateSentOn) -and ($EMailSubject)) { Write-Logfile -LogLine " " Write-Logfile -LogLine "All required Values are set!" #Creating windream Session $Result = $NULL $Result = [DD_LIB_Standards.clsWindream]::Create_Session() IF ($Result -like "True") { Write-Logfile -LogLine "windream Session created!" #Check for exisiting File $Result = $NULL $Result = [DD_LIB_Standards.clsWD_GET]::WDFile_exists($($Item.FullName)) IF ($Result -like "True") { Try { Write-Logfile -LogLine " " Write-Logfile -LogLine "Starting indexing..." Write-Logfile -LogLine "Indexing: WDIndexEMailTo in windream Index: $WDIndexEMailTo with: $EMailAddressesTo (Objecttype is: $WDObjecttyp)!" $Result =[DD_LIB_Standards.clsWD_SET]::IndexFile($($Item.FullName),"$WDIndexEMailTo","$EMailAddressesTo","$WDObjecttyp") Write-Logfile -LogLine "Index was successfully been set (True = OK | False = not OK): $Result" Write-Logfile -LogLine "Indexing: WDIndexEMailFrom in windream Index: $WDIndexEMailFrom with: $EMailAddressesFrom (Objecttype is: $WDObjecttyp)!" $Result = [DD_LIB_Standards.clsWD_SET]::IndexFile($($Item.FullName),"$WDIndexEMailFrom","$EMailAddressesFrom","$WDObjecttyp") Write-Logfile -LogLine "Index was successfully been set (True = OK | False = not OK): $Result" Write-Logfile -LogLine "Indexing: WDIndexEMailDate in windream Index: $WDIndexEMailDate with: $EMailDateSentOn (Objecttype is: $WDObjecttyp)!" $Result = [DD_LIB_Standards.clsWD_SET]::IndexFile($($Item.FullName),"$WDIndexEMailDate","$EMailDateSentOn","$WDObjecttyp") Write-Logfile -LogLine "Index was successfully been set (True = OK | False = not OK): $Result" Write-Logfile -LogLine "Indexing: WDIndexEMailSubject in windream Index: $WDIndexEMailSubject with: $EMailSubject (Objecttype is: $WDObjecttyp)!" $Result = [DD_LIB_Standards.clsWD_SET]::IndexFile($($Item.FullName),"$WDIndexEMailSubject","$EMailSubject","$WDObjecttyp") Write-Logfile -LogLine "Index was successfully been set (True = OK | False = not OK): $Result" Write-Logfile -LogLine "Indexing completed!" } #end try Catch { Write-Logfile -LogLine "Indexing went wrong!" Write-Logfile -LogLine "Check the additional LogFile, please." Write-Logfile -LogLine "windream Indexing stopped!" } #end catch } #end if ELSE { Write-Logfile -LogLine "Cannot access File anymore!" Write-Logfile -LogLine "windream Indexing stopped!" } #end else } #end if ELSE { Write-Logfile -LogLine "Cannot create windream Session!" Write-Logfile -LogLine "windream Indexing stopped!" } #end else } #end if ELSE { Write-Logfile -LogLine "Not all required Values are set!" Write-Logfile -LogLine "windream Indexing stopped!" Write-Logfile -LogLine "$EMailAddressesTo" Write-Logfile -LogLine "$EMailAddressFrom" Write-Logfile -LogLine "$EMailDateSentOn" Write-Logfile -LogLine "$EMailSubject" } #end else } #end foreach } #end if ELSE { Write-Logfile -LogLine " " Write-Logfile -LogLine "Found no valid $EMLFileExtension Files in SourcePath!" } #end else } #end if ELSE { Write-Logfile -LogLine " " Write-Logfile -LogLine "Error accessing SourcePath!" } #end if } #end if ELSE { Write-Logfile -LogLine " " Write-Logfile -LogLine "Invalid SourcePath, check the ConfigFile!" } #end else Write-Logfile -LogLine " " Write-Logfile -LogLine "--------------------------------------------------------------------------------" Write-Logfile -LogLine "Checking for old LogFiles." Write-Logfile -LogLine "--------------------------------------------------------------------------------" Remove-Item-withLogging -Path $LogPath -FileKeepTime $LogFileKeepTime -FileBaseName $ScriptName Write-Logfile -LogLine " " Write-Logfile -LogLine "********************************************************************************" Write-Logfile -LogLine "Program Completed: $ScriptName on $env:COMPUTERNAME," Write-Logfile -LogLine "from Account $env:USERDOMAIN\$env:USERNAME." Write-Logfile -LogLine "********************************************************************************" #-----------------------------------------------------------------------------------------------------# ########################################### finishing part ############################################ #-----------------------------------------------------------------------------------------------------# Remove-Variable -Name ScriptName -Force -ErrorAction SilentlyContinue Remove-Variable -Name ScriptPath -Force -ErrorAction SilentlyContinue Remove-Variable -Name ConfigFile -Force -ErrorAction SilentlyContinue Remove-Variable -Name ConfigValues -Force -ErrorAction SilentlyContinue Remove-Variable -Name Timestamp1 -Force -ErrorAction SilentlyContinue Remove-Variable -Name Timestamp2 -Force -ErrorAction SilentlyContinue Remove-Variable -Name Timestamp3 -Force -ErrorAction SilentlyContinue Remove-Variable -Name Timestamp4 -Force -ErrorAction SilentlyContinue Remove-Variable -Name Item -Force -ErrorAction SilentlyContinue Remove-Variable -Name Items -Force -ErrorAction SilentlyContinue Remove-Variable -Name VersionSeperator -Force -ErrorAction SilentlyContinue Remove-Variable -Name FileDelayAge -Force -ErrorAction SilentlyContinue Remove-Variable -Name FileTest -Force -ErrorAction SilentlyContinue Remove-Variable -Name FileTest2 -Force -ErrorAction SilentlyContinue Remove-Variable -Name FileTest3 -Force -ErrorAction SilentlyContinue Remove-Variable -Name PathTest -Force -ErrorAction SilentlyContinue Remove-Variable -Name PathTest2 -Force -ErrorAction SilentlyContinue Remove-Variable -Name PathTests -Force -ErrorAction SilentlyContinue Remove-Variable -Name Result -Force -ErrorAction SilentlyContinue Remove-Variable -Name Counter1 -Force -ErrorAction SilentlyContinue Remove-Variable -Name LogFile -Force -ErrorAction SilentlyContinue Remove-Variable -Name LogFileKeepTime -Force -ErrorAction SilentlyContinue Remove-Variable -Name LogPath -Force -ErrorAction SilentlyContinue Remove-Variable -Name LogPaths -Force -ErrorAction SilentlyContinue Remove-Variable -Name Module -Force -ErrorAction SilentlyContinue Remove-Variable -Name Modules -Force -ErrorAction SilentlyContinue Remove-Variable -Name ModuleOverrideSourcePath -Force -ErrorAction SilentlyContinue Remove-Variable -Name ModuleDefaultSourcePath -Force -ErrorAction SilentlyContinue Remove-Variable -Name ModuleHKLMRegistryPath -Force -ErrorAction SilentlyContinue Remove-Variable -Name ModuleHKCURegistryPath -Force -ErrorAction SilentlyContinue Remove-Variable -Name SMTPDomains -Force -ErrorAction SilentlyContinue Remove-Variable -Name SourcePath -Force -ErrorAction SilentlyContinue Remove-Variable -Name SourcePathRecurse -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMLFile -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMLFileExtension -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMLFileContent -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMLObject -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressTEMP -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressesTEMP -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressTo -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressToRegEx -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressesTo -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressFrom -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressFromRegEx -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailAddressesFrom -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailDateSentOn -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailDateSentOnTEMP -Force -ErrorAction SilentlyContinue Remove-Variable -Name EMailSubject -Force -ErrorAction SilentlyContinue Remove-Variable -Name WDObjecttyp -Force -ErrorAction SilentlyContinue Remove-Variable -Name WDIndexEMailTo -Force -ErrorAction SilentlyContinue Remove-Variable -Name WDIndexEMailFrom -Force -ErrorAction SilentlyContinue Remove-Variable -Name WDIndexEMailDate -Force -ErrorAction SilentlyContinue Remove-Variable -Name WDIndexEMailSubject -Force -ErrorAction SilentlyContinue $error.clear()