Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2182
  • Last Modified:

Slow powershell script....any way to speed it up?

I use the Quest AD cmdlets to update certain AD attributes, but I've noticed the script is "slow" (takes approx. 1-2 seconds per AD object). I'm updating 600+ AD objects and @ 1-2 seconds per object, the time adds up. I'm wondering if someone can tell me if this is normal or there's a more efficient way to rewrite my script. I noticed that when the script updates an object, the shell window shows/scrolls a list of attributes for the object (I'd assume the default properties). That's why I used the "-IncludedProperties" switch to see if that made a difference since I'm only targeting a handful of attributes...I know this switch works for the Get-QADUser but not sure if it's working for the Set-QADUser.
# Read source TXT file
$users = Get-Content -Path 'C:\users.txt'

# Look through each of the users and set AD attributes
foreach($user in $users){
	Set-QADUser -Identity $user -IncludedProperties mail,department -ObjectAttributes @{mail='something';department='something'}
	}

Open in new window

0
bndit
Asked:
bndit
  • 3
  • 2
  • 2
2 Solutions
 
Meir RivkinFull stack Software EngineerCommented:
Set-QADUser does return output after successfully completing.  If you'd like to have it not display the output on screen just assign the Set-QADUser command output to $null.

$null = Set-QADUser -Identity $user -IncludedProperties mail,department -ObjectAttributes @{mail='something';department='something'}

(taken from http://www.powergui.org/thread.jspa?messageID=32130)
0
 
Meir RivkinFull stack Software EngineerCommented:
that alone should decrease time span of Set-QADUser
0
 
soostibiCommented:
Maybe, the other factor that can speed up the script is to create a permanent conenction to AD:

$c = Connect-QADService -Service yourdc.youdomain.com:389

And with this where you use Set-QADUser use the connection parameter, and maybe you do not have to use the -includedproperties parameter at all, but you should compare the two versions. The output can also be suppressed by converting the result to [void]:

[void] (Set-QADUser -Connection $c -Identity $user -ObjectAttributes @{mail='something';department='something'} )
       
0
Worried about phishing attacks?

90% of attacks start with a phish. It’s critical that IT admins and MSSPs have the right security in place to protect their end users from these phishing attacks. Check out our latest feature brief for tips and tricks to keep your employees off a hackers line!

 
Meir RivkinFull stack Software EngineerCommented:
@soostibi

>>The output can also be suppressed by converting the result to [void]:

which is the same as assign the result to $null...
0
 
bnditAuthor Commented:
Thank you both of you; your suggestions really helped and sped up my script although I found that the [void] approach reduced the execution time to 5secs per $user while the $null approach reduced it to 12secs per $user.

@soostibi

The only thing that I didn't use from your suggestion was the "permanent connection" to AD. However, I do my connection outside the ForEach block (see the attached code), and I'm wondering if doing the connection to AD as you suggest would help even more to reduce the execution time.


# Connect to Active Directory provider.
$pwd = Read-Host "Enter Password: " -AsSecureString
$DC = 'DC.domain.com:386'
$connAccount = 'ADAccount'

Connect-QADService -service $DC -ConnectionAccount $connAccount -ConnectionPassword $pwd

ForEach <...>

[void] (Set-QADUser -Identity $user -ObjectAttributes @{mail='something';department='something'} ) 

# Disconnect from Active Directory provider.
Disconnect-QADService

Open in new window

0
 
soostibiCommented:
But use it as I did. So put the result of the connect-qadservice to a variable, and use it at Set-QADUser with -connection parameter. If you do not do this, the Set-QADUser may create a connection every time.
0
 
bnditAuthor Commented:
Ok, I'll try that. Thanks again.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

  • 3
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now