Forum Discussion

PSNewie2021's avatar
PSNewie2021
Copper Contributor
Aug 26, 2021

Update AD Users' Email Address from CSV where this field is empty in AD (except specific domain)

Hi There,

 

I am trying to create a PS script with the following conditions and hoping someone here is able to guide me. Any assistance would be highly appreciated.

 

Import users from a CSV file with 2 fields (AcccountName, Email). The import process should target/update AD users matching the users in the CSV with "EmailAddress" AD Attribute when its blank (null) and exclude users who have an existing email address "@ourcompany.com" already within the AD Attribute. 

 

My script is as per below and it doesn't work. 😞

 

Import-Module ActiveDirectory

$rootPath = "C:\Scripts"

$Users = Import-Csv -Delimiter "," -Path ($rootPath + "\Users.csv")

foreach($user in $Users){

 

IF
(Get-ADUser -SearchBase "CN=Users,DC=test,DC=local" -properties EmailAddress -Filter {EmailAddress -notlike '*mycompany.com' -and EmailAddress -eq ""})

 

{Set-ADUser -Identity $User.AccountName -EmailAddress $User.Email}

 

ELSE {Write-Host "No update possible as this User $user already has a Company Email Address"}
}

3 Replies

  • psophos's avatar
    psophos
    Brass Contributor

    PSNewie2021summat like:

    foreach($user in $Users)
    {
        $adUser = Get-ADUser -Identity $user.AccountName -Properties EmailAddress -ErrorAction SilentlyContinue
        if($adUser)
        {
            # user exists 
            if([System.string]::IsNullOrWhiteSpace($adUser.EmailAddress) )
            {
                # email address is empty, set it
                $adUser | Set-ADUser -EmailAddress $User.Email
            }
            elseif($adUser.EmailAddress -like '*mycompany.com')
            {
                # Leave this email alone. 
            }
            else
            {
                # email address exists, what to do here?  
            }
        }
        else
        {
            # The user does not exist.  This is probably an error of soem sort. 
        }
    }

    Assuming the Get-ADUser line succeeds  of course.

     

     

    • kevin_devon's avatar
      kevin_devon
      Copper Contributor

      Good Daypsophos I like the idea of this, but I want to use it for something other then email.

      Is this possible? IE, I need to modify the homePostalAddress, this is currently either clear or has a License code using A2B1 etc etc. I need the blanks to have this A2B1C1D1, the reason I cannot run a script to ovewright everything is everyone is not the same, some have A2B1C2D1J1 and some have A2B1C1D1J4 etc, 

      • Newbie_Jones's avatar
        Newbie_Jones
        Brass Contributor

        kevin_devon 

         

        General etiquette would be to start your own thread for this question.

        If you just want to set the field if its blank, then this is a two step process.
        Not tested, but it will be something like.

         

        Get-ADUser -properties homePostalAddress -filter 'homePostalAddress -notLike "*"' | 
          ForEach {Set-ADuser -Identity $_ -Add @{homePostalAddress = 'A2B1C1D1'}}

         

         

Resources