1897 lines
78 KiB
PowerShell
1897 lines
78 KiB
PowerShell
function ProcessADObjects
|
||
{
|
||
param
|
||
(
|
||
[Parameter(Mandatory = $true, Position = 0)]
|
||
$adObjectEntries,
|
||
[Parameter(Mandatory = $true, Position = 1)]
|
||
[String] $roletypeTag
|
||
)
|
||
$begin = Get-Date
|
||
outLog "ProcessADObjects called at: " $begin $init
|
||
|
||
$adObjectEntries | Add-Member OldName ""
|
||
$adObjectEntries | Add-Member GroupName ""
|
||
$adObjectEntries | Add-Member GUIADGroupName ""
|
||
$adObjectEntries | Add-Member GUIADGroupDisplayName ""
|
||
|
||
$DAWGruppenAnlegenOutList = [System.Collections.Generic.List[string]]::new()
|
||
$DAWGruppenverwaltungOutList = [System.Collections.Generic.List[string]]::new()
|
||
$DAWGruppenverwaltungNeuOutList = [System.Collections.Generic.List[string]]::new()
|
||
$KURSSollProfileOutList = [System.Collections.Generic.List[string]]::new()
|
||
$KURSIstMitarbeiterProfileOutList = [System.Collections.Generic.List[string]]::new()
|
||
|
||
|
||
# Mitarbeiter einlesen und Persnr zu S-Userid in Array speichern
|
||
$MitarbeiterEntries = Get-Content -Path $MitarbeiterInFilePath | ConvertFrom-Csv -Delimiter ";"
|
||
$mitarbeiter_array = @{ "mitarbeiter" = "mitarbeiter" }
|
||
$mitarbeiterStelle_array = @{ "mitarbeiter" = "stelle" }
|
||
foreach ($item in $MitarbeiterEntries)
|
||
{
|
||
if ([System.String]::IsNullOrEmpty($item.Benutzerkennung))
|
||
{
|
||
continue
|
||
}
|
||
try
|
||
{
|
||
$mitarbeiter_array.Add($item.Benutzerkennung,([string]$item.Personalnummer).PadLeft(10, '0'))
|
||
$oe = $item."OE-Schl$( [char]0x00fc )ssel"
|
||
$stelle = ($item.'St.-Nr.').PadLeft(4, '0')
|
||
$dum = $oe + "/" + $stelle
|
||
$mitarbeiterStelle_array.Add($item.Benutzerkennung, $dum)
|
||
}
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
}
|
||
|
||
$pkey_array = @{ "key" = 0 }
|
||
$rbkey_array = @{ "key" = 0 }
|
||
|
||
# FileSystemAccess ---------------------------------------------
|
||
if ($roletypeTag -ieq $FI.TypeTagFilesystemAccess)
|
||
{
|
||
# ToDo: Anwendungszugriff: Mapping #$AnwendungenFilePath $item.Verzeichnisname, Anwendungen werden nicht gefunden
|
||
try
|
||
{
|
||
|
||
$DirectoriesFilePath = $DirectoriesInFilePath
|
||
|
||
$AnwendungenFilePath = $ApplicationsInFilePath
|
||
$AnwendungenFilePathEntries = Get-Content -Path $AnwendungenFilePath | ConvertFrom-Csv -Delimiter ";"
|
||
$nummer_array = @{ "nummer" = "nummer" }
|
||
|
||
foreach ($item in $AnwendungenFilePathEntries)
|
||
{
|
||
if ([System.String]::IsNullOrEmpty($item.Verzeichnisname))
|
||
{
|
||
continue
|
||
}
|
||
try
|
||
{
|
||
Write-Host $item.Verzeichnisname + $item.'Nr.'
|
||
$nummer_array[$item.Verzeichnisname] = $item.'Nr.'
|
||
}
|
||
# Leere Eintraege
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
}
|
||
|
||
|
||
# UTF / ANSI conflict workaround
|
||
# $DirectoriesFilePathEntries = Get-Content -Path $DirectoriesFilePath | ConvertFrom-Csv -Delimiter ";"
|
||
|
||
# Einlesen der Datei XXXX_Verzeichnisse.csv
|
||
# "Verzeichnisname" -> wird verwendet
|
||
# "Normierter Pfad" -> wird verwendet
|
||
# "Kontrolle"
|
||
# "Endpunktname"
|
||
# "Verzeichnisbuchstabe"
|
||
# "Verzeichnisart" -> wird verwendet
|
||
# "AWNR" -> wird verwendet
|
||
# "Anwendungskuerzel" -> wird verwendet
|
||
# "Gruppe Lesen" -> wird verwendet
|
||
# "Gruppe Aendern" -> wird verwendet
|
||
# "Benutzer mit Leserecht"
|
||
# "Benutzer mit Aenderungsrecht"
|
||
# "Rollen mit Leserecht"
|
||
# "Rollen mit Aenderungsrecht"
|
||
# "Name Verantwortlicher"
|
||
# "Verantwortlicher (Stelle oder Personalnummer)" -> wird verwendet
|
||
|
||
#$header = "Verzeichnisname", "Normierter Pfad" , "Kontrolle" , "Endpunktname", "Verzeichnisbuchstabe", "Verzeichnisart", "AWNR", "Anwendungskuerzel", "Gruppe Lesen", "Gruppe Aendern", "Benutzer mit Leserecht", "Benutzer mit Aenderungsrecht", "Rollen mit Leserecht", "Rollen mit Aenderungsrecht", "Name Verantwortlicher", "Verantwortlicher (Stelle oder Personalnummer)"
|
||
|
||
$header = "Verzeichnisname", "Normierter Pfad", "Verzeichnisart", "AWNR", "Anwendungskuerzel", "Gruppe Lesen", "Gruppe Aendern", "Verantwortlicher (Stelle oder Personalnummer)"
|
||
$DirectoriesFilePathEntries = Get-Content -Path $DirectoriesFilePath | Select-Object -Skip 1 | ConvertFrom-Csv -Delimiter ";" -Header $header
|
||
|
||
# Arrays mit Zusatzdaten
|
||
|
||
$art_array = @{ "art" = "art" }
|
||
$path_array = @{ "path" = "path" }
|
||
$endpunkt_array = @{ "endpunkt" = "endpunkt" }
|
||
$verantwortlicher_array = @{ "verantwortlicher" = "verantwortlicher" }
|
||
$dkz_array = @{ "kz" = "kz" }
|
||
$dnummer_array = @{ "dnummer" = "dnummer" }
|
||
$fullpath_array = @{ "fullpath" = "fullpath" }
|
||
|
||
foreach ($item in $DirectoriesFilePathEntries)
|
||
{
|
||
# Arrays mit Zusatzdaten fuellen
|
||
# $item | Out-String
|
||
try
|
||
{
|
||
# $art_array.Add($item.'Gruppe Lesen', $item.Verzeichnisart)
|
||
#Write-Host "----: " $item.Verzeichnisart " :----"
|
||
# $path_array.Add($item.'Gruppe Lesen', $item.'Normierter Pfad')
|
||
# $verantwortlicher_array.Add($item.'Gruppe Lesen', $item.'Verantwortlicher (Stelle oder Personalnummer)')
|
||
# $dkz_array.Add($item.'Gruppe Lesen', $item.Anwendungskuerzel)
|
||
# $dnummer_array.Add($item.'Gruppe Lesen', $item.AWNR)
|
||
# $fullpath_array.Add($item.'Gruppe Lesen', $item.Verzeichnisname)
|
||
# $fullpath_array.Add($item.'Gruppe Aendern', $item.Verzeichnisname)
|
||
#Write-Host "----: " $item.'Gruppe Lesen' $item.Verzeichnisart $item.Anwendungskuerzel $item.AWNR
|
||
#Write-Host $item.'Gruppe Lesen' " -> " "----: " $item.Verzeichnisname " :----"
|
||
|
||
# Neu auch Aendern betrachten
|
||
# $verantwortlicher_array.Add($item.'Gruppe Aendern', $item.'Verantwortlicher (Stelle oder Personalnummer)')
|
||
# $dkz_array.Add($item.'Gruppe Aendern', $item.Anwendungskuerzel)
|
||
# $dnummer_array.Add($item.'Gruppe Aendern', $item.AWNR)
|
||
|
||
$art_array[$item.'Gruppe Lesen'] = $item.Verzeichnisart
|
||
$path_array[$item.'Gruppe Lesen'] = $item.'Normierter Pfad'
|
||
$verantwortlicher_array[$item.'Gruppe Lesen'] = $item.'Verantwortlicher (Stelle oder Personalnummer)'
|
||
$dkz_array[$item.'Gruppe Lesen'] = $item.Anwendungskuerzel
|
||
$dnummer_array[$item.'Gruppe Lesen'] = $item.AWNR
|
||
Write-Host $item.'Gruppe Lesen' $item.AWNR
|
||
$fullpath_array[$item.'Gruppe Lesen'] = $item.Verzeichnisname
|
||
$verantwortlicher_array[$item.'Gruppe Aendern'] = $item.'Verantwortlicher (Stelle oder Personalnummer)'
|
||
$dkz_array[$item.'Gruppe Aendern'] = $item.Anwendungskuerzel
|
||
$dnummer_array[$item.'Gruppe Aendern'] = $item.AWNR
|
||
Write-Host $item.'Gruppe Aendern' $item.AWNR
|
||
$fullpath_array[$item.'Gruppe Aendern'] = $item.Verzeichnisname
|
||
}
|
||
# Leere Eintraege
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
try
|
||
{
|
||
$endpunkt_array[$item.'Gruppe Lesen'] = $item.Verzeichnisname
|
||
# $endpunkt_array.Add($item.'Gruppe Lesen', $item.Verzeichnisname)
|
||
#Write-Host $item.'Gruppe Lesen' $item.Verzeichnisname
|
||
}
|
||
# Leere Eintraege
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
# UTF / ANSI conflict workaround
|
||
# $art_array.Add($item.'Gruppe <20>ndern', $item.Verzeichnisart);
|
||
# $path_array.Add($item.'Gruppe <20>ndern', $item.'normierter Pfad');
|
||
|
||
#Write-Host "+--:" $item.'Gruppe Aendern' $item.Verzeichnisart $item.'Verantwortlicher (Stelle oder Personalnummer)'
|
||
try
|
||
{
|
||
$art_array[$item.'Gruppe Aendern'] = $item.Verzeichnisart
|
||
# $art_array.Add($item.'Gruppe Aendern', $item.Verzeichnisart)
|
||
#Write-Host "Art Array: " $item.'Gruppe Aendern' $item.Verzeichnisart
|
||
}
|
||
# Leere Eintraege
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
try
|
||
{
|
||
# $path_array.Add($item.'Gruppe Aendern', $item.'Normierter Pfad')
|
||
# $verantwortlicher_array.Add($item.'Gruppe Aendern', $item.'Verantwortlicher (Stelle oder Personalnummer)')
|
||
$path_array[$item.'Gruppe Aendern'] = $item.'Normierter Pfad'
|
||
$verantwortlicher_array[$item.'Gruppe Aendern'] = $item.'Verantwortlicher (Stelle oder Personalnummer)'
|
||
}
|
||
# Leere Eintraege
|
||
catch
|
||
{
|
||
#Write-Host "Schon enthalten in array: " $item.'Gruppe Aendern'
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
#Write-Host $item.'Gruppe Aendern' ": " $item.'Verantwortlicher (Stelle oder Personalnummer)'
|
||
try
|
||
{
|
||
# $endpunkt_array.Add($item.'Gruppe Aendern', $item.Verzeichnisname)
|
||
$endpunkt_array[$item.'Gruppe Aendern'] = $item.Verzeichnisname
|
||
#Write-Host $item.'Gruppe Aendern' $item.Verzeichnisname
|
||
}
|
||
# Leere Eintraege
|
||
catch
|
||
{
|
||
#Write-Host "Schon enthalten in endpunkt_array: " $item.'Gruppe Aendern'
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
}
|
||
|
||
#exit
|
||
$FileSystemAccessEntries = Import-Csv -Path $FileSystemAccessTmpFilePath -Delimiter ";"
|
||
# Use a generic List instead of @() + '+=' to avoid O(n^2) array re-allocation.
|
||
$FileSystemAccessEntriesNew = [System.Collections.Generic.List[object]]::new()
|
||
|
||
# Arrays zum Speichern der Schluessel fuer die verschiedenen Unterbereiche
|
||
$key_array = @{ "key" = 0 }
|
||
$avkey_array = @{ "key" = 0 }
|
||
#$pkey_array = @{"key" = 0}
|
||
|
||
# $cntEntries = 0
|
||
# $cntNichtGelistet = 0
|
||
|
||
# $blaCnt = 0
|
||
|
||
foreach ($item in $FileSystemAccessEntries)
|
||
{
|
||
#$item | Out-String
|
||
|
||
if ( $item.Name.Contains("GGF-VDA-"))
|
||
{
|
||
continue
|
||
}
|
||
|
||
#$blaCnt++
|
||
|
||
#if($blaCnt -ge 10) {
|
||
# exit
|
||
#}
|
||
|
||
$DisplayName = $item.ShortCut + $item.Name.Substring($item.Name.IndexOf('-') + 1)
|
||
$TempString = $item.Name.Split('-')
|
||
|
||
# String fuer Namensende ermitteln
|
||
$EndString = ""
|
||
if ( $item.Name.EndsWith("_L"))
|
||
{
|
||
$EndString = "_L"
|
||
}
|
||
elseif ($item.Name.EndsWith("_A"))
|
||
{
|
||
$EndString = "_A"
|
||
}
|
||
# Sollte nicht vorkommen
|
||
else
|
||
{
|
||
$EndString = "_X"
|
||
}
|
||
|
||
$NewShortName = ""
|
||
|
||
# Praefix fuer die Unterbereiche
|
||
#$V = "V1_"
|
||
$V = ""
|
||
|
||
#Write-Host $art_array.Item($item.Name)
|
||
|
||
#Prj
|
||
#Aus
|
||
#Tea
|
||
#Pgr
|
||
|
||
$V = $art_array.Item($item.Name) + "_"
|
||
|
||
if ($art_array.Item($item.Name) -ieq "FAC123")
|
||
{
|
||
$V = "FAC_"
|
||
$V = ""
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "AUS123")
|
||
{
|
||
$V = "AUS_"
|
||
$V = ""
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "PKU123")
|
||
{
|
||
$V = "PKU_"
|
||
$V = ""
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "SON123")
|
||
{
|
||
$V = "SON_"
|
||
$V = ""
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "UBE123")
|
||
{
|
||
$V = "UBE_"
|
||
$V = ""
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "UNT123")
|
||
{
|
||
$V = "UNT_"
|
||
$V = ""
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "VAW123")
|
||
{
|
||
|
||
$V = "VAW_"
|
||
$AWNRNEW = "9997"
|
||
$DKZ = "XXXXX"
|
||
|
||
try
|
||
{
|
||
#$AWNRNEW = $nummer_array.Item($endpunkt_array.Item($item.Name)).PadLeft(4, '0')
|
||
$AWNRNEW = $dnummer_array.Item($item.Name).PadLeft(4, '0')
|
||
if (-not $AWNRNEW)
|
||
{
|
||
$AWNRNEW = "9997"
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
#Write-Host "Nicht gefunden: " $endpunkt_array.Item($item.Name)
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
try
|
||
{
|
||
$DKZ = $dkz_array.Item($item.Name)
|
||
|
||
if (-not $DKZ)
|
||
{
|
||
$DKZ = "XXXXX"
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
#Write-Host "Nicht gefunden: " $endpunkt_array.Item($item.Name)
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
Write-Host "####: " $AWNRNEW $DKZ $item.Name
|
||
#$V = "V_" + $AWNRNEW + "_" + $endpunkt_array.Item($item.Name) + $EndString
|
||
$V = "VAW_" + $AWNRNEW + "_" + $path_array.Item($item.Name) + $EndString
|
||
#$V = "VX_" + $AWNRNEW + "_"
|
||
$VDUM = $V.Replace("_VR_", "_")
|
||
$V = $VDUM
|
||
Write-Host "##--: " $V $VDUM
|
||
}
|
||
|
||
# Pruefen ob Name im Array (in der Verzeichnisliste) vorhanden ist
|
||
if ( $art_array.Contains($item.Name))
|
||
{
|
||
if ($art_array.Item($item.Name) -ieq "Programm-Ablage")
|
||
{
|
||
$NewShortName = $V
|
||
#Write-Host "---: " $item.Name $AWNRNEW $V
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "VAW")
|
||
{
|
||
$NewShortName = $V
|
||
}
|
||
elseif ($art_array.Item($item.Name) -ieq "PRG")
|
||
{
|
||
try
|
||
{
|
||
$AWNRNEW = $dnummer_array.Item($item.Name).PadLeft(4, '0')
|
||
if (-not $AWNRNEW)
|
||
{
|
||
$AWNRNEW = "9998"
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "AWNRNEW nicht gefunden: " $item.OldName
|
||
$AWNRNEW = "9998"
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
Write-Host "AWNRNEW ----: " $AWNRNEW
|
||
|
||
$NewShortName = "PRG_" + ([string]$AWNRNEW).PadLeft(4, '0') + "_" + $path_array.Item($item.Name) + $EndString
|
||
}
|
||
else
|
||
{
|
||
$NewShortName = $V + $path_array.Item($item.Name) + $EndString
|
||
#$NewShortName = $V
|
||
}
|
||
}
|
||
else
|
||
{
|
||
# '_A' oder '_L' entfernen
|
||
$test = $item.Name.Substring(0, $item.Name.Length - 2)
|
||
|
||
if ( $key_array.ContainsKey($test))
|
||
{
|
||
#$key_array.Item("OE_" + $oenum[0])++
|
||
#Write-Host "+++ gefunden +++: " $key_array.Item($test)
|
||
}
|
||
else
|
||
{
|
||
$cntNichtGelistet++
|
||
$key_array.Add($test, $cntNichtGelistet)
|
||
#Write-Host "+++ insert +++: " $key_array.Count
|
||
}
|
||
|
||
$NewShortName = "VX_" + "nicht" + "_" + "gelistet" + "_" + $key_array.Item($test) + $EndString
|
||
#Write-Host "nicht gelistet: " $item.Name " " $key_array.Item($test) " " $test " " $NewShortName
|
||
}
|
||
|
||
$NewFullName = $Institut + "GGX-" + $NewShortName
|
||
|
||
$Description = $item.Description
|
||
|
||
if ( $Description.Contains("## keine Beschreibung ##"))
|
||
{
|
||
$VA = $verantwortlicher_array.Item($item.Name)
|
||
#Write-Host $VA
|
||
$Description = $Description + " Verantwortlicher: " + $VA
|
||
#Write-Host $NewFullName $Description
|
||
}
|
||
|
||
$FileSystemAccessEntriesNew.Add(@{ GUIMandator = $Institut; 'GUIADGroup.Name' = $NewFullName; 'GUIADGroup.Description' = $item.Description; GUIMandatorADGroupType = "Role"; 'GUIADGroup.DisplayName' = $NewShortName; GUIProcessingNote = ""; OldName = $item.Name })
|
||
# $outFileEntry = $Institut + ";" + $NewFullName.Replace("-SE_", "-VSE_") + ";" + $Description + ";" + 'Role' + ";" + $NewShortName + ";;" + $item.Name
|
||
# $outFileEntry | Out-File $DAWGruppenAnlegenOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenAnlegenOutLine = $Institut + ";" + $NewFullName.Replace("-SE_", "-VSE_") + ";" + $Description + ";" + 'Role' + ";" + $NewShortName + ";;" + $item.Name
|
||
$DAWGruppenAnlegenOutList.Add($DAWGruppenAnlegenOutLine)
|
||
|
||
Write-Host "-_-_-_-_: " $NewShortName
|
||
Write-Host "-_-_-_-_: " $NewFullName
|
||
}
|
||
$i = 1
|
||
|
||
$CntPRG = 0000000
|
||
$CntSON = 0100000
|
||
# $CntSPA = 0200000
|
||
$CntSKL = 0200000
|
||
$CntSPK = 0300000
|
||
$CntVRZ = 0400000
|
||
$CntVOE = 0500000
|
||
$CntAKT = 0600000
|
||
$CntMSV = 0700000
|
||
$CntPRO = 0800000
|
||
|
||
|
||
foreach ($item in $FileSystemAccessEntriesNew)
|
||
{
|
||
# Write-Host "processing entry #"$i.ToString()
|
||
#$item | Select-Object -Property *
|
||
$item | Out-String
|
||
|
||
#if ($item.Name.Contains("GGF-VDA-")) {
|
||
# continue
|
||
#}
|
||
|
||
|
||
$roleType = "unknown"
|
||
$relevantRoleTypes = $SPK.GroupManagementMappings | Where-Object { $_.OU -ieq $FI.TypeTagFilesystemAccess } | Sort-Object { [int]$_.Order } # BUGFIX 2026-07-02: scriptblock sort works on PS 5.1 + 7 (see getRoleType)
|
||
foreach ($relevantRoleType in $relevantRoleTypes)
|
||
{
|
||
if ($item.OldName -cmatch $relevantRoleType.TagRegExp)
|
||
{
|
||
$roleType = $relevantRoleType.TypeName
|
||
# Write-Host "found TypeName" $roleType "for entry" $adObjectEntry.Oldname "using regular expression" $relevantRoleType.TagRegExp
|
||
break
|
||
}
|
||
}
|
||
|
||
# $Institut + ";" + $roleType + ";" + $item.OldName + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + $roleType + ";" + $item.OldName + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + $roleType + ";" + $item.OldName + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + ""
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
$NewFullName = $item.'GUIADGroup.Name'
|
||
$ProfilNummer = 0
|
||
$ProfilName = ""
|
||
$VerzeichnisArt = $art_array.Item($item.OldName)
|
||
|
||
try
|
||
{
|
||
$MYANR = $dnummer_array.Item($item.OldName)
|
||
$DKZ = $dkz_array.Item($item.OldName)
|
||
|
||
if (-not $DKZ)
|
||
{
|
||
$MYANR = "9997"
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
$MYANR = "9997"
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
$FullPath = $fullpath_array.Item($item.OldName)
|
||
|
||
Write-Host $item.OldName " -> " "--- MYANR: " $MYANR ": " $VerzeichnisArt ": " $FullPath "!"
|
||
|
||
###############################################
|
||
$AWNRNEW = "9997"
|
||
$EndString = ""
|
||
|
||
try
|
||
{
|
||
$AWNRNEW = $dnummer_array.Item($item.OldName).PadLeft(4, '0')
|
||
if (-not $AWNRNEW)
|
||
{
|
||
$AWNRNEW = "9998"
|
||
}
|
||
|
||
Write-Host "AWNRNEW ----: " $AWNRNEW
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "AWNRNEW nicht gefunden: " $item.OldName
|
||
$AWNRNEW = "9998"
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
if ($VerzeichnisArt -ieq "SKL")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntSKL).PadLeft(7, '0')
|
||
$CntSKL++
|
||
|
||
$ProfilName = "SKL " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf SKL aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf SKL lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "SON")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntSON).PadLeft(7, '0')
|
||
$CntSON++
|
||
|
||
$ProfilName = "SON " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf SON aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf SON lesen " + $NewFullName
|
||
}
|
||
}
|
||
|
||
elseif ($VerzeichnisArt -ieq "AKT")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntAKT).PadLeft(7, '0')
|
||
$CntAKT++
|
||
|
||
$ProfilName = "AKT " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf AKT aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf AKT lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "MSV")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntMSV).PadLeft(7, '0')
|
||
$CntMSV++
|
||
|
||
$ProfilName = "MSV " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf MSV aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf MSV lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "PRO")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntPRO).PadLeft(7, '0')
|
||
$CntPRO++
|
||
|
||
$ProfilName = "PRO " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf PRO aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf PRO lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "SPK")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntSPK).PadLeft(7, '0')
|
||
$CntSPK++
|
||
|
||
$ProfilName = "SPK " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf SPK aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf SPK lesen " + $NewFullName
|
||
}
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "VRZ")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntVRZ).PadLeft(7, '0')
|
||
$CntVRZ++
|
||
|
||
$ProfilName = "VRZ " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf VRZ aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf VRZ lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "VOE")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntVOE).PadLeft(7, '0')
|
||
$CntVOE++
|
||
|
||
$ProfilName = "VOE " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf VOE aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf VOE lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "PRG")
|
||
{
|
||
Write-Host "AWNRNEW ----: " $AWNRNEW
|
||
|
||
if ($AWNRNEW -ieq "9997")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntPRG).PadLeft(7, '0')
|
||
$CntPRG++
|
||
}
|
||
elseif ($AWNRNEW -ieq "0000")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntPRG).PadLeft(7, '0')
|
||
$CntPRG++
|
||
}
|
||
else
|
||
{
|
||
if ( $rbkey_array.ContainsKey("PAN_" + $AWNRNEW))
|
||
{
|
||
$rbkey_array.Item("PAN_" + $AWNRNEW)++
|
||
#Write-Host "+++ update +++: " $pkey_array.Item("PA_" + $AWNRNEW)
|
||
}
|
||
else
|
||
{
|
||
$rbkey_array.Add("PAN_" + $AWNRNEW, 200)
|
||
#Write-Host "+++ insert +++: " $pkey_array.Count
|
||
}
|
||
|
||
$ProfilNummer = "40" + ([string]$AWNRNEW).PadLeft(4, '0') + $rbkey_array.Item("PAN_" + $AWNRNEW)
|
||
#$CntPRGDUM++
|
||
}
|
||
|
||
#$ProfilNummer = "61" + ([string]$CntPRG).PadLeft(7, '0')
|
||
#$CntPRG++
|
||
#$NewFullName = $NewFullName.Replace("PRG_", "PRG_" + ([string]$AWNRNEW).PadLeft(4, '0') + "_")
|
||
$NewFullName = $NewFullName.Replace("PRG_", "PRG_")
|
||
|
||
$ProfilName = "SIA " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf SIA aendern " + $NewFullName.Replace($SPKID + "GGX-", "")
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf SIA lesen " + $NewFullName.Replace($SPKID + "GGX-", "")
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "PRG12")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntPRG).PadLeft(7, '0')
|
||
$CntPRG++
|
||
|
||
$ProfilName = "PROG " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf PRG aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf PRG lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "VRZ")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntVRZ).PadLeft(7, '0')
|
||
$CntVRZ++
|
||
|
||
$ProfilName = "VRZ " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf VRZ aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf VRZ lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "SPK")
|
||
{
|
||
$ProfilNummer = "42" + ([string]$CntSPK).PadLeft(7, '0')
|
||
$CntSPK++
|
||
|
||
$ProfilName = "SPK " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf SPK aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf SPK lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
|
||
elseif ($VerzeichnisArt -ieq "PROG1")
|
||
{
|
||
#Write-Host "Anwendungszugriff"
|
||
$ProfilNummer = $CntProgramm
|
||
$CntProgramm++
|
||
|
||
$ProfilName = "Anwendungsverzeichnis " + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf Programm aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf Programm lesen " + $NewFullName
|
||
}
|
||
|
||
#nummer_array
|
||
$AWNRNEW = "9997"
|
||
$EndString = ""
|
||
|
||
try
|
||
{
|
||
#Write-Host "Anwendungszugriff"
|
||
#$AWNRNEW = $nummer_array.Item($endpunkt_array.Item($item.OldName)).PadLeft(4, '0')
|
||
#$AWNRNEW = $nummer_array.Item($endpunkt_array.Item($item.Name)).PadLeft(4, '0')
|
||
$AWNRNEW = $dnummer_array.Item($item.OldName).PadLeft(4, '0')
|
||
if (-not $AWNRNEW)
|
||
{
|
||
$AWNRNEW = "9997"
|
||
}
|
||
|
||
#Write-Host "----: " $AWNRNEW
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "Nicht gefunden: " $item.OldName
|
||
#Write-Host "Nicht gefunden: " $item.Name
|
||
}
|
||
|
||
try
|
||
{
|
||
#Write-Host "Anwendungszugriff"
|
||
#$AWNRNEW = $nummer_array.Item($endpunkt_array.Item($item.OldName)).PadLeft(4, '0')
|
||
#$AWNRNEW = $nummer_array.Item($endpunkt_array.Item($item.Name)).PadLeft(4, '0')
|
||
$DKZ = $dkz_array.Item($item.OldName)
|
||
|
||
if (-not $DKZ)
|
||
{
|
||
$DKZ = "XXXXX"
|
||
}
|
||
|
||
$bla = $NewFullName.Replace("-AV_", "-AZ_")
|
||
# $NewFullName = $DKZ + $bla.Substring(7)
|
||
$NewFullName = $bla.Substring(7)
|
||
#Write-Host "----: " $AWNRNEW $DKZ $NewFullName
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "Nicht gefunden: " $item.OldName
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
if ( $pkey_array.ContainsKey("PAN_" + $AWNRNEW))
|
||
{
|
||
$pkey_array.Item("PAN_" + $AWNRNEW)++
|
||
#Write-Host "+++ update +++: " $pkey_array.Item("PA_" + $AWNRNEW)
|
||
}
|
||
else
|
||
{
|
||
$pkey_array.Add("PAN_" + $AWNRNEW, 1)
|
||
#Write-Host "+++ insert +++: " $pkey_array.Count
|
||
}
|
||
|
||
# Profilnummer bauen: 50<AWNummer>9nn
|
||
$ProfilNummer = "10" + $AWNRNEW + "" + ([string]$pkey_array.Item("PAN_" + $AWNRNEW)).PadLeft(3, '0')
|
||
#Write-Host $CntProgramm $NewFullName $item.OldName $ProfilNummer
|
||
}
|
||
elseif ($VerzeichnisArt -ieq "AW")
|
||
{
|
||
if ( $avkey_array.ContainsKey("AV_" + $MYANR))
|
||
{
|
||
$avkey_array.Item("AV_" + $MYANR)++
|
||
#Write-Host "+++ update +++: " $avkey_array.Item("AV_" + $MYANR)
|
||
}
|
||
else
|
||
{
|
||
$avkey_array.Add("AV_" + $MYANR, 1)
|
||
#Write-Host "+++ insert +++: " $avkey_array.Count
|
||
}
|
||
|
||
|
||
$ProfilNummer = "40" + $MYANR.PadLeft(4, '0') + ([string]$avkey_array.Item("AV_" + $MYANR)).PadLeft(3, '0')
|
||
#Write-Host $ProfilNummer
|
||
$CntAv++
|
||
|
||
$ProfilName = "AW_" + $NewFullName
|
||
if ( $NewFullName.EndsWith("_A"))
|
||
{
|
||
$ProfilName = "Zugriff auf Anwendungsverzeichnisse aendern " + $NewFullName
|
||
}
|
||
elseif ($NewFullName.EndsWith("_L"))
|
||
{
|
||
$ProfilName = "Zugriff auf Anwendungsverzeichnisse lesen " + $NewFullName
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
#Write-Host "+-+-+-+-+-+-+- Unbekannte-Ablage: " $VerzeichnisArt
|
||
try
|
||
{
|
||
$ProfilNummer = "97000" + ([string]$CntElse).PadLeft(4, '0')
|
||
}
|
||
catch
|
||
{
|
||
$ProfilNummer = "97000" + ([string]$CntElse).PadLeft(4, '0')
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
$CntElse++
|
||
$ProfilName = "Unbekannte-Ablage " + $NewFullName
|
||
}
|
||
|
||
$dum = $verantwortlicher_array.Item($item.OldName)
|
||
if ($dum)
|
||
{
|
||
if ( $dum.StartsWith("S" + $SPKNO))
|
||
{
|
||
$dum = $mitarbeiterStelle_array.Item($verantwortlicher_array.Item($item.OldName))
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$dum = "0570000/0012"
|
||
}
|
||
#($ProfilNummer).ToString() + ";" + $NewFullName.Replace("P030GGX-", "") + ";" + $ProfilName + ";" + $dum + ";" + $item.OldName | out-file $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
|
||
#($ProfilNummer).ToString() + ";" + $NewFullName.Replace("Z001GGX-", "").Replace("_1552_", "_AD_") + ";" + $ProfilName.Replace("-AZ_", "-AV_") + ";" + $dum + ";" + $item.OldName + ";" + $item.'GUIADGroup.Description' + ";" + $VerzeichnisArt | out-file $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
|
||
|
||
#Fullpath $FullPath
|
||
|
||
# ($ProfilNummer).ToString() + ";" + $NewFullName.Replace($SPKID + "GGX-", "").Replace("_1552_", "_AD_") + ";" + $ProfilName.Replace("-AZ_", "-AV_") + ";" + $dum + ";" + $item.OldName + ";" + "Verzeichnispfad: " + $FullPath + ";" + $VerzeichnisArt | Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutLine = ($ProfilNummer).ToString() + ";" + $NewFullName.Replace($SPKID + "GGX-", "").Replace("_1552_", "_AD_") + ";" + $ProfilName.Replace("-AZ_", "-AV_") + ";" + $dum + ";" + $item.OldName + ";" + "Verzeichnispfad: " + $FullPath + ";" + $VerzeichnisArt
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
|
||
|
||
foreach ($item1 in $ADObjectMemberships)
|
||
{
|
||
if ($item1.GroupName -ieq $item.OldName)
|
||
{
|
||
if ($item1.MemberClass -ieq "user")
|
||
{
|
||
# Write-Host "writing direct membership entry #"$i.ToString() ", user" $u.MemberName
|
||
# $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $item1.MemberName + ";" + "" + ";" + "" + ";" + "user" + ";" + "" | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $item1.MemberName + ";" + "" + ";" + "" + ";" + "user" + ";" + ""
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
|
||
# Kurs Daten schreiben
|
||
#Write-Host $u.MemberName $mitarbeiter_array.Item($u.MemberName)
|
||
$dum = $mitarbeiter_array.Item($item1.MemberName)
|
||
if (-not $dum)
|
||
{
|
||
$dum = $item1.MemberName
|
||
}
|
||
# dum + ";" + $item.OldName + ";" + ($ProfilNummer).ToString() + ";" + "FileSystemAccess"| Out-File $KURSIstMitarbeiterProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSIstMitarbeiterProfileOutLine = $dum + ";" + $item.OldName + ";" + ($ProfilNummer).ToString() + ";" + "FileSystemAccess"
|
||
$KURSIstMitarbeiterProfileOutList.Add($KURSIstMitarbeiterProfileOutLine)
|
||
}
|
||
elseif ($item1.MemberClass -ieq "group")
|
||
{
|
||
# O(1) index lookup instead of a full linear scan over $ADObjectMemberships.
|
||
# Key matches buildAllUserMembershipsCache: GroupName + "|" + MemberClass.
|
||
#edmond
|
||
# $userKey = $item1.MemberName + "|user"
|
||
# $userKey = getMembershipIndexKey $item1.MemberName "user"
|
||
# $users = $null
|
||
# if (-not $membershipIndex.TryGetValue($userKey, [ref] $users))
|
||
# {
|
||
# $users = [System.Collections.Generic.List[object]]::new()
|
||
# }
|
||
$users = getUsersByMemberGroup $item1.MemberName
|
||
|
||
foreach ($u in $users)
|
||
{
|
||
# Write-Host "writing indirect membership entry #"$i.ToString() ", user" $u.MemberName "from group" $item1.MemberName
|
||
# $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $u.MemberName + ";" + "" + ";" + "" + ";" + "group" + ";" + $item1.MemberName | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("-SE_", "-VSE_") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $u.MemberName + ";" + "" + ";" + "" + ";" + "group" + ";" + $item1.MemberName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$i++
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
#exit
|
||
}
|
||
|
||
# AppAccess ---------------------------------------------
|
||
elseif ($roletypeTag -ieq $FI.TypeTagAppAccess)
|
||
{
|
||
try
|
||
{
|
||
|
||
$AnwendungenFilePath = $ApplicationsInFilePath
|
||
$AnwendungenFilePathEntries = Get-Content -Path $AnwendungenFilePath | ConvertFrom-Csv -Delimiter ";"
|
||
$nummer_array = @{ "nummer" = "nummer" }
|
||
$verantwortlicher_array = @{ "verantwortlicher" = "verantwortlicher" }
|
||
$kz_array = @{ "kz" = "kz" }
|
||
$beschreibung_array = @{ "beschreibung" = "beschreibung" }
|
||
|
||
$Verantwortlicher
|
||
$MyKey
|
||
|
||
# Anwendungsliste einlesen
|
||
# Nr. -> wird verwendet
|
||
# AWK -> wird verwendet
|
||
# FullAccount -> wird verwendet
|
||
# Verzeichnisname
|
||
# Endpunktname
|
||
# Gruppe Ändern
|
||
# Verantwortlicher -> wird verwendet
|
||
|
||
|
||
foreach ($item in $AnwendungenFilePathEntries)
|
||
{
|
||
$Verantwortlicher = $item.'Verantwortlicher (FPV)'
|
||
|
||
#write-host "-----------------: " $Verantwortlicher
|
||
|
||
if (-not $Verantwortlicher)
|
||
{
|
||
$Verantwortlicher = "0570000/0012"
|
||
}
|
||
else
|
||
{
|
||
if ( $Verantwortlicher.StartsWith("S" + $SPKNO))
|
||
{
|
||
$dum = $mitarbeiterStelle_array.Item($Verantwortlicher)
|
||
$Verantwortlicher = $dum
|
||
}
|
||
}
|
||
$MyKey = $item.FullAccount.Split('\')
|
||
|
||
Write-Host "-----------------:" $MyKey[0] $MyKey[1]
|
||
|
||
Write-Host "#############-------------:" $MyKey[1] $item.'Nr.' $Verantwortlicher
|
||
|
||
if ($MyKey[1])
|
||
{
|
||
if (-not $nummer_array.ContainsKey($MyKey[1]))
|
||
{
|
||
$nummer_array[$MyKey[1]] = $item.'Nr.'
|
||
$verantwortlicher_array[$MyKey[1]] = $Verantwortlicher
|
||
$kz_array[$MyKey[1]] = $item.'AWK'
|
||
# $item.'Beschreibung' was changed to $item.'Beschreibung (256 Zeichen)'
|
||
$beschreibung_array[$MyKey[1]] = $item.'Beschreibung (256 Zeichen)'
|
||
Write-Host "+++--------------:" $item.'Nr.' $Verantwortlicher $item.'AWK'
|
||
}
|
||
}
|
||
}
|
||
|
||
#Exit
|
||
|
||
$AppAccessEntries = Import-Csv -Path $AppAccessTmpFilePath -Delimiter ";"
|
||
# Use a generic List instead of @() + '+=' to avoid O(n^2) array re-allocation.
|
||
$AppAccessEntriesNew = [System.Collections.Generic.List[object]]::new()
|
||
foreach ($item in $AppAccessEntries)
|
||
{
|
||
|
||
# Anwendungsnummer fuer Objekt suchen
|
||
$AWNR = $nummer_array.Item($item.Name)
|
||
Write-Host "--------: " $item.Name $AWNR
|
||
# Wenn nicht gefunden mit '9999' besetzen
|
||
if (-not $AWNR)
|
||
{
|
||
$AWNR = 9000
|
||
}
|
||
# Nummer 4 stellig mit fuehrenden Nullen auffuellen
|
||
$AWNR = ([string]$AWNR).PadLeft(4, '0')
|
||
# Shortcut setzen
|
||
$ShortCut = "AZ_"
|
||
# Ausnahme fuer Shortcut (z.B. VRZ) wenn 'GGF-', laut N.Z. fuer alle Kassen da von FI gesetzt
|
||
if ( $item.Name.Contains("GGF-"))
|
||
{
|
||
$ShortCut = "AZ_"
|
||
}
|
||
|
||
$NewShortName = $ShortCut + $AWNR + "_" + $item.Name.Substring($item.Name.IndexOf('-') + 1)
|
||
$NewFullName = $Institut + "GGX-" + $NewShortName.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte")
|
||
#Serviceportal
|
||
|
||
$AppAccessEntriesNew.Add(@{ GUIMandator = $Institut; 'GUIADGroup.Name' = $NewFullName; 'GUIADGroup.Description' = $item.Description; GUIMandatorADGroupType = "Role"; 'GUIADGroup.DisplayName' = $NewShortName.Replace("Serviceportal", "SVP"); GUIProcessingNote = ""; OldName = $item.Name })
|
||
# $outFileEntry = $Institut + ";" + $NewFullName + ";" + $item.Description + ";" + 'Role' + ";" + $NewShortName + ";;" + $item.Name
|
||
# $outFileEntry | Out-File $DAWGruppenAnlegenOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenAnlegenOutLine = $Institut + ";" + $NewFullName.Replace("-SE_", "-VSE_") + ";" + $item.Description + ";" + 'Role' + ";" + $NewShortName + ";;" + $item.Name
|
||
$DAWGruppenAnlegenOutList.Add($DAWGruppenAnlegenOutLine)
|
||
}
|
||
|
||
$i = 1
|
||
$ProfilNummerAZ = 1
|
||
$ProfilNummerAV = 1
|
||
|
||
foreach ($item in $AppAccessEntriesNew)
|
||
{
|
||
# Write-Host "processing entry #"$i.ToString()
|
||
|
||
$roleType = "unknown"
|
||
$relevantRoleTypes = $SPK.GroupManagementMappings | Where-Object { $_.OU -ieq $FI.TypeTagAppAccess } | Sort-Object { [int]$_.Order } # BUGFIX 2026-07-02: scriptblock sort works on PS 5.1 + 7 (see getRoleType)
|
||
foreach ($relevantRoleType in $relevantRoleTypes)
|
||
{
|
||
if ($item.OldName -cmatch $relevantRoleType.TagRegExp)
|
||
{
|
||
$roleType = $relevantRoleType.TypeName
|
||
# Write-Host "found TypeName" $roleType "for entry" $adObjectEntry.Oldname "using regular expression" $relevantRoleType.TagRegExp
|
||
break
|
||
}
|
||
}
|
||
|
||
if ($item.OldName -like "*GGT-0-*")
|
||
{
|
||
$roleType = "ApplicationSIA"
|
||
Write-Host "---------------:" $roleType $item.OldName
|
||
}
|
||
|
||
# $Institut + ";" + $roleType + ";" + $item.OldName + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + $roleType + ";" + $item.OldName + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + $roleType + ";" + $item.OldName + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + ""
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
$ProfilNummer = ""
|
||
|
||
$NeueBeschreibung = ""
|
||
|
||
# Muell
|
||
if ($item.'GUIADGroup.Name' -like "*GGX-A_*")
|
||
{
|
||
$PnrStr = ([string]$ProfilNummerAZ).PadLeft(3, '0')
|
||
$AWNR = ([string]$nummer_array.Item($item.OldName)).PadLeft(4, '0')
|
||
$ProfilName = "Anwendungszugriff " + $item.'GUIADGroup.Name'
|
||
$dum = $verantwortlicher_array.Item($item.OldName)
|
||
|
||
$kz = $kz_array.Item($item.OldName)
|
||
$NeueBeschreibung = $beschreibung_array.Item($item.OldName)
|
||
|
||
$aname = $item.'GUIADGroup.Name'.Substring(15)
|
||
|
||
Write-Host "++++++++++: " $aname $item.'GUIADGroup.Name'
|
||
|
||
if ($dum)
|
||
{
|
||
if ($dum.StartsWith("S" + $SPKNO))
|
||
{
|
||
$dum = $mitarbeiterStelle_array.Item($verantwortlicher_array.Item($item.OldName))
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$dum = "0570000/0012"
|
||
}
|
||
|
||
if ( $pkey_array.ContainsKey("PAZ_" + $AWNR))
|
||
{
|
||
$pkey_array.Item("PAZ_" + $AWNR)++
|
||
#Write-Host "+++ update +++: " $pkey_array.Item("PA_" + $AWNR)
|
||
}
|
||
else
|
||
{
|
||
$pkey_array.Add("PAZ_" + $AWNR, 1000)
|
||
#Write-Host "+++ insert +++: " $pkey_array.Count
|
||
}
|
||
|
||
#$PnrStr = ([string]$pkey_array.Item("PAZ_" + $AWNR)).PadLeft(3, '0')
|
||
|
||
#"50" + $AWNR + "9" + ($PnrStr).ToString() + ";" + $item.'GUIADGroup.Name' + ";" + $ProfilName + ";" + $dum + ";" + "" | out-file $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
if ($AWNR -ieq "0000")
|
||
{
|
||
$AWNR = "9000"
|
||
}
|
||
|
||
$ProfilNummerAZ++
|
||
Write-Host "-+++++: " $ProfilNummerAZ
|
||
Write-Host "++++++: " $PnrStr
|
||
|
||
##"4" + $AWNR + "" + ($PnrStr).ToString() + ";" + $kz + "-" + $aname + ";" + $ProfilName.Replace("P030GGX-", "") + ";" + $dum + ";" + $item.OldName + ";" + $item.'GUIADGroup.Description' | out-file $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
# "40" + $AWNR + "" + ($PnrStr).ToString() + ";" + "AZ_" + $AWNR + "_" + $aname + ";" + $ProfilName.Replace($SPKID + "GGX-", "").Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + $dum + ";" + $item.OldName + ";" + $item.'GUIADGroup.Description' + ";Mist"| Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutLine = "40" + $AWNR + "" + ($PnrStr).ToString() + ";" + "AZ_" + $AWNR + "_" + $aname + ";" + $ProfilName.Replace($SPKID + "GGX-", "").Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + $dum + ";" + $item.OldName + ";" + $item.'GUIADGroup.Description' + ";Mist"
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
|
||
$ProfilNummer = "10" + $AWNR + "" + ($PnrStr).ToString()
|
||
#Write-Host "---: " $item.'GUIADGroup.Name'
|
||
$ProfilNummerAZ++
|
||
}
|
||
# Anwendungszugriff
|
||
else
|
||
{
|
||
$AWK = "1"
|
||
$PnrStr = ([string]$ProfilNummerAV).PadLeft(3, '0')
|
||
$AWNR = ([string]$nummer_array.Item($item.OldName)).PadLeft(4, '0')
|
||
|
||
$AWK = ([string]$kz_array.Item($item.OldName)).PadLeft(5, '0')
|
||
|
||
#$kz_array.Add($MyKey[1], $item.'AWK')
|
||
|
||
#$ProfilName = "Anwendungsverzeichnis " + $item.'GUIADGroup.Name'
|
||
$dum = $verantwortlicher_array.Item($item.OldName)
|
||
|
||
$kz = $kz_array.Item($item.OldName)
|
||
$NeueBeschreibung = $beschreibung_array.Item($item.OldName)
|
||
|
||
$aname = $item.'GUIADGroup.Name'.Substring(15)
|
||
|
||
if (-not $NeueBeschreibung)
|
||
{
|
||
$ProfilName = "Anwendungszugriff " + $item.'GUIADGroup.Name'
|
||
}
|
||
else
|
||
{
|
||
$ProfilName = $NeueBeschreibung
|
||
}
|
||
|
||
Write-Host "+++ neue Beschreibung +++: " $ProfilName
|
||
#$ProfilName = "Anwendungszugriff " + $item.'GUIADGroup.Name'
|
||
|
||
Write-Host "########: " $aname $item.'GUIADGroup.Name' $AWK
|
||
|
||
if ($dum)
|
||
{
|
||
if ($dum.StartsWith("S" + $SPKNO))
|
||
{
|
||
$dum = $mitarbeiterStelle_array.Item($verantwortlicher_array.Item($item.OldName))
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$dum = "0570000/0012"
|
||
}
|
||
|
||
if (-not $kz)
|
||
{
|
||
$kz = "XXXXX"
|
||
}
|
||
|
||
if ( $pkey_array.ContainsKey("PAZ_" + $AWNR))
|
||
{
|
||
$pkey_array.Item("PAZ_" + $AWNR)++
|
||
#Write-Host "+++ update +++: " $pkey_array.Item("PA_" + $AWNR)
|
||
}
|
||
else
|
||
{
|
||
#$pkey_array.Add("PA_" + $AWNR, 500)
|
||
$pkey_array.Add("PAZ_" + $AWNR, 100)
|
||
#Write-Host "+++ insert +++: " $pkey_array.Count
|
||
}
|
||
|
||
$PnrStr = ([string]$pkey_array.Item("PAZ_" + $AWNR)).PadLeft(3, '0')
|
||
#"50" + $AWNR + "9" + ($PnrStr).ToString() + ";" + $item.'GUIADGroup.Name' + ";" + $ProfilName + ";" + $dum + ";" + "" | out-file $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
##$NNNAME = $kz + "-" + $aname
|
||
|
||
#Anwendungsnummer im Namen
|
||
$NNNAME = "AZ_" + $AWNR + $aname
|
||
|
||
#Anwendungskuerzel im Namen
|
||
#$NNNAME = "AZ_" + $AWK + $aname
|
||
|
||
|
||
if ($AWNR -ieq "0000")
|
||
{
|
||
$AWNR = "9998"
|
||
}
|
||
Write-Host "-+++++: " $ProfilNummerAV
|
||
Write-Host "++++++: " $PnrStr
|
||
|
||
$MYDESC007 = $ProfilName.Replace($SPKID + "GGX-", "").Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte")
|
||
|
||
# "40" + $AWNR + "" + ($PnrStr).ToString() + ";" + $NNNAME.Replace("-_", "-") + ";" + $MYDESC007 + ";" + $dum + ";" + $item.OldName + ";" + $MYDESC007 + ". AD Beschreibung:" + $item.'GUIADGroup.Description' + ";AppAccess"| Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutLine = "40" + $AWNR + "" + ($PnrStr).ToString() + ";" + $NNNAME.Replace("-_", "-") + ";" + $MYDESC007 + ";" + $dum + ";" + $item.OldName + ";" + $MYDESC007 + ". AD Beschreibung:" + $item.'GUIADGroup.Description' + ";AppAccess"
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
$ProfilNummer = "10" + $AWNR + "" + ($PnrStr).ToString()
|
||
$ProfilNummerAV++
|
||
}
|
||
# foreach ($userMemberShip in $userMemberShips) {
|
||
|
||
|
||
foreach ($item1 in $ADObjectMemberships)
|
||
{
|
||
|
||
if ($item1.GroupName -ieq $item.OldName)
|
||
{
|
||
#Write-Host $item1.MemberClass ": " $item.OldName
|
||
if ($item1.MemberClass -ieq "user")
|
||
{
|
||
#Write-Host "User"
|
||
# Write-Host "writing direct membership entry #"$i.ToString() ", user" $u.MemberName
|
||
#$Institut + ";" + "RoleRalph" + ";" + $item.'GUIADGroup.Name' + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $item1.MemberName + ";" + "" + ";" + "" + ";" + "user" + ";" + $userMemberShip.OriginName | out-file $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $item1.MemberName + ";" + "" + ";" + "" + ";" + "user" + ";" + $item.OldName | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $item1.MemberName + ";" + "" + ";" + "" + ";" + "user" + ";" + $item.OldName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
|
||
# Kurs Daten schreiben
|
||
$dum = $mitarbeiter_array.Item($item1.MemberName)
|
||
if (-not $dum)
|
||
{
|
||
$dum = $item1.MemberName
|
||
}
|
||
# $dum + ";" + $item.OldName + ";" + ($ProfilNummer).ToString() + ";" + "AppAccess"| Out-File $KURSIstMitarbeiterProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSIstMitarbeiterProfileOutLine = $dum + ";" + $item.OldName + ";" + ($ProfilNummer).ToString() + ";" + "AppAccess"
|
||
$KURSIstMitarbeiterProfileOutList.Add($KURSIstMitarbeiterProfileOutLine)
|
||
}
|
||
elseif ($item1.MemberClass -ieq "group")
|
||
{
|
||
# BUGFIX 2026-07-05: this assignment was deleted during comment cleanup.
|
||
# Without it, $users is empty/stale here and the foreach below never emits
|
||
# the indirect (group-inherited) AZ_* membership rows (83,532 rows lost).
|
||
$users = getUsersByMemberGroup $item1.MemberName
|
||
foreach ($u in $users)
|
||
{
|
||
# Write-Host "writing indirect membership entry #"$i.ToString() ", user" $u.MemberName "from group" $item1.MemberName
|
||
#$Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name' + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $u.MemberName + ";" + "" + ";" + "" + ";" + "group" + ";" + $item1.MemberName | out-file $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $u.MemberName + ";" + "" + ";" + "" + ";" + "group" + ";" + $item.OldName | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $item.'GUIADGroup.Name'.Replace("Serviceportal", "SVP").Replace("Anforderungsmanagementberichte", "Anforderungsmgtberichte") + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $u.MemberName + ";" + "" + ";" + "" + ";" + "group" + ";" + $item.OldName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$i++
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
}
|
||
# AppConfiguration ---------------------------------------
|
||
elseif ($roletypeTag -ieq $FI.TypeTagAppConfiguration)
|
||
{
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
|
||
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
|
||
Write-Host $DisplayName
|
||
|
||
$NewFullName = $Institut + "GGX-" + $DisplayName.Replace("OFK", "OFFK").Replace("IEK", "IntExK").Replace("WEB_EDGE", "WEB_MEDGE")
|
||
|
||
if ( $NewFullName.Contains("IntExK"))
|
||
{
|
||
continue
|
||
}
|
||
|
||
if ($DisplayName -eq "AK_WEB_SSKMG-STD")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKW_WEB_SSKMG-STD"
|
||
}
|
||
if ($DisplayName -eq "AK_IEK_Admins")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKE_IntExK_Admins"
|
||
}
|
||
if ($DisplayName -eq "AK_OFK_Office_Default")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKO_OFFK_Office_Default"
|
||
}
|
||
if ($DisplayName -eq "AK_WEB_IE_ALT_Videoueberwachung")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKW_WEB_IE_ALT_Videoueberwachung"
|
||
}
|
||
if ($DisplayName -eq "AK_WEB_OhneIntranet")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKW_WEB_OhneIntranet"
|
||
}
|
||
|
||
#Write-Host $NewFullName
|
||
#$NewFullName = $Institut + "GGX-" + $DisplayName.Replace("OFK", "OFFK").Replace("IEK", "IntExK").Replace("WEB_EDGE", "WEB_MEDGE")
|
||
#Write-Host $NewFullName
|
||
|
||
$adObjectEntry.OldName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupDisplayName = $DisplayName
|
||
# $Institut + ";" + $NewFullName + ";" + $adObjectEntry.Description + ";" + 'Role' + ";" + $DisplayName.Replace("OFK", "OFFK").Replace("IEK", "IntExK").Replace("WEB_EDGE", "WEB_MEDGE") + ";" + "" + ";" + $adObjectEntry.ObjectName | Out-File $DAWGruppenAnlegenOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenAnlegenOutLine = $Institut + ";" + $NewFullName + ";" + $adObjectEntry.Description + ";" + 'Role' + ";" + $DisplayName.Replace("OFK", "OFFK").Replace("IEK", "IntExK").Replace("WEB_EDGE", "WEB_MEDGE") + ";" + "" + ";" + $adObjectEntry.ObjectName
|
||
$DAWGruppenAnlegenOutList.Add($DAWGruppenAnlegenOutLine)
|
||
}
|
||
|
||
#Exit
|
||
|
||
$i = 1
|
||
$PNR = 1000000
|
||
$DUMPNR = 410000000
|
||
|
||
$MPNR = 0
|
||
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
Write-Host "processing entry #" $i.ToString()
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
#$NewFullName = $Institut + "GGX-" + $DisplayName.Replace("OFK", "OFFK").Replace("IEK", "IntExK").Replace("WEB_EDGE", "WEB_MEDGE")
|
||
|
||
#450000000 AKO_OFFK_Office_Default
|
||
#460000000 AKE_IntExK_Admins
|
||
#480000000 AKW_WEB_SSKMG-STD
|
||
#480000001 AKW_WEB_IE_ALT_Videoueberwachung
|
||
#480000002 AKW_WEB_OhneIntranet
|
||
|
||
$NewFullName = $Institut + $DisplayName
|
||
if ($DisplayName -eq "AK_WEB_SSKMG-STD")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKW_WEB_SSKMG-STD"
|
||
$MPNR = 500000001
|
||
}
|
||
elseif ($DisplayName -eq "AK_IEK_Admins")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKE_IntExK_Admins"
|
||
$MPNR = 500000002
|
||
}
|
||
elseif ($DisplayName -eq "AK_OFK_Office_Default")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKO_OFFK_Office_Default"
|
||
$MPNR = 500000003
|
||
}
|
||
elseif ($DisplayName -eq "AK_WEB_IE_ALT_Videoueberwachung")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKW_WEB_IE_ALT_Videoueberwachung"
|
||
$MPNR = 500000004
|
||
}
|
||
elseif ($DisplayName -eq "AK_WEB_OhneIntranet")
|
||
{
|
||
$NewFullName = $Institut + "GGX-AKW_WEB_OhneIntranet"
|
||
$MPNR = 500000005
|
||
}
|
||
else
|
||
{
|
||
$NewFullName = $DisplayName
|
||
$MPNR = $DUMPNR
|
||
#$DUMPNR++;
|
||
}
|
||
|
||
|
||
$roleType = getRoleType $adObjectEntry $roletypeTag
|
||
# $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + ""
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
$userMemberShips = @(getAllUserMemberships $adObjectEntry)
|
||
|
||
$NewFullName1 = $NewFullName
|
||
#$StelleVerant = "9999999/9999"
|
||
#$StelleVerant = "3410200/0015"
|
||
|
||
## Richtige Stelle
|
||
|
||
$StelleVerant = "0570000/0012" #auch fuer SEC, WEBBROWSER
|
||
|
||
Write-Host 1
|
||
Write-Host $MPNR
|
||
Write-Host $NewFullName1
|
||
Write-Host $StelleVerant
|
||
Write-Host $adObjectEntry.OldName
|
||
Write-Host 6
|
||
|
||
# "" + $MPNR + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + "Anwendungskonfiguration " + $NewFullName1 + ";" + $StelleVerant + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";AK" | Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutLine = "" + $MPNR + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + "Anwendungskonfiguration " + $NewFullName1 + ";" + $StelleVerant + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";AK"
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
$PNR++
|
||
$DUMPNR++
|
||
|
||
foreach ($userMemberShip in $userMemberShips)
|
||
{
|
||
# Fehler
|
||
#$Institut + ";" + "Role" + ";" + $adObjectEntry.GUIADGroupName + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName | out-file $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
#$Institut + ";" + "Role" + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
#Write-Host "## o: " $userMemberShip.Origin
|
||
|
||
$persnr = "0000000000"
|
||
#$ProfilNR = "4000007000"
|
||
$ProfilNR = "" + $DUMPNR
|
||
|
||
if ($userMemberShip.Origin -ieq "user")
|
||
{
|
||
#Write-Host "##: " + $userMemberShip.MemberName
|
||
try
|
||
{
|
||
$persnr = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
$dum = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
if (-not $dum)
|
||
{
|
||
$dum = $userMemberShip.MemberName
|
||
}
|
||
$persnr = $dum
|
||
}
|
||
catch
|
||
{
|
||
outLog "User nicht gefunden: " $u.MemberName
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
#Write-Host "PN: " + $persnr
|
||
# Kurs Daten schreiben
|
||
# persnr + ";" + $adObjectEntry.OldName + ";" + $ProfilNR + ";" + "AppConfiguration"| Out-File $KURSIstMitarbeiterProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSIstMitarbeiterProfileOutLine = $persnr + ";" + $adObjectEntry.OldName + ";" + $ProfilNR + ";" + "AppConfiguration"
|
||
$KURSIstMitarbeiterProfileOutList.Add($KURSIstMitarbeiterProfileOutLine)
|
||
}
|
||
|
||
}
|
||
$i++
|
||
}
|
||
}
|
||
# AppOrganisation ---------------------------------------
|
||
elseif ($roletypeTag -ieq $FI.TypeTagOrganisation)
|
||
{
|
||
|
||
$i = 1
|
||
$ProfilNummer = 1
|
||
$ProfilNR = 440000000
|
||
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
|
||
# DAWGruppenAnlegenOutArray füllen
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
|
||
$NewFullName = $Institut + "GGX-" + $DisplayName
|
||
$NewFullName1 = $NewFullName.Replace($SPKID + "GGX-O", $SPKID + "GGX-OG")
|
||
#$DisplayName1 = $DisplayName.Replace("O_G_", "OG_G_")
|
||
$DisplayName1 = $DisplayName.Replace("O_", "OG_")
|
||
|
||
$adObjectEntry.OldName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupDisplayName = $DisplayName
|
||
|
||
|
||
$DAWGruppenAnlegenOutLine = $Institut + ";" + $NewFullName1 + ";" + $adObjectEntry.Description + ";" + 'Role' + ";" + $DisplayName1 + ";" + "" + ";" + $adObjectEntry.ObjectName
|
||
$DAWGruppenAnlegenOutList.Add($DAWGruppenAnlegenOutLine)
|
||
|
||
# Write-Host "processing entry #"$i.ToString()
|
||
# not used here, see above
|
||
# $DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
# $TempString = $adObjectEntry.ObjectName.Split('-')
|
||
# $adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
# $NewFullName = $Institut + "GGX-" + $DisplayName
|
||
# $NewFullName1 = $NewFullName.Replace($SPKID + "GGX-O", $SPKID + "GGX-OG")
|
||
|
||
#$roleType = getRoleType $adObjectEntry $roletypeTag
|
||
|
||
$roleType = "Organisation"
|
||
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName1 + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + ""
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
$PnrStr = ([string]$ProfilNummer).PadLeft(2, '0')
|
||
# $AWNR = ([string]$nummer_array.Item($item.OldName)).PadLeft(3, '0')
|
||
$AWNR = "xxxx"
|
||
$ProfilName = "Organisatorische Gruppe " + $NewFullName1
|
||
$ProfilNR++
|
||
#$ProfilNR = "48" + $AWNR + "7" + ($PnrStr).ToString()
|
||
|
||
$KURSSollProfileOutLine = [string]$ProfilNR + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + $ProfilName.Replace($SPKID + "GGX-OG_", "") + ";" + "0570000/0012" + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";OG"
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
$ProfilNummer++
|
||
$userMemberShips = @(getAllUserMemberships $adObjectEntry)
|
||
foreach ($userMemberShip in $userMemberShips)
|
||
{
|
||
# Fehler laut Norbert
|
||
#$Institut + ";" + "Role" + ";" + $adObjectEntry.GUIADGroupName + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName | out-file $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $NewFullName1 + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
#Write-Host "TypeTagOrganisation: " $userMemberShip.MemberClass
|
||
#$Institut + ";" + "Role" + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName | out-file $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
#Write-Host "TypeTagOrganisation: " $userMemberShip.MemberClass
|
||
|
||
#$userMemberShip | Out-String
|
||
|
||
$persnr = "0000000000"
|
||
|
||
if ($userMemberShip.Origin -ieq "user")
|
||
{
|
||
try
|
||
{
|
||
$persnr = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
$dum = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
if (-not $dum)
|
||
{
|
||
$dum = $userMemberShip.MemberName
|
||
}
|
||
$persnr = $dum
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "User nicht gefunden: " $u.MemberName
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
# Kurs Daten schreiben
|
||
$KURSIstMitarbeiterProfileOutLine = $persnr + ";" + $adObjectEntry.OldName + ";" + $ProfilNR + ";" + "Organisation"
|
||
$KURSIstMitarbeiterProfileOutList.Add($KURSIstMitarbeiterProfileOutLine)
|
||
}
|
||
|
||
}
|
||
$i++
|
||
}
|
||
}
|
||
|
||
# Security ------------------------------------------
|
||
elseif ($roletypeTag -ieq $FI.TypeTagSecurity)
|
||
{
|
||
|
||
$SicherheitseinstellungenFilePath = $SecurityInFilePath
|
||
$SicherheitseinstellungenFilePathEntries = Get-Content -Path $SicherheitseinstellungenFilePath | ConvertFrom-Csv -Delimiter ";"
|
||
$sec_array = @{ "nummer" = "nummer" }
|
||
foreach ($item in $SicherheitseinstellungenFilePathEntries)
|
||
{
|
||
#write-host $item.Name $item.Verantwortlicher
|
||
$sec_array[$item.Name] = $item.Verantwortlicher
|
||
}
|
||
|
||
#exit
|
||
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
$adObjectEntry.OldName = $adObjectEntry.ObjectName
|
||
Write-Host "--++ OLDNAME: " $adObjectEntry.OldName
|
||
if ( $adObjectEntry.OldName.Contains($SPKID + "GDT"))
|
||
{
|
||
continue
|
||
}
|
||
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
|
||
$NewFullName = $Institut + "GGX-" + $DisplayName
|
||
|
||
Write-Host "Sicherheit: " + $NewFullName + $DisplayName + $NewFullName.Replace($SPKID + "GGX-S_", "SE_")
|
||
|
||
$adObjectEntry.OldName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupDisplayName = $DisplayName
|
||
# $Institut + ";" + $NewFullName.Replace("-S_", "-SE_") + ";" + $adObjectEntry.Description + ";" + 'Role' + ";" + $NewFullName.Replace($SPKID + "GGX-S_", "SE_") + ";;" + $adObjectEntry.ObjectName | Out-File $DAWGruppenAnlegenOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenAnlegenOutLine = $Institut + ";" + $NewFullName.Replace("-S_", "-SE_") + ";" + $adObjectEntry.Description + ";" + 'Role' + ";" + $NewFullName.Replace($SPKID + "GGX-S_", "SE_") + ";;" + $adObjectEntry.ObjectName
|
||
$DAWGruppenAnlegenOutList.Add($DAWGruppenAnlegenOutLine)
|
||
Write-Host "--++ OLDNAME: Ende"
|
||
}
|
||
|
||
# --- once, before the loop -------------------------------------------------
|
||
# Parametrised PN prefixes:
|
||
# $pnPrefix1 = two-digit numeric string (e.g. "43")
|
||
# $pnPrefix2 = four-digit numeric string (e.g. "9000")
|
||
# Final PN = prefix1 + prefix2 + three-digit suffix from the CSV.
|
||
$pnPrefix1 = "43"
|
||
$pnPrefix2 = "9000"
|
||
# Load the ordered rule list. Order in the file = match priority (most specific
|
||
# first), exactly like the original if/elseif cascade.
|
||
|
||
$pnRules = [System.Collections.Generic.List[object]]::new()
|
||
foreach ($row in $SPK.ProfileNumberMappings)
|
||
{
|
||
$pnRules.Add([pscustomobject]@{
|
||
Pattern = $row.Pattern
|
||
PN = $pnPrefix1 + $pnPrefix2 + $row.Suffix # e.g. "43" + "9000" + "017"
|
||
})
|
||
}
|
||
|
||
$iSonstiges = 0
|
||
$ProfilNummerSonstigesStartWert = 430000000
|
||
$PN = ""
|
||
$StelleVerant = "0570000/0012"
|
||
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
#Write-Host "processing entry #"$i.ToString()
|
||
|
||
Write-Host "OLDNAME: " $adObjectEntry.OldName
|
||
|
||
if ( $adObjectEntry.OldName.Contains($SPKID + "GDT"))
|
||
{
|
||
continue
|
||
}
|
||
|
||
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
$NewFullName = $Institut + "GGX-" + $DisplayName
|
||
|
||
#Write-Host "----------------------------------------------" $DisplayName $NewFullName
|
||
|
||
$roleType = getRoleType $adObjectEntry $roletypeTag
|
||
# $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName.Replace("-S_", "-SE_") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName.Replace("-S_", "-SE_") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | Out-File $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName.Replace("-S_", "-SE_") + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + ""
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
$PN = $null
|
||
foreach ($rule in $pnRules)
|
||
{
|
||
if ($DisplayName.Contains($rule.Pattern))
|
||
{
|
||
$PN = $rule.PN
|
||
break # first match wins, just like elseif
|
||
}
|
||
}
|
||
if ($null -eq $PN)
|
||
{
|
||
# the original 'else' branch
|
||
$PN = ($ProfilNummerSonstigesStartWert + $iSonstiges).ToString()
|
||
$iSonstiges++
|
||
}
|
||
|
||
#############################################
|
||
$NewFullName1 = $NewFullName.Replace($SPKID + "GGX-S_", $SPKID + "GGX-SE_")
|
||
|
||
Write-Host $NewFullName1
|
||
|
||
$StelleVerant = $sec_array.Item($adObjectEntry.OldName)
|
||
|
||
# $PN + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + "Sicherheitseinstellung " + $NewFullName1 + ";" + $StelleVerant + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";SE" | Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutLine = $PN + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + "Sicherheitseinstellung " + $NewFullName1 + ";" + $StelleVerant + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";SE"
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
$userMemberShips = @(getAllUserMemberships $adObjectEntry)
|
||
|
||
foreach ($userMemberShip in $userMemberShips)
|
||
{
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $NewFullName1 + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
|
||
|
||
$persnr = "0000000000"
|
||
|
||
if ($userMemberShip.Origin -ieq "user")
|
||
{
|
||
try
|
||
{
|
||
$persnr = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
$dum = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
if (-not $dum)
|
||
{
|
||
$dum = $userMemberShip.MemberName
|
||
}
|
||
$persnr = $dum
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "User nicht gefunden: " $u.MemberName
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
# Kurs Daten schreiben
|
||
# $persnr + ";" + $adObjectEntry.OldName + ";" + $PN + ";" + "Security" | Out-File $KURSIstMitarbeiterProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSIstMitarbeiterProfileOutLine = $persnr + ";" + $adObjectEntry.OldName + ";" + $PN + ";" + "Security"
|
||
$KURSIstMitarbeiterProfileOutList.Add($KURSIstMitarbeiterProfileOutLine)
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
# Anwenderrollen ------------------------------------------
|
||
elseif ($roletypeTag -ieq $FI.TypeTagRole)
|
||
{
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
|
||
$NewFullName = $SPKID + "GGX-" + $DisplayName
|
||
|
||
Write-Host "Rolle: " + $NewFullName + $DisplayName + $NewFullName
|
||
|
||
$adObjectEntry.OldName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupName = $adObjectEntry.ObjectName
|
||
$adObjectEntry.GUIADGroupDisplayName = $DisplayName
|
||
#$Institut + ";" + $NewFullName.Replace("-S_", "-SE_") + ";" + $adObjectEntry.Description + ";" + 'Role' + ";" + $NewFullName.Replace("P030GGX-S_", "SE_") + ";;" + $adObjectEntry.ObjectName | out-file $DAWGruppenAnlegenOutFilePath -Encoding "utf8NoBom" -Append
|
||
}
|
||
|
||
# BUGFIX 2026-07-02: re-enabled - with this commented out, the allowlist filter
|
||
# below never ran and entries the original cascade skipped were processed.
|
||
$prefixMatcher = buildPrefixMatcher $KURSProfilePrefixes
|
||
|
||
$ProfilNummer = 470000000
|
||
$ProfilNummerLM = 471000000
|
||
$iSonstiges = 0
|
||
$PN = ""
|
||
$StelleVerant = "0570000/0012"
|
||
|
||
foreach ($adObjectEntry in $adObjectEntries)
|
||
{
|
||
# Write-Host "processing entry #"$i.ToString()
|
||
$DisplayName = $adObjectEntry.ShortCut + $adObjectEntry.ObjectName.Substring($adObjectEntry.ObjectName.IndexOf('-') + 1)
|
||
$TempString = $adObjectEntry.ObjectName.Split('-')
|
||
$adObjectEntry.GroupName = $TempString[0] + '-' + $DisplayName
|
||
$NewFullName = $Institut + "GGX-" + $DisplayName
|
||
#Write-Host "--##++ So sollte der Name lauten: " $adObjectEntry.OldName
|
||
|
||
# ===== This single check REPLACES the entire 1000-branch if/elseif cascade =====
|
||
# Original behaviour: known prefix -> continue processing; unknown -> 'continue'.
|
||
# BUGFIX 2026-07-02: re-enabled. Note: the original cascade's FIRST branch is
|
||
# if ($OldName.StartsWith($SPKID + "GUX")) { } <- empty body, NO 'continue'
|
||
# i.e. GUX entries fall through and ARE processed. The explicit check below
|
||
# preserves that regardless of whether $SPKID + "GUX" is listed in the prefix CSV.
|
||
if (-not ($adObjectEntry.OldName.StartsWith($SPKID + "GUX")) -and
|
||
-not (testKnownPrefixes $adObjectEntry.OldName $prefixMatcher))
|
||
{
|
||
continue
|
||
}
|
||
|
||
#R125GGX-Energieberater
|
||
$roleType = getRoleType $adObjectEntry $roletypeTag
|
||
# Soll raus $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | out-file $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# Soll raus $Institut + ";" + $roleType + ";" + $adObjectEntry.OldName + ";" + $NewFullName + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" + ";" + "" | out-file $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
if ( $NewFullName.Contains("R_LM_"))
|
||
{
|
||
$PN = ($ProfilNummerLM).ToString()
|
||
$ProfilNummerLM++
|
||
$NewFullName = $NewFullName.Replace("AR_LM_", "LM_")
|
||
}
|
||
else
|
||
{
|
||
$PN = ($ProfilNummer + $iSonstiges).ToString()
|
||
$iSonstiges++
|
||
}
|
||
#Write-Host $PN
|
||
#Write-Host $NewFullName
|
||
|
||
$NewFullName1 = $NewFullName.Replace($SPKID + "GGX-S_", $SPKID + "GGX-SE_")
|
||
|
||
Write-Host $NewFullName1
|
||
|
||
# $PN + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + "Anwenderrolle " + $NewFullName1 + ";" + $StelleVerant + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";AR" | Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutLine = $PN + ";" + $NewFullName1.Replace($SPKID + "GGX-", "") + ";" + "Anwenderrolle " + $NewFullName1 + ";" + $StelleVerant + ";" + $adObjectEntry.OldName + ";" + $item.'GUIADGroup.Description' + ";AR"
|
||
$KURSSollProfileOutList.Add($KURSSollProfileOutLine)
|
||
$userMemberShips = @(getAllUserMemberships $adObjectEntry)
|
||
|
||
if (1 -lt 2)
|
||
{
|
||
foreach ($userMemberShip in $userMemberShips)
|
||
{
|
||
# Fehler
|
||
#$Institut + ";" + "Role" + ";" + $adObjectEntry.GUIADGroupName + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName | out-file $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
# $Institut + ";" + "Role" + ";" + $NewFullName1 + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutLine = $Institut + ";" + "Role" + ";" + $NewFullName1 + ";" + "" + ";" + "" + ";" + $SPK.'RootDomainName' + "\" + $userMemberShip.MemberName + ";" + "" + ";" + "" + ";" + $userMemberShip.Origin + ";" + $userMemberShip.OriginName
|
||
$DAWGruppenverwaltungOutList.Add($DAWGruppenverwaltungOutLine)
|
||
#Write-Host "TypeTagSecurity: " $userMemberShip.MemberClass
|
||
#$userMemberShip | Out-String
|
||
|
||
|
||
$persnr = "0000000000"
|
||
|
||
if ($userMemberShip.Origin -ieq "user")
|
||
{
|
||
try
|
||
{
|
||
$persnr = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
$dum = $mitarbeiter_array.Item($userMemberShip.MemberName)
|
||
if (-not $dum)
|
||
{
|
||
$dum = $userMemberShip.MemberName
|
||
}
|
||
$persnr = $dum
|
||
}
|
||
catch
|
||
{
|
||
Write-Host "User nicht gefunden: " $u.MemberName
|
||
writeExceptionInfo $_ -Rethrow
|
||
}
|
||
|
||
# Kurs Daten schreiben
|
||
# $persnr + ";" + $adObjectEntry.OldName + ";" + $PN + ";" + "AW" | Out-File $KURSIstMitarbeiterProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSIstMitarbeiterProfileOutLine = $persnr + ";" + $adObjectEntry.OldName + ";" + $PN + ";" + "AW"
|
||
$KURSIstMitarbeiterProfileOutList.Add($KURSIstMitarbeiterProfileOutLine)
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
# ===== Post-processing of output collections (2026-07-05) =====================
|
||
# 1) All collections are sorted ONCE before writing (deterministic, culture-
|
||
# independent ordinal order). Inline writes stay unsorted and cheap.
|
||
# 2) The 'Neu' Gruppenverwaltung variant is no longer produced along the way;
|
||
# it is DERIVED from the sorted Out list: rows assigning an account to a
|
||
# target group (Accounts.Add non-empty) are grouped by GUIADGroup.LDAP.
|
||
# The first row of each group keeps all columns; subsequent rows carry only
|
||
# the Accounts.Add column. Rows without an account assignment (e.g. group
|
||
# creation rows) pass through unchanged.
|
||
$ordinalComparer = [System.StringComparer]::Ordinal
|
||
$DAWGruppenAnlegenOutList.Sort($ordinalComparer)
|
||
$DAWGruppenverwaltungOutList.Sort($ordinalComparer)
|
||
$KURSSollProfileOutList.Sort($ordinalComparer)
|
||
$KURSIstMitarbeiterProfileOutList.Sort($ordinalComparer)
|
||
|
||
$DAWGruppenverwaltungNeuOutList.Clear()
|
||
$lastLdap = $null
|
||
foreach ($outLine in $DAWGruppenverwaltungOutList)
|
||
{
|
||
$cols = $outLine.Split(";")
|
||
if ([string]::IsNullOrEmpty($cols[5]))
|
||
{
|
||
# no account assignment -> pass through unchanged
|
||
$DAWGruppenverwaltungNeuOutList.Add($outLine)
|
||
$lastLdap = $null
|
||
continue
|
||
}
|
||
if ($cols[2] -cne $lastLdap)
|
||
{
|
||
# first row of a GUIADGroup.LDAP block -> all columns
|
||
$DAWGruppenverwaltungNeuOutList.Add($outLine)
|
||
$lastLdap = $cols[2]
|
||
}
|
||
else
|
||
{
|
||
# subsequent row of the same block -> only GUIADGroup.Accounts.Add.LDAPs
|
||
$DAWGruppenverwaltungNeuOutList.Add(";;;;;" + $cols[5] + ";;;;")
|
||
}
|
||
}
|
||
|
||
$DAWGruppenAnlegenOutList | Out-File $DAWGruppenAnlegenOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungOutList | Out-File $DAWGruppenverwaltungOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenverwaltungNeuOutList | Out-File $DAWGruppenverwaltungNeuOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSSollProfileOutList | Out-File $KURSSollProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$KURSIstMitarbeiterProfileOutList | Out-File $KURSIstMitarbeiterProfileOutFilePath -Encoding "utf8NoBom" -Append
|
||
$DAWGruppenAnlegenOutList.Clear()
|
||
$DAWGruppenverwaltungOutList.Clear()
|
||
$DAWGruppenverwaltungNeuOutList.Clear()
|
||
$KURSSollProfileOutList.Clear()
|
||
$KURSIstMitarbeiterProfileOutList.Clear()
|
||
$end = Get-Date
|
||
outLog "finished: " $MyInvocation.MyCommand " on type " $roletypeTag.PadRight(30, " ") ", used " ($end - $begin)
|
||
}
|