Author Posts

January 1, 2012 at 12:00 am

by aubrytj at 2012-10-29 23:23:48

Have this task to populate the ipPhone field with the telephone field – all using the E64 format, thou it is working smoothly – their is one character it just will not replace and that is the dot – yes " . " – no matter where it is in the telephone field it thinks it is a number and keeps it as part of the first 10 digits to populate the ipPhone. Any suggestions is appreciated – I'm thinking I should put another replacement option – yet not sure...

# ————————————————————–
# Request to copy telephone field for all users to ipPhone field
# Using the E64 format – for VOIP – striping the telephone number
# and using only the first 10 digits all in US Format E64
# Anytime a telephone field has been updated the ipPhone will change
#———————————————————————–

Set-ExecutionPolicy remotesigned
Clear-Host
# Add Quest Snapin
Add-PSSnapin Quest.ActiveRoles.ADManagement
& 'C:\Program Files\Quest Software\Management Shell for AD\qsft.ps1'

# All users in AD
$Users=(get-qaduser)

foreach ($User in $Users) {
$phone=(get-qaduser -identity $User.name |where {$_.phonenumber -ne $null}|select phonenumber)
if ($phone -eq $null) {

} else{

$ipPhone = ($User.PhoneNumber -replace '\s|\(|\)|-',").Replace('X',';ext=')
$ipPhone = $ipPhone.Substring(0,10)

%{Get-QADUSer $user.LogonName | Set-QADUser -ObjectAttributes @{ipPhone=$ipPhone}} | Format-Table SamAccountName,Displayname, ModificationDate, description, phonenumber

}

}

Thanks in advance for any tips...

by coderaven at 2012-10-30 06:29:16

Sorry for not such a great solution, but you may be right on the easy side of things. I will look into it a little bit more, I am sure there is a much better and easier solution.

$ipPhone = (($User.PhoneNumber -replace '\s|\(|\)|-','').Replace('X',';ext=')).Replace(".","")
$ipPhone = $ipPhone.Substring(0,10)

by aubrytj at 2012-10-31 20:38:28

Thanks coderaven – that definitely works...lots of "replace" still works...

by aubrytj at 2012-11-07 22:53:02

Thank you again coderaven...

So I'm running the script and noticed that I did miss something – with our AD having several 1000 objects – code stopped at 1000...lol – so I added the -sizelimit 0 option...now that it placed in the array little over 9800 objects and then updated the necessary field – it took an avg of 2 hrs...so I then looled into "Searchroot" which seemed to improve the array timing – however the overall performance is still 2 + hrs...

Is there a much way to populate the data needed for over 9800 objects?

Server is a virtual GC with lots of disk space/ram needed and it is among its other 4 GC's handling requests, the task runs @ midnight and so not much of anything else happening that I can tell...

Let me know if anyone have any ideals...of random thoughts on how to improve the performance of the PS script...!!???

thanks again...

ta

by RichardSiddaway at 2012-11-08 13:15:08

A couple of points come to mind

You start like this

$Users=(get-qaduser)

foreach ($User in $Users) {
$phone=(get-qaduser -identity $User.name |where {$_.phonenumber -ne $null}|select phonenumber)

so you are getting each user twice.

Can you modify your code so its

get-qaduser | foreach { }

that way you reduce the round trips to AD

Also use the property parameter on get-aduser to reduce the amount of data pulled from AD

I can't test this at the moment but something like this should work

Set-ExecutionPolicy remotesigned
Clear-Host
# Add Quest Snapin
Add-PSSnapin Quest.ActiveRoles.ADManagement
& 'C:\Program Files\Quest Software\Management Shell for AD\qsft.ps1'

# All users in AD
get-qaduser -Includedproperties phonenumber |
foreach {
if ($_.phonenumber){
$ipPhone = (($_.PhoneNumber -replace '\s|\(|\)|-','').Replace('X',';ext=')).Replace(".","")
$ipPhone = $ipPhone.Substring(0,10)

$_ | Set-QADUser -ObjectAttributes @{ipPhone=$ipPhone} | Format-Table SamAccountName,Displayname, ModificationDate, description, phonenumber

}
}

by aubrytj at 2012-11-09 14:56:19

Thanks Richard – have briefly tested in test domain – no issues – will go through some scenarios and record performance....
That made perfect sense – one instead of two actions...

by aubrytj at 2012-11-10 16:33:44

Richard – the difference in time was extremed – from the worst case of 2:hrs 20mins or 2hrs avg – to 40min's – will continue to monitor – yet I would say this is "SOLVED" – very sweet!

Thanks!

ta