changed: verboseoutlog to outlog (reducing runtime)

This commit is contained in:
Edmond Gebara 2026-07-06 22:19:54 +02:00
parent 9acdffdbb8
commit 9e18f320cd
9 changed files with 434 additions and 437 deletions

View file

@ -17,7 +17,7 @@ per institute (down from 10 h; do not regress this).
| `Process-ADObjects.ps1` | Main entry, loads config, dot-sources the rest | | `Process-ADObjects.ps1` | Main entry, loads config, dot-sources the rest |
| `Process-ADObjects-Configuration.ps1` | `$Config` hashtable: institutes, GroupManagementMappings, flags (`TestMode`, `Verbose`, ...). Pure data, no logic | | `Process-ADObjects-Configuration.ps1` | `$Config` hashtable: institutes, GroupManagementMappings, flags (`TestMode`, `Verbose`, ...). Pure data, no logic |
| `Process-ADObjects-Base.ps1` | Core lookups: membership index (`newObjectMembershipsIndex`, `getObjectMemberships`, `getUsersByMemberGroup`), `getRoleType`, prefix matcher (`buildPrefixMatcher`, `testKnownPrefixes`) | | `Process-ADObjects-Base.ps1` | Core lookups: membership index (`newObjectMembershipsIndex`, `getObjectMemberships`, `getUsersByMemberGroup`), `getRoleType`, prefix matcher (`buildPrefixMatcher`, `testKnownPrefixes`) |
| `Process-ADObjects-Utility.ps1` | Logging (`openLog`/`closeLog`/`outLog`/`outLogVerbose`), input checks, exception helpers, `removeDuplicatesFromSortedList` | | `Process-ADObjects-Utility.ps1` | Logging (`openLog`/`closeLog`/`outLog`/`### outLogVerbose`), input checks, exception helpers, `removeDuplicatesFromSortedList` |
| `Process-ADObjects-Work.ps1` | Institute dispatch | | `Process-ADObjects-Work.ps1` | Institute dispatch |
| `Process-ADObjects-Work-R125.ps1` / `-Y015.ps1` | Per-institute processing. Structurally identical copies (deduplication planned). Sections: FileSystemAccess, AppAccess, AppConfiguration, Organisation, Security, Anwenderrollen; then post-processing (sort → dedup → Neu derivation → file writes) | | `Process-ADObjects-Work-R125.ps1` / `-Y015.ps1` | Per-institute processing. Structurally identical copies (deduplication planned). Sections: FileSystemAccess, AppAccess, AppConfiguration, Organisation, Security, Anwenderrollen; then post-processing (sort → dedup → Neu derivation → file writes) |
| `Process-ADObjects-Analyze.ps1` | AD object analysis. Known incomplete; cleanup planned | | `Process-ADObjects-Analyze.ps1` | AD object analysis. Known incomplete; cleanup planned |
@ -28,7 +28,7 @@ per institute (down from 10 h; do not regress this).
- **English** for all code, comments, identifiers, log messages. German only in chat. - **English** for all code, comments, identifiers, log messages. German only in chat.
- **Allman** brace style (opening brace on its own line). - **Allman** brace style (opening brace on its own line).
- **`utf8NoBom`** for every file output; LF is fine (runs on macOS/pwsh 7). - **`utf8NoBom`** for every file output; LF is fine (runs on macOS/pwsh 7).
- No `Write-Host` in processing code — use `outLog` / `outLogVerbose`. - No `Write-Host` in processing code — use `outLog` / `### outLogVerbose`.
Exceptions: the output helpers themselves (`outLog`, `outScreen`, `dumpVar`, Exceptions: the output helpers themselves (`outLog`, `outScreen`, `dumpVar`,
`writeExceptionInfo*`). `writeExceptionInfo*`).
- Institute code is parameterized via `$SPKID` (e.g. "R125") and `$SPKNO` - Institute code is parameterized via `$SPKID` (e.g. "R125") and `$SPKNO`
@ -44,7 +44,7 @@ per institute (down from 10 h; do not regress this).
- `outLog ... -ToScreen $false` — file only. Named parameter only; positional - `outLog ... -ToScreen $false` — file only. Named parameter only; positional
args all go to the message (`PositionalBinding=$false` + args all go to the message (`PositionalBinding=$false` +
`ValueFromRemainingArguments`). `ValueFromRemainingArguments`).
- `outLogVerbose <args...>` — trace layer, gated by `$Config.Verbose`, never to - `### outLogVerbose <args...>` — trace layer, gated by `$Config.Verbose`, never to
screen. ~440 call sites instrument every loop iteration and if/elseif/else screen. ~440 call sites instrument every loop iteration and if/elseif/else
branch. With `Verbose = $true` a full run writes millions of lines — use branch. With `Verbose = $true` a full run writes millions of lines — use
`TestMode` for verbose runs. `TestMode` for verbose runs.

View file

@ -1,7 +1,7 @@
function analyzeADObjects function analyzeADObjects
{ {
Param param
( (
[Parameter(Mandatory = $false, Position = 0)] [Parameter(Mandatory = $false, Position = 0)]
[bool] $startParallel = $false [bool] $startParallel = $false
@ -18,7 +18,7 @@ function analyzeADObjects
if ($startParallel) if ($startParallel)
{ {
outLogVerbose 'if ($startParallel) -> true' ### outLogVerbose 'if ($startParallel) -> true'
Start-ThreadJob -ScriptBlock { $adObjectsOrganisation += analyzeADObjectsByType $FI.TypeTagOrganisation} Start-ThreadJob -ScriptBlock { $adObjectsOrganisation += analyzeADObjectsByType $FI.TypeTagOrganisation}
Start-ThreadJob -ScriptBlock { $adObjectsAppAccess += analyzeADObjectsByType $FI.TypeTagAppAccess} Start-ThreadJob -ScriptBlock { $adObjectsAppAccess += analyzeADObjectsByType $FI.TypeTagAppAccess}
Start-ThreadJob -ScriptBlock { $adObjectsFilesystemAccess += analyzeADObjectsByType $FI.TypeTagFilesystemAccess} Start-ThreadJob -ScriptBlock { $adObjectsFilesystemAccess += analyzeADObjectsByType $FI.TypeTagFilesystemAccess}
@ -28,7 +28,7 @@ function analyzeADObjects
} }
else else
{ {
outLogVerbose 'else -> true (if/elseif ($startParallel) -> false)' ### outLogVerbose 'else -> true (if/elseif ($startParallel) -> false)'
$adObjectsOrganisation += analyzeADObjectsByType $FI.TypeTagOrganisation $adObjectsOrganisation += analyzeADObjectsByType $FI.TypeTagOrganisation
$adObjectsAppAccess += analyzeADObjectsByType $FI.TypeTagAppAccess $adObjectsAppAccess += analyzeADObjectsByType $FI.TypeTagAppAccess
$adObjectsFilesystemAccess += analyzeADObjectsByType $FI.TypeTagFilesystemAccess $adObjectsFilesystemAccess += analyzeADObjectsByType $FI.TypeTagFilesystemAccess
@ -63,7 +63,7 @@ function analyzeDirectoryPaths
function analyzeADObjectsByType function analyzeADObjectsByType
{ {
Param param
( (
[Parameter(Mandatory = $true, Position = 0)] [Parameter(Mandatory = $true, Position = 0)]
[String] $typeTag [String] $typeTag
@ -77,92 +77,92 @@ function analyzeADObjectsByType
foreach ($adObject in $ADObjects) foreach ($adObject in $ADObjects)
{ {
outLogVerbose 'foreach $adObject in $ADObjects:' $adObject.ObjectName outLogVerbose 'foreach $adObject in $ADObjects:' $adObject.ObjectName
if (-Not ($adObject.Description)) if (-not ($adObject.Description))
{ {
outLogVerbose 'if (-Not ($adObject.Description)) -> true' ### outLogVerbose 'if (-Not ($adObject.Description)) -> true'
$adObject.Description = $Config.EmptyDescription $adObject.Description = $Config.EmptyDescription
} }
if ($typeTag -ieq $FI.TypeTagAppConfiguration) if ($typeTag -ieq $FI.TypeTagAppConfiguration)
{ {
outLogVerbose 'if ($typeTag -ieq $FI.TypeTagAppConfiguration) -> true' ### outLogVerbose 'if ($typeTag -ieq $FI.TypeTagAppConfiguration) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter)
{ {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) -> true'
$userMemberShips = getAllUserMemberships $adObject $userMemberShips = getAllUserMemberships $adObject
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppConfiguration.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppConfiguration.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) if ($IsTestMode -and ($counter -gt $Config.TestMode) )
{ {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagAppAccess) elseif ($typeTag -ieq $FI.TypeTagAppAccess)
{ {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagAppAccess) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagAppAccess) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter)
{ {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) -> true'
$userMemberShips = getAllUserMemberships $adObject $userMemberShips = getAllUserMemberships $adObject
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) if ($IsTestMode -and ($counter -gt $Config.TestMode) )
{ {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess)
{ {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter)
{ {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) -> true'
$userMemberShips = getAllUserMemberships $adObject $userMemberShips = getAllUserMemberships $adObject
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.FilesystemAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.FilesystemAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) if ($IsTestMode -and ($counter -gt $Config.TestMode) )
{ {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagOrganisation) elseif ($typeTag -ieq $FI.TypeTagOrganisation)
{ {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagOrganisation) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagOrganisation) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter)
{ {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) -> true'
$userMemberShips = getAllUserMemberships $adObject $userMemberShips = getAllUserMemberships $adObject
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Organisation.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Organisation.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) if ($IsTestMode -and ($counter -gt $Config.TestMode) )
{ {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagSecurity) elseif ($typeTag -ieq $FI.TypeTagSecurity)
{ {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagSecurity) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagSecurity) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter)
{ {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) -> true'
$userMemberShips = getAllUserMemberships $adObject $userMemberShips = getAllUserMemberships $adObject
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Security.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Security.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) if ($IsTestMode -and ($counter -gt $Config.TestMode) )
{ {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }

View file

@ -37,7 +37,7 @@ function getObjectMemberships
} }
else else
{ {
outLogVerbose 'else -> true (if/elseif (?) -> false)' ### outLogVerbose 'else -> true (if/elseif (?) -> false)'
@($bucket) @($bucket)
} }
@ -60,7 +60,7 @@ function getAllUserMemberships
$groupMemberships = @(getObjectMemberships $adObjectEntry.ObjectName "group" "group") $groupMemberships = @(getObjectMemberships $adObjectEntry.ObjectName "group" "group")
foreach ($groupMembership in $groupMemberships) foreach ($groupMembership in $groupMemberships)
{ {
outLogVerbose 'foreach $groupMembership in $groupMemberships:' $groupMembership.MemberName ### outLogVerbose 'foreach $groupMembership in $groupMemberships:' $groupMembership.MemberName
$result.AddRange(@(getObjectMemberships $groupMembership.MemberName "user" "group")) $result.AddRange(@(getObjectMemberships $groupMembership.MemberName "user" "group"))
} }
return @($result) return @($result)
@ -81,7 +81,7 @@ function getUsersByMemberGroup
} }
else else
{ {
outLogVerbose 'else -> true (if/elseif (?) -> false)' ### outLogVerbose 'else -> true (if/elseif (?) -> false)'
@($bucket) @($bucket)
} }
return $result return $result
@ -118,18 +118,18 @@ function newObjectMembershipsIndex
foreach ($entry in $ADObjectMemberships) foreach ($entry in $ADObjectMemberships)
{ {
outLogVerbose 'foreach $entry in $ADObjectMemberships:' $entry.GroupName ### outLogVerbose 'foreach $entry in $ADObjectMemberships:' $entry.GroupName
$key = getMembershipIndexKey $($entry.GroupName) $($entry.MemberClass) $key = getMembershipIndexKey $($entry.GroupName) $($entry.MemberClass)
$key0 = "$($entry.GroupName)`0$($entry.MemberClass)".ToLowerInvariant() $key0 = "$($entry.GroupName)`0$($entry.MemberClass)".ToLowerInvariant()
if (-not($key -eq $key0)) if (-not($key -eq $key0))
{ {
outLogVerbose 'if (-not($key -eq $key0)) -> true' ### outLogVerbose 'if (-not($key -eq $key0)) -> true'
throw "this is BAAAD" throw "this is BAAAD"
} }
$bucket = $index[$key] $bucket = $index[$key]
if ($null -eq $bucket) if ($null -eq $bucket)
{ {
outLogVerbose 'if ($null -eq $bucket) -> true' ### outLogVerbose 'if ($null -eq $bucket) -> true'
$bucket = [System.Collections.Generic.List[object]]::new() $bucket = [System.Collections.Generic.List[object]]::new()
$index[$key] = $bucket $index[$key] = $bucket
} }
@ -152,17 +152,17 @@ function getRoleType
$relevantRoleTypes = $SPK.GroupManagementMappings | Where-Object {$_.OU -ieq $typeTag} | Sort-Object { [int]$_.Order } $relevantRoleTypes = $SPK.GroupManagementMappings | Where-Object {$_.OU -ieq $typeTag} | Sort-Object { [int]$_.Order }
foreach ($relevantRoleType in $relevantRoleTypes) foreach ($relevantRoleType in $relevantRoleTypes)
{ {
outLogVerbose 'foreach $relevantRoleType in $relevantRoleTypes:' $relevantRoleType.TypeName ### outLogVerbose 'foreach $relevantRoleType in $relevantRoleTypes:' $relevantRoleType.TypeName
if ($adObjectEntry.OldName -cmatch $relevantRoleType.TagRegExp) if ($adObjectEntry.OldName -cmatch $relevantRoleType.TagRegExp)
{ {
outLogVerbose 'if ($adObjectEntry.OldName -cmatch $relevantRoleType.TagRegExp) -> true' ### outLogVerbose 'if ($adObjectEntry.OldName -cmatch $relevantRoleType.TagRegExp) -> true'
$roleType = $relevantRoleType.TypeName $roleType = $relevantRoleType.TypeName
break break
} }
} }
if (($typeTag -ieq $FI.TypeTagSecurity) -and ($roleType -ieq "unknown")) if (($typeTag -ieq $FI.TypeTagSecurity) -and ($roleType -ieq "unknown"))
{ {
outLogVerbose 'if (($typeTag -ieq $FI.TypeTagSecurity) -and ($roleType -ieq "unknown")) -> true' ### outLogVerbose 'if (($typeTag -ieq $FI.TypeTagSecurity) -and ($roleType -ieq "unknown")) -> true'
$roleType = "GPO" $roleType = "GPO"
} }
return $roletype return $roletype
@ -177,7 +177,7 @@ function buildPrefixMatcher
if (-not (Test-Path $CsvPath)) if (-not (Test-Path $CsvPath))
{ {
outLogVerbose 'if (-not (Test-Path $CsvPath)) -> true' ### outLogVerbose 'if (-not (Test-Path $CsvPath)) -> true'
throw "Prefix CSV not found: $CsvPath" throw "Prefix CSV not found: $CsvPath"
} }
@ -185,11 +185,11 @@ function buildPrefixMatcher
foreach ($row in $SPK.ProfilPrefixes) foreach ($row in $SPK.ProfilPrefixes)
{ {
outLogVerbose 'foreach $row in $SPK.ProfilPrefixes:' $row ### outLogVerbose 'foreach $row in $SPK.ProfilPrefixes:' $row
$prefix = $row.Prefix $prefix = $row.Prefix
if ([string]::IsNullOrEmpty($prefix)) if ([string]::IsNullOrEmpty($prefix))
{ {
outLogVerbose 'if ([string]::IsNullOrEmpty($prefix)) -> true' ### outLogVerbose 'if ([string]::IsNullOrEmpty($prefix)) -> true'
continue continue
} }
@ -197,7 +197,7 @@ function buildPrefixMatcher
$bucket = $null $bucket = $null
if (-not $byLength.TryGetValue($len, [ref] $bucket)) if (-not $byLength.TryGetValue($len, [ref] $bucket))
{ {
outLogVerbose 'if (-not $byLength.TryGetValue($len, [ref] $bucket)) -> true' ### outLogVerbose 'if (-not $byLength.TryGetValue($len, [ref] $bucket)) -> true'
$bucket = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) $bucket = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal)
$byLength[$len] = $bucket $byLength[$len] = $bucket
} }
@ -223,24 +223,24 @@ function testKnownPrefixes
if ([string]::IsNullOrEmpty($Value)) if ([string]::IsNullOrEmpty($Value))
{ {
outLogVerbose 'if ([string]::IsNullOrEmpty($Value)) -> true' ### outLogVerbose 'if ([string]::IsNullOrEmpty($Value)) -> true'
return $false return $false
} }
$valueLen = $Value.Length $valueLen = $Value.Length
foreach ($len in $Matcher.Lengths) foreach ($len in $Matcher.Lengths)
{ {
outLogVerbose 'foreach $len in $Matcher.Lengths:' $len ### outLogVerbose 'foreach $len in $Matcher.Lengths:' $len
if ($len -gt $valueLen) if ($len -gt $valueLen)
{ {
outLogVerbose 'if ($len -gt $valueLen) -> true' ### outLogVerbose 'if ($len -gt $valueLen) -> true'
continue continue
} }
$candidate = $Value.Substring(0, $len) $candidate = $Value.Substring(0, $len)
$bucket = $Matcher.ByLength[$len] $bucket = $Matcher.ByLength[$len]
if ($bucket.Contains($candidate)) if ($bucket.Contains($candidate))
{ {
outLogVerbose 'if ($bucket.Contains($candidate)) -> true' ### outLogVerbose 'if ($bucket.Contains($candidate)) -> true'
return $true return $true
} }
} }

View file

@ -14,9 +14,9 @@ function TestExcel {
$colCount = $workSheet.UsedRange.LastColumn $colCount = $workSheet.UsedRange.LastColumn
for ($i = 2; $i -le $rowCount; $i++) { for ($i = 2; $i -le $rowCount; $i++) {
outLogVerbose 'for ($i = 2; $i -le $rowCount; $i++) iteration:' $i outLog ('for ($i = 2; $i -le $rowCount; $i++) iteration: ' + $i)
for ($j = 1; $j -le $colCount; $j++) { for ($j = 1; $j -le $colCount; $j++) {
outLogVerbose 'for ($j = 1; $j -le $colCount; $j++) iteration:' $j ### outLogVerbose 'for ($j = 1; $j -le $colCount; $j++) iteration:' $j
$value = $workSheet.Range[$i, $j].DisplayText $value = $workSheet.Range[$i, $j].DisplayText
$newValue = $value -replace "`n", " --- " -replace "`r", " --- " -replace ";", "--" -replace "`"", "'" $newValue = $value -replace "`n", " --- " -replace "`r", " --- " -replace ";", "--" -replace "`"", "'"
$workSheet.Range[$i, $j].Text = $newValue $workSheet.Range[$i, $j].Text = $newValue

View file

@ -1,4 +1,3 @@
function convertUTF8ToASCII function convertUTF8ToASCII
{ {
param ([Parameter(Mandatory = $true, Position = 0)] [String]$utf8Text) param ([Parameter(Mandatory = $true, Position = 0)] [String]$utf8Text)
@ -89,6 +88,7 @@ function removeDuplicatesFromSortedList
param param
( (
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[AllowEmptyCollection()]
[System.Collections.Generic.List[string]] $List, [System.Collections.Generic.List[string]] $List,
[Parameter(Mandatory = $false)] [Parameter(Mandatory = $false)]
[string] $ListName = "list" [string] $ListName = "list"
@ -344,13 +344,6 @@ function moveToInstituteTmpPath
return $tmpFilePath 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 function writeExceptionInfoReduced

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -8,17 +8,17 @@ function prepareADObjectsByType {
$counter = 1 $counter = 1
$count = $ADObjects.Count $count = $ADObjects.Count
foreach ($adObject in $ADObjects) { foreach ($adObject in $ADObjects) {
outLogVerbose 'foreach $adObject in $ADObjects:' $adObject.ObjectName outLog ('foreach $adObject in $ADObjects: ' + $adObject.ObjectName)
if (-Not ($adObject.Description)) { if (-Not ($adObject.Description)) {
outLogVerbose 'if (-Not ($adObject.Description)) -> true' ### outLogVerbose 'if (-Not ($adObject.Description)) -> true'
$adObject.Description = $Config.EmptyDescription $adObject.Description = $Config.EmptyDescription
} }
$currentADObject = $null $currentADObject = $null
if ($typeTag -ieq $FI.TypeTagAppConfiguration) { if ($typeTag -ieq $FI.TypeTagAppConfiguration) {
outLogVerbose 'if ($typeTag -ieq $FI.TypeTagAppConfiguration) -> true' ### outLogVerbose 'if ($typeTag -ieq $FI.TypeTagAppConfiguration) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) { if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppConfiguration.Filter) -> true'
$userMemberShips = @() $userMemberShips = @()
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppConfiguration.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppConfiguration.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.AppConfiguration.ShortCut + ";" + $adObject.Description $adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.AppConfiguration.ShortCut + ";" + $adObject.Description
@ -26,15 +26,15 @@ function prepareADObjectsByType {
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) { if ($IsTestMode -and ($counter -gt $Config.TestMode) ) {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagAppAccess) { elseif ($typeTag -ieq $FI.TypeTagAppAccess) {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagAppAccess) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagAppAccess) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) { if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.AppAccess.Filter) -> true'
$userMemberShips = @() $userMemberShips = @()
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.AppAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.AppAccess.ShortCut + ";" + $adObject.Description $adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.AppAccess.ShortCut + ";" + $adObject.Description
@ -42,15 +42,15 @@ function prepareADObjectsByType {
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) { if ($IsTestMode -and ($counter -gt $Config.TestMode) ) {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) { elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagFileSystemAccess) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) { if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.FilesystemAccess.Filter) -> true'
$userMemberShips = @() $userMemberShips = @()
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.FilesystemAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.FilesystemAccess.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.FilesystemAccess.ShortCut + ";" + $adObject.Description $adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.FilesystemAccess.ShortCut + ";" + $adObject.Description
@ -58,15 +58,15 @@ function prepareADObjectsByType {
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) { if ($IsTestMode -and ($counter -gt $Config.TestMode) ) {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagOrganisation) { elseif ($typeTag -ieq $FI.TypeTagOrganisation) {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagOrganisation) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagOrganisation) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) { if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Organisation.Filter) -> true'
$userMemberShips = @() $userMemberShips = @()
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Organisation.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Organisation.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.Organisation.ShortCut + ";" + $adObject.Description $adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.Organisation.ShortCut + ";" + $adObject.Description
@ -74,15 +74,15 @@ function prepareADObjectsByType {
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) { if ($IsTestMode -and ($counter -gt $Config.TestMode) ) {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagSecurity) { elseif ($typeTag -ieq $FI.TypeTagSecurity) {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagSecurity) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagSecurity) -> true'
if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) { if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) {
outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) -> true' ### outLogVerbose 'if ($adObject.OU -cmatch $FI.RelevantGroups.Security.Filter) -> true'
$userMemberShips = @() $userMemberShips = @()
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Security.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Security.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.Security.ShortCut + ";" + $adObject.Description $adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.Security.ShortCut + ";" + $adObject.Description
@ -90,16 +90,16 @@ function prepareADObjectsByType {
$adGroupObjects += $adObjectEntry $adGroupObjects += $adObjectEntry
$counter++ $counter++
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) { if ($IsTestMode -and ($counter -gt $Config.TestMode) ) {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }
} }
elseif ($typeTag -ieq $FI.TypeTagRole) { elseif ($typeTag -ieq $FI.TypeTagRole) {
outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagRole) -> true' ### outLogVerbose 'elseif ($typeTag -ieq $FI.TypeTagRole) -> true'
if ($adObject.OU -like "*Anwenderrollen*") { if ($adObject.OU -like "*Anwenderrollen*") {
outLogVerbose 'if ($adObject.OU -like "*Anwenderrollen*") -> true' ### outLogVerbose 'if ($adObject.OU -like "*Anwenderrollen*") -> true'
$userMemberShips = @() $userMemberShips = @()
$adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Role.ShortCut; Description = $adObject.Description; Users = $userMemberShips} $adObjectEntry = @{ObjectName = $adObject.ObjectName; Path = $adObject.OU; ShortCut = $FI.RelevantGroups.Role.ShortCut; Description = $adObject.Description; Users = $userMemberShips}
$adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.Role.ShortCut + ";" + $adObject.Description $adObjectFileEntry = $adObject.ObjectName + ";" + $adObject.OU + ";" + $FI.RelevantGroups.Role.ShortCut + ";" + $adObject.Description
@ -109,7 +109,7 @@ function prepareADObjectsByType {
if ($IsTestMode -and ($counter -gt $Config.TestMode) ) { if ($IsTestMode -and ($counter -gt $Config.TestMode) ) {
outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true' ### outLogVerbose 'if ($IsTestMode -and ($counter -gt $Config.TestMode)) -> true'
break break
} }
} }

0
Process-ADObjects.ps1 Executable file → Normal file
View file