Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Hello, i have an issue with a powershell script

Posted on 2014-09-12
8
602 Views
Last Modified: 2014-09-13
HI,
I have an issue with a script that is working fine for the most part. I can import everything from a csv except two fields these are otherTelephone and Country/C/co/CountryCode. these two fields I can import on an individual basis but this is going to be very time consuming.

here are the codes.
1;
This works fine except It does not import those two attributes from above, causes it to error with parameters not found.
# Import AD Module
Import-Module ActiveDirectory

# Import CSV into variable $userscsv

$users = Import-Csv -Path "C:\Users\Administrator\Desktop\ADextracttestserver.csv"
# Loop through CSV and update users if the exist in CSV file
$ExcludeProperties = @(	
    )

foreach ($user in $users)
{
	$Arguments = @{}
    $user | Get-Member -MemberType NoteProperty | ? {$ExcludeProperties -NotContains $_.Name} | % {if ($user.($_.Name)) {$Arguments[$_.Name] = $user.($_.Name)} Else {$Arguments[$_.Name] = $Null}}
	

   #Search in specified OU and Update existing attributes            
	Get-ADUser -Filter "SamAccountName -eq '$($user.samaccountname)'" -Properties * -SearchBase "ou=Test Users,DC=testaf,DC=local" | Set-ADUser @Arguments 
}

Open in new window

2;
this works but on an individual basis, the issue here is that I need this to be part of the main script so it runs in bulk querying the users in the csv and I also need it to import the numbers from the csv not a pre defined set like 123 below.
set-aduser testuser -Add @{otherTelephone = 123} 

Open in new window

and finally;
this is the same situation as above, needs to be part of the main script and preferably query the csv if possible but not essential as all users are in the same country.
set-aduser testuser -replace @{C = 'UK'} 

Open in new window

any help will be appreciated.
0
Comment
Question by:BYRONJACKSON
  • 4
  • 3
8 Comments
 
LVL 70

Expert Comment

by:Chris Dent
ID: 40320582
Good morning,

If you add otherTelephone and C fields to your CSV file this will let you import them.
# Import AD Module
Import-Module ActiveDirectory

# Import CSV into variable $userscsv

$users = Import-Csv -Path "C:\Users\Administrator\Desktop\ADextracttestserver.csv"
# Loop through CSV and update users if the exist in CSV file
$ExcludeProperties = @("otherTelephone", "C")

foreach ($user in $users) {
  $Arguments = @{}
  $user |
    Get-Member -MemberType NoteProperty |
    ? {$ExcludeProperties -NotContains $_.Name} | 
    % {if ($user.($_.Name)) {$Arguments[$_.Name] = $user.($_.Name)} Else {$Arguments[$_.Name] = $Null}}
	
  #Search in specified OU and Update existing attributes            
	$ADUser = Get-ADUser -Filter "SamAccountName -eq '$($user.samaccountname)'" -Properties * -SearchBase "ou=Test Users,DC=testaf,DC=local"
	
	if ($ADUser) {
	  $ADUser | Set-ADUser @Arguments
	  $ADUser | Set-ADUser -Add @{otherTelephone = $user.OtherTelephone}
	  $ADUser | Set-ADUser -Replace @{C = $user.C}
	}
}

Open in new window

HTH

Chris
0
 

Author Comment

by:BYRONJACKSON
ID: 40320760
Hi Chris,

thanks I have them already set in the csv so I will give this a try and get back to you.
0
 

Author Comment

by:BYRONJACKSON
ID: 40320761
Hi,

I now receive this error

Set-ADUser : add
At line:22 char:14
+       $ADUser | Set-ADUser -Add @{otherTelephone = $user.OtherTelephone}
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CN=Microsoft,OU...Testaf,DC=local:ADUser) [Set-ADUser], ADInvalidOperationException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.SetADUser
0
NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

 
LVL 70

Expert Comment

by:Chris Dent
ID: 40320799
Is otherTelephone ever blank in your CSV file?

I suspect it may get upset if you try and feed in an unexpected value (like nothing at all).

Chris
0
 

Author Comment

by:BYRONJACKSON
ID: 40320836
Yes there are a few blank fields as not all users have a number to assign to them, how can I get it to ignore/skip those fields?
0
 
LVL 70

Accepted Solution

by:
Chris Dent earned 500 total points
ID: 40320871
We can test for the value before we try and set it:
# Import AD Module
Import-Module ActiveDirectory

# Import CSV into variable $userscsv

$users = Import-Csv -Path "C:\Users\Administrator\Desktop\ADextracttestserver.csv"
# Loop through CSV and update users if the exist in CSV file
$ExcludeProperties = @("otherTelephone", "C")

foreach ($user in $users) {
  $Arguments = @{}
  $user |
    Get-Member -MemberType NoteProperty |
    ? {$ExcludeProperties -NotContains $_.Name} | 
    % {if ($user.($_.Name)) {$Arguments[$_.Name] = $user.($_.Name)} Else {$Arguments[$_.Name] = $Null}}
	
  #Search in specified OU and Update existing attributes            
	$ADUser = Get-ADUser -Filter "SamAccountName -eq '$($user.samaccountname)'" -Properties * -SearchBase "ou=Test Users,DC=testaf,DC=local"
	
	if ($ADUser) {
	  $ADUser | Set-ADUser @Arguments
    if ($user.OtherTelephone) {
      $ADUser | Set-ADUser -Add @{otherTelephone = $user.OtherTelephone}
    }
    if ($user.C) {
      $ADUser | Set-ADUser -Replace @{C = $user.C}
    }
  }
}

Open in new window

As you can see, I've done the same test for the C value.

Chris
0
 

Author Comment

by:BYRONJACKSON
ID: 40320920
thank you Chris that has worked a charm!!
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
This article describes my battle tested process for setting up delegation. I use this process anywhere that I need to setup delegation. In the article I will show how it applies to Active Directory
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question