Script reads old group name and new group name from CSV file. The processes data from XML and PS1 file. It exports the previous rights to a CSV file in the subdir CSVfiles. Needs XML and CSV files.
PS1:
$xmlConfigfile = ".EmptyADgroup.xml" While (((Test-Path $xmlConfigfile) -eq $false) -or ($NoXML)){ [System.Windows.Forms.MessageBox]::Show("ERROR: $xmlConfigfile not found!") write-host De XML file kan niet gevonden worden -F Red If (!($psISE)){"Press any key to continue...";[void][System.Console]::ReadKey($true)} exit } If (-not ($CSV -and $Header -and $Migrated -and $Domain -and $OUlocal1 - $OUlocal2 -and $OUGlobal1 -and $OUGlobal2)) { $xml = get-content $xmlConfigfile If (-not $CSV) {$CSV = $xml.Config.Settings.CSV} If (-not $Header) {$Header = $xml.Config.Settings.Header} If (-not $Migrated) {$Migrated = $xml.Config.Settings.Migrated} } Import-Module ActiveDirectory While (((Test-Path $CSV) -eq $false) -or ($NoCSV)){ [System.Windows.Forms.MessageBox]::Show("ERROR: $xmlConfigfile not found!") write-host De CSV file kan niet gevonden worden -F Red If (!($psISE)){"Press any key to continue...";[void][System.Console]::ReadKey($true)} exit } $list = @(import-csv -Delimiter ';' $CSV) write-host ".CSV file contains" $list.count " lines." -F Yellow -B DarkCyan $list[0] if ($error.count -ne 0) { write-host "An error occurred during the operation. Details follow:" $error[0].categoryInfo $error[0].invocationinfo write-host "==========================================================" write-host "Quit due to an error" -Fore Red Exit } else { #"Successfully opened .CSV file..." } #Loop through .CSV file foreach($entry in $list) { # Reset the variable to make sure that they are clean before processing a user. $Oldgroup=$entry.OldGroup $NewGroup=$entry.NewGroup if ($Oldgroup -ne $null){$CSVExportFile = ($Oldgroup+".csv")} While (((Test-Path ".CSVFiles$CSVExportFile") -ne $false) -or ($NoCSVExportFile)){ [System.Windows.Forms.MessageBox]::Show("ERROR: $CSVExportFile already exists!") write-host Het CSV bestande $CSVExportFile bestaat al -F Red If (!($psISE)){"Press any key to continue...";[void][System.Console]::ReadKey($true)} exit } write-host "Er wordt een export gemaakt van de groep $Oldgroup" -b DarkCyan -f Yellow $lijst = get-adgroupmember $Oldgroup -recursive Add-content -Value $Header -Path ".CSVFiles$CSVExportFile" foreach ($item in $lijst){ $Outinfo = $Oldgroup + ";" + $item.samaccountname Add-content -Value $Outinfo -Path ".CSVFiles$CSVExportFile"} While (((Test-Path ".CSVFiles$CSVExportFile") -eq $false) -or ($NoCSVExportFile)){ [System.Windows.Forms.MessageBox]::Show("ERROR: $CSVExportFile not found!") write-host Het CSV bestand $CSVExportFile is niet weggeschreven -F Red If (!($psISE)){"Press any key to continue...";[void][System.Console]::ReadKey($true)} exit } write-host "De export is gemaakt van de groep $Oldgroup op locatie .CSVFiles$CSVExportFile" -b DarkCyan -f Yellow write-host "De users in de groep $Oldgroup worden nu uit de groep gehaald" -b DarkCyan -f Yellow foreach ($item in $lijst){ Remove-ADGroupMember $oldgroup -Members $item.samaccountname -Confirm:$false } $lijst = get-adgroupmember $Oldgroup -recursive if ($lijst -ne $null) {write-host "Niet alle users zijn uit de groep $oldgroup gehaald" -b Black -f Red} if ($lijst -eq $null) {write-host "Alle users zijn uit de groep $oldgroup gehaald" -b DarkCyan -f Yellow} if ($lijst -eq $null) {$Description = get-adgroup "ALC_APL_mibores" -Properties * | ForEach-Object {$_.Description}} $AddDescription = "$Migrated $Newgroup |" $Description = [string]$description $Description = ($AddDescription+$description) if ($lijst -eq $null) {Set-ADGroup $Oldgroup -Description $Description} }
XML:
<Config> <Settings> <CSV>.EmptyADgroup.csv</CSV> <Header>Group;sAMaccountname</Header> <Migrated>Deze Groep is gemigreerd naar de groep</Migrated> </Settings> </Config>
CSV:
Oldgroup;Newgroup Oldgroup;Newgroup
ZIP: