'moving user from multiple ADgroup to others with powershell

exemple of commandi have a csv file formatted like this

oldniveau1,oldniveau2,oldniveau3,newniveau1,newniveau2,newniveau3

0UA_Ventes,CIS countries,Contracts,0UA_Ventes,CIS countries,Contracts_1

enter image description here my goal is to extract active directory group name by formatting the path given in csv file

i have a script that work i give all the line in sigle variable but wheni use the loop i have error message

$csv=Import-Csv $pth\filerN3.csv -Delimiter ","  | Foreach-Object { 

  
$n1 = $_.oldniveau1
$n2 = $_.oldniveau2
$n3 = $_.oldniveau3
$n4 = $_.newniveau1
$n5 = $_.newniveau2
$n6 = $_.newniveau3

$adminn3group = "m^" + $n1 + "^" + $n2 + "^" + $n3 
$newadmingroup= "m^" + $n4 + "^" + $n5 + "^" + $n6
$writegroup= "g^" + $n1 + "^" + $n2 + "^" + $n3  
$newwritegroup="g^" + $n4 + "^" + $n5 + "^" + $n6  
$readgroup="g^" + $n1 + "^" + $n2 + "^" + $n3 + "^R"  
$newreadgroup="g^" + $n4 + "^" + $n5 + "^" + $n6 + "^R"  

$currentmanagermembers = Get-ADGroupMember -Identity $adminn3group  -ErrorAction SilentlyContinue

Add-ADGroupMember -Identity $newadmingroup -Members $currentmanagermembers  -ErrorAction SilentlyContinue


Remove-ADGroupMember -Identity $adminn3group -Members $currentmanagermembers -confirm:$false -ErrorAction SilentlyContinue
###############
    Get-ADGroupMember $writegroup |
    Add-ADPrincipalGroupMembership `
        -MemberOf $newwritegroup 
 
Get-ADGroupMember $writegroup  |
    Remove-ADPrincipalGroupMembership `
        -MemberOf $writegroup -confirm:$false -ErrorAction SilentlyContinue
###############
Get-ADGroupMember $readgroup |
    Add-ADPrincipalGroupMembership `
        -MemberOf $newreadgroup 
 
Get-ADGroupMember $readgroup |
    Remove-ADPrincipalGroupMembership `
        -MemberOf $readgroup -confirm:$false -ErrorAction SilentlyContinue

        ########"


}

so without the loop for the csv when i use 6 variable to fix each one it work and all the user are moved

but with the loop

i have this error any idea why ?

Get-ADGroupMember : Cannot validate argument on parameter 'Identity'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At C:\temp\addN3MGR\move_central.ps1:28 char:54
+ ... entmanagermembers = Get-ADGroupMember -Identity $adminn3group  -Error ...
+                                                     ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-ADGroupMember], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember
 
Add-ADGroupMember : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the command again.
At C:\temp\addN3MGR\move_central.ps1:30 char:29
+ Add-ADGroupMember -Identity $newadmingroup -Members $currentmanagerme ...
+                             ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-ADGroupMember], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember


Solution 1:[1]

The issue was due to empty member for some security group so I changed the command were processed and it worked

I'm a beginner in Powershell and not very comfortable yet with try and catch.

Get-ADGroup  $adminn3group  -ErrorAction SilentlyContinue|Get-ADGroupMember | % {Add-ADGroupMember $newadmingroup -Members $_ }

Get-ADGroup $adminn3group -ErrorAction SilentlyContinue|Get-ADGroupMember | % {Remove-ADGroupMember $adminn3group -Members $_ -confirm:$false} 

Get-ADGroup  $writegroup  -ErrorAction SilentlyContinue|Get-ADGroupMember | % {Add-ADGroupMember $newwritegroup -Members $_ }
 
Get-ADGroup $writegroup -ErrorAction SilentlyContinue|Get-ADGroupMember | % {Remove-ADGroupMember $writegroup -Members $_ -confirm:$false} 

Get-ADGroup  $readgroup  -ErrorAction SilentlyContinue|Get-ADGroupMember | % {Add-ADGroupMember $newreadgroup -Members $_ }

Get-ADGroup $readgroup -ErrorAction SilentlyContinue|Get-ADGroupMember | % {Remove-ADGroupMember $readgroup -Members $_ -confirm:$false} 

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 DocZerø