Solved

Hello, i have an issue with a powershell script

Posted on 2014-09-12
8
626 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 71

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
Are your AD admin tools letting you down?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 
LVL 71

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 71

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

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

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

Suggested Solutions

Today, the web development industry is booming, and many people consider it to be their vocation. The question you may be asking yourself is – how do I become a web developer?
A recent project that involved parsing Tableau Desktop and Server log files to extract reusable user queries for use in other systems. I chose to use PowerShell to gather the data, and SharePoint to present it...
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles to another domain controller. Log onto the new domain controller with a user account t…

685 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