SparKURS.DAW/Process-ADObjects-Utility.ps1
2026-07-05 13:11:37 +02:00

293 lines
No EOL
8.3 KiB
PowerShell
Executable file

function convertUTF8ToASCII
{
param ([Parameter(Mandatory = $true, Position = 0)] [String]$utf8Text)
$utf8TextBytes = [system.text.encoding]::UTF8.GetBytes($utf8Text)
$asciiText = [system.text.encoding]::convert([text.encoding]::UTF8, [text.encoding]::ASCII, $utf8TextBytes)
-join [system.text.encoding]::ASCII.GetChars($asciiText)
}
function checkInstitute
{
param([parameter(position = 0)][string]$instituteSign)
return $Config.SPK.ContainsKey($instituteSign)
}
function getTimeStamp
{
param ([Parameter(Mandatory = $false, Position = 0)][string]$formatString = "yyyyMMddHHmmss")
$now = Get-Date
return $now.ToString($formatString)
}
function outLog
{
$timestamp = Get-Date
$outString = $timestamp.ToString("HH:mm:ss.mmm") + ": "
for ($i = 0; $i -lt $args.count; $i++)
{
$j = $i + 1
$outString += $args[$i]
}
if ($previuosTime)
{
$outString += ($end - $start)
}
$outString | Tee-Object -FilePath $LogFileName -Append | Write-Host
}
function outScreen
{
$timestamp = Get-Date
$outString = $timestamp.ToString("HH:mm:ss.mmm") + ": "
for ($i = 0; $i -lt $args.count; $i++)
{
$j = $i + 1
$outString += $args[$i]
}
if ($previuosTime)
{
$outString += ($end - $start)
}
Write-Host $outString
}
function checkInput
{
param([parameter(position = 0)][string]$spk)
$spk = $spk.ToUpperInvariant()
if ([string]::IsNullOrEmpty($spk))
{
if (isProbablyDevelopmentUser)
{
Write-Host "no given Institute (parameter '-sparkasse'), using default" $Config.DefaultInstitute
$spk = $Config.DefaultInstitute.ToUpperInvariant()
}
else
{
while ($true)
{
$spk = $(Read-Host "please enter Institute Parameter (parameter '-sparkasse'), 'Ctrl-C for exit'" ).ToUpperInvariant()
if ([string]::IsNullOrEmpty($spk))
{
continue
}
elseif (checkInstitute($spk))
{
break
}
else
{
Write-Host "this institute is not in our list of wellknown institutes: "
Write-Host ($Config.SPK | Format-Table | Out-String)
continue
}
}
}
}
elseif (-not (checkInstitute($spk)))
{
# Write-Host "edmond"
Write-Host "this institute is not in our list of wellknown institutes: "
Write-Host ($Config.SPK | Format-Table | Out-String)
exit
}
return $spk
}
function checkInputSourceFiles
{
if (-not $InstitutsSourcePath)
{
Write-Host "Source file does not exist: " $InstitutsSourcePath
return $false
}
if (-not $InstitutsSourcePathKURS)
{
Write-Host "Source file does not exist: " $InstitutsSourcePathKURS
return $false
}
return $true
}
function checkInputDataFiles
{
$ok = $true
if (-not $ADObjectsFilePath)
{
outLog "no ADObjectsFile found !"
$ok = $false
}
if (-not $ADObjectMembershipsFilePath)
{
outLog "no ADObjectsFile found !"
$ok = $false
}
if (-not $ADApplicationsInFilePath)
{
outLog "no ADApplicationsInFile found !"
$ok = $false
}
if (-not $ADDirectoriesInFilePath)
{
outLog "no ADDirectoriesInFile found !"
$ok = $false
}
if (-not $SecurityInFilePath)
{
outLog "no SecurityInFile found !"
$ok = $false
}
if (-not $KURSPositionsInFilePath)
{
outLog "no KURSPositionsInFile found !"
$ok = $false
}
if (-not $KURSEmployeesInFilePath)
{
outLog "no KURSEmployeesInFile found !"
$ok = $false
}
$ADObjectsFileTimeStamp = (Get-ChildItem $ADObjectsFilePath).BaseName.Split("_")[2]
$ADObjectMembershipsFileTimeStamp = (Get-ChildItem $ADObjectMembershipsFilePath).BaseName.Split("_")[2]
if ($ADObjectsFileTimeStamp -ne $ADObjectMembershipsFileTimeStamp)
{
outLog "TimeStamps of latest input files found are not equal: ADObjectsFileTimeStamp:" $ADObjectsFileTimeStamp "ADObjectMembershipsFileTimeStamp: " $ADObjectMembershipsFileTimeStamp ", stopping process !"
$ok = $false
}
return $ok
}
function checkTestMode
{
if ($Config.TestMode -gt 0)
{
outLog "entering TestMode, reading the first" $Config.TestMode "ADObject-entries for every roletype"
return $true
}
outLog "entering ProductionMode, reading all entries"
return $false
}
function isProbablyDevelopmentUser
{
$userName = [Environment]::UserName
if ($userName -ieq "edmond")
{
Write-Host "developer" $userName "found"
return $true
}
elseif ($userName -ieq "burgwink")
{
Write-Host "developer" $userName "found"
return $true
}
return $false
}
function dumpVar
{
param([object]$member)
Write-Host ($member | Format-Table -Force | Out-String)
}
function dumpConfig
{
dumpVar($Config)
}
function stringReverse
{
param ([Parameter(Mandatory = $true, Position = 0)][string]$text)
$textArray = $Text.ToCharArray()
[Array]::Reverse($textArray)
-join $textArray
}
function stringArrayReverseToCommaSeparatedString
{
param ([Parameter(Mandatory = $true, Position = 0)] [String[]]$stringArray)
[Array]::Reverse($stringArray)
$outString = $stringArray -join ',' | Out-String
return $outString
}
function stringArrayReverseToCommaSeparatedStringReturn
{
param ([Parameter(Mandatory = $true, Position = 0)] [String[]]$stringArray)
[Array]::Reverse($stringArray)
$outString = $stringArray -join ',' | Out-String
return $outString
}
function stringArrayReverseToCommaSeparatedStringWriteOutput
{
param ([Parameter(Mandatory = $true, Position = 0)] [String[]]$stringArray)
[Array]::Reverse($stringArray)
$outString = $stringArray -join ',' | Out-String
Write-Output $outString
}
function stringArrayReverseToCommaSeparatedStringEcho
{
param ([Parameter(Mandatory = $true, Position = 0)] [String[]]$stringArray)
[Array]::Reverse($stringArray)
$stringArray -join ','
}
function moveToInstituteTmpPath
{
param
(
[Parameter(Mandatory = $true, Position = 0)]
[string]$filePath,
[Parameter(Mandatory = $false, Position = 1)]
[bool]$force = $false
)
$fileName = [System.IO.Path]::GetFileName($filePath)
$tmpFilePath = $InstituteRootPathTmp + "/" + $fileName
if ($force)
{
Remove-Item -Path $tmpFilePath -ErrorAction Ignore
}
Move-Item -Path $filePath -Destination $InstituteRootPathTmp
return $tmpFilePath
}
function convertUTF8ToASCII
{
param ([Parameter(Mandatory = $true, Position = 0)][string]$text)
$utf8Text = [system.text.encoding]::UTF8.GetBytes($text)
$asciiText = [system.text.encoding]::convert([text.encoding]::UTF8, [text.encoding]::ASCII, $utf8Text)
-join [system.text.encoding]::ASCII.GetChars($asciiText)
}
function writeExceptionInfoReduced
{
param([Parameter(Mandatory)][System.Management.Automation.ErrorRecord]$ErrorRecord)
Write-Host "=== EXCEPTION ===" -ForegroundColor Red
Write-Host "Message : $($ErrorRecord.Exception.Message)" -ForegroundColor Red
Write-Host "Type : $($ErrorRecord.Exception.GetType().FullName)" -ForegroundColor Yellow
Write-Host $ErrorRecord.InvocationInfo.PositionMessage
Write-Host "ScriptStackTrace:" -ForegroundColor Yellow
Write-Host $ErrorRecord.ScriptStackTrace
}
function writeExceptionInfo
{
param(
[Parameter(Mandatory = $true, Position = 0)]
[System.Management.Automation.ErrorRecord]$ErrorRecord,
[switch]$Rethrow
)
Write-Host "=== EXCEPTION ===" -ForegroundColor Red
Write-Host "Message : $($ErrorRecord.Exception.Message)" -ForegroundColor Red
Write-Host "Type : $($ErrorRecord.Exception.GetType().FullName)" -ForegroundColor Yellow
Write-Host $ErrorRecord.InvocationInfo.PositionMessage
Write-Host "ScriptStackTrace:" -ForegroundColor Yellow
Write-Host $ErrorRecord.ScriptStackTrace
if ($Rethrow)
{
throw $ErrorRecord
}
}