8
0
Skriptentwickung/archive/Start-ConnectionHelper/Start-ConnectionHelper.ps1
2024-01-24 16:42:38 +01:00

946 lines
41 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#PowerShell 3.0 Script
#This Script will check the windream Connectivity, and restart Client Components if necessary.
#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.0.0
#Version Date: 24.01.2017
#Requires Version 3.0
#-----------------------------------------------------------------------------------------------------#
######################################## check for arguments ##########################################
#-----------------------------------------------------------------------------------------------------#
Param (
[Parameter(Mandatory=$False,HelpMessage='Optional Parameter. By calling this Script with Parameter "-argOperationMode interactive", you will get MessageBox Notifications for successful or unsuccessful Operations. Default Value is "background".')]
[ValidateSet("interactive","background")]
[String]$argOperationMode="background"
) #end Param
Write-Host ""
Write-Host "DEBUG Info: Argument Call for OperationMode (-argOperationMode) is:"
Write-Host "DEBUG Info: $argOperationMode"
#-----------------------------------------------------------------------------------------------------#
###################################### add additional 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 -Filter "$ScriptName`_Settings.ini" -File -Force).FullName
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 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 LogPaths -Value $NULL
Set-Variable -Scope Global -Name Module -Value $NULL
Set-Variable -Scope Global -Name Modules -Value ("Write-LogFile","Read-ConfigFile","Remove-Item-withLogging")
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 Item -Value $NULL
Set-Variable -Scope Global -Name Items -Value $NULL
Set-Variable -Scope Global -Name argOperationMode -Value $argOperationMode
Set-Variable -Scope Global -Name MessageBoxBody -Value $NULL
Set-Variable -Scope Global -Name MessageBoxTitle -Value $NULL
Set-Variable -Scope Global -Name MessageBoxButtonType -Value $NULL
Set-Variable -Scope Global -Name MessageBoxIcon -Value $NULL
Set-Variable -Scope Global -Name MessageBox -Value $NULL
Set-Variable -Scope Global -Name Result -Value $NULL
Set-Variable -Scope Global -Name PathTest -Value $NULL
Set-Variable -Scope Global -Name ProcessTest -Value $NULL
Set-Variable -Scope Global -Name PingTarget -Value $NULL
Set-Variable -Scope Global -Name ConnectionApp01 -Value $NULL
Set-Variable -Scope Global -Name ConnectionParameter01 -Value $NULL
Set-Variable -Scope Global -Name Domain -Value $env:computername
Set-Variable -Scope Global -Name UserName -Value $NULL
Set-Variable -Scope Global -Name UserPassword -Value $NULL
Set-Variable -Scope Global -Name UserPasswordSecure -Value $NULL
Set-Variable -Scope Global -Name UserCredential -Value $NULL
Set-Variable -Scope Global -Name StartCMDFile01 -Value $NULL
Set-Variable -Scope Global -Name UICultureForce -Value $($Host.CurrentUICulture.Name)
#-----------------------------------------------------------------------------------------------------#
############################################ 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
<NONE>
.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
#-----------------------------------------------------------------------------------------------------#
########################################### 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
#Read ConfigFile, to get all values
Set-Variable -Scope Global -Name ConfigValues -Value (Read-ConfigFile -ConfigFile $ConfigFile) -Force
#Allocate Variable Values, depending on the read ConfigFile
Set-Variable -Scope Global -Name LogPaths -Value (Read-ConfigFile -ConfigLabel LogPath) -Force
Set-Variable -Scope Global -Name LogFileKeepTime -Value (Read-ConfigFile -ConfigLabel LogFileKeepTime) -Force
Set-Variable -Scope Global -Name UICultureForce -Value (Read-ConfigFile -ConfigLabel UICultureForce) -Force
Set-Variable -Scope Global -Name PingTarget -Value (Read-ConfigFile -ConfigLabel PingTarget) -Force
Set-Variable -Scope Global -Name ConnectionApp01 -Value (Read-ConfigFile -ConfigLabel ConnectionApp01) -Force
Set-Variable -Scope Global -Name ConnectionParameter01 -Value (Read-ConfigFile -ConfigLabel ConnectionParameter01) -Force
Set-Variable -Scope Global -Name Domain -Value (Read-ConfigFile -ConfigLabel Domain) -Force
Set-Variable -Scope Global -Name UserName -Value (Read-ConfigFile -ConfigLabel UserName) -Force
Set-Variable -Scope Global -Name UserPassword -Value (Read-ConfigFile -ConfigLabel UserPassword) -Force
Set-Variable -Scope Global -Name StartCMDFile01 -Value (Read-ConfigFile -ConfigLabel StartCMDFile01) -Force
#Load language File(s), if load fails -> preset Hashtable from the "set variables" section, will be used.
Write-Host "DEBUG Info: Current UICulture is: $($Host.CurrentUICulture.Name), the forced UICulture is: $UICultureForce"
Import-LocalizedData -BaseDirectory (Join-Path -Path $ScriptPath -ChildPath Localized) -BindingVariable UICultureData -FileName UICultureData.psd1 -ErrorAction SilentlyContinue -UICulture $UICultureForce
#-----------------------------------------------------------------------------------------------------#
############################################# 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 "********************************************************************************"
$PathTest = (Test-Connection -Count 1 -ComputerName $PingTarget -Quiet)
IF ($PathTest -eq $True) {
Write-Logfile -LogLine " "
Write-Logfile -LogLine "Ping Test to $PingTarget was successful!"
Write-Logfile -LogLine "No further connection actions required!"
IF ($StartCMDFile01) {
Write-Logfile -LogLine "Starting additional Batch Script."
$RunCMD = Start-Process cmd.exe -ArgumentList "/c $StartCMDFile01" -Passthru
Wait-Process -ID $RunCMD.Id -Timeout 60 -ErrorAction Stop
} #end if
ELSE {
Write-Logfile -LogLine "Additional Batch Script, will not be started."
} #end else
} #end if
ELSE {
Write-Logfile -LogLine " "
Write-Logfile -LogLine "--------------------------------------------------------------------------------"
Write-Logfile -LogLine "Ping Test to $PingTarget was unsuccessful!"
Write-Logfile -LogLine "Trying to establish a connection..."
Write-Logfile -LogLine "--------------------------------------------------------------------------------"
$ProcessTest = (Get-Process -Name ((($ConnectionApp01.split("\"))[-1]).split("."))[0] -ErrorAction SilentlyContinue)
IF (!$ProcessTest) {
Write-Logfile -LogLine "$ConnectionApp01 is not started yet, starting it..."
Try {
Write-Logfile -LogLine "Starting Connection..."
#Call with Args and Auth
IF (($ConnectionParameter01) -and ($UserName)) {
Write-Host "DEBUG INFO: Call with Args and Auth"
$UserPasswordSecure = ConvertTo-SecureString $UserPassword -AsPlainText -Force
$UserCredential = New-Object System.Management.Automation.PSCredential $($Domain+"\"+$UserName), $UserPasswordSecure
Start-Process $ConnectionApp01 -ArgumentList $ConnectionParameter01 -Credential $UserCredential -PassThru
} #end if
#Call with Args but without Auth
ELSEIF (($ConnectionParameter01) -and (!$UserName)) {
Write-Host "DEBUG INFO: Call with Args but without Auth"
Start-Process $ConnectionApp01 -ArgumentList $ConnectionParameter01 -PassThru
} #end elseif
#Call without Args but with Auth
ELSEIF ($UserName) {
Write-Host "DEBUG INFO: Call without Args but with Auth"
$UserPasswordSecure = ConvertTo-SecureString $UserPassword -AsPlainText -Force
$UserCredential = New-Object System.Management.Automation.PSCredential $($Domain+"\"+$UserName), $UserPasswordSecure
Start-Process $ConnectionApp01 -Credential $UserCredential -PassThru
} #end elseif
#Call without Args and without Auth
ELSEIF (($ConnectionParameter01) -and (!$UserName)) {
Write-Host "DEBUG INFO: Call without Args and without Auth"
Start-Process $ConnectionApp01 -PassThru
} #end elseif
ELSE {
Write-Logfile -LogLine " "
Write-Logfile -LogLine "WARNING: Incorrect Settings in INI File!"
Write-Logfile -LogLine "$ConnectionApp01"
Write-Logfile -LogLine "$ConnectionParameter01"
Write-Logfile -LogLine "$Domain"
Write-Logfile -LogLine "$UserName"
Write-Logfile -LogLine "$UserPassword"
} #end else
Write-LogFile -LogLine "Program start seems to be fine!"
Write-LogFile -LogLine "Now waiting for 25 Seconds until next steps..."
Start-Sleep -Seconds 25
} #end try
Catch {
Write-Logfile -LogLine "Cannot start the Connection!"
Write-Logfile -LogLine "Check the given credentials, please!"
} #end catch
} #end if
ELSE {
Write-Logfile -LogLine "$ConnectionApp01 has already been started!"
} #end else
$PathTest = (Test-Connection -Count 1 -ComputerName $PingTarget -Quiet)
IF ($PathTest -eq $True) {
Write-Logfile -LogLine "Ping Test is ok, now!"
IF ($StartCMDFile01) {
Write-Logfile -LogLine "Starting additional Batch Script."
$RunCMD = Start-Process cmd.exe -ArgumentList "/c $StartCMDFile01" -Passthru
Wait-Process -ID $RunCMD.Id -Timeout 60 -ErrorAction Stop
} #end if
ELSE {
Write-Logfile -LogLine "Additional Batch Script, will not be started."
} #end else
} #end if
ELSE {
Write-Logfile -LogLine "Ping Test is still not ok!"
} #end else
} #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 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 Item -Force -ErrorAction SilentlyContinue
Remove-Variable -Name Items -Force -ErrorAction SilentlyContinue
Remove-Variable -Name argOperationMode -Force -ErrorAction SilentlyContinue
Remove-Variable -Name MessageBoxBody -Force -ErrorAction SilentlyContinue
Remove-Variable -Name MessageBoxTitle -Force -ErrorAction SilentlyContinue
Remove-Variable -Name MessageBoxButtonType -Force -ErrorAction SilentlyContinue
Remove-Variable -Name MessageBoxIcon -Force -ErrorAction SilentlyContinue
Remove-Variable -Name MessageBox -Force -ErrorAction SilentlyContinue
Remove-Variable -Name Result -Force -ErrorAction SilentlyContinue
Remove-Variable -Name PathTest -Force -ErrorAction SilentlyContinue
Remove-Variable -Name ProcessTest -Force -ErrorAction SilentlyContinue
Remove-Variable -Name PingTarget -Force -ErrorAction SilentlyContinue
Remove-Variable -Name ConnectionApp01 -Force -ErrorAction SilentlyContinue
Remove-Variable -Name ConnectionParameter01 -Force -ErrorAction SilentlyContinue
Remove-Variable -Name Domain -Force -ErrorAction SilentlyContinue
Remove-Variable -Name UserName -Force -ErrorAction SilentlyContinue
Remove-Variable -Name UserPassword -Force -ErrorAction SilentlyContinue
Remove-Variable -Name UserPasswordSecure -Force -ErrorAction SilentlyContinue
Remove-Variable -Name UserCredential -Force -ErrorAction SilentlyContinue
Remove-Variable -Name StartCMDFile01 -Force -ErrorAction SilentlyContinue
Remove-Variable -Name UICultureForce -Force -ErrorAction SilentlyContinue
Remove-Variable -Name UICultureData -Force -ErrorAction SilentlyContinue
$error.clear()