Login Script to pull users IP Phone from AD and then create a registry key in HKCU with that value

rookeydooks
rookeydooks used Ask the Experts™
on
I need a login script to pull the IP Phone from Active Directory and add the value to:

HKEY_CURRENT_USER/SOFTWARE/XYZ/PhoneClient

I found the script below on another website but unfortunately it thread ends with the original post'er saying.. they did a little tweaking to what was suggested and got it working! But they never posted what they done.

The suggested login script is

Dim objSysInfo, objUser
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
set strtelno = objuser.telephonenumber ' Currently logged in User

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\shoreline teleworks\shoreware client\"
KeyPath = "SOFTWARE\shoreline teleworks\shoreware client"
strValueName = "AgentID"
strValue = strtelno ' <-- This sets the Telephone Number
objRegistry.CreateKey HKEY_CURRENT_USER, strKeyPath, strvaluename, strvalue


I'm guessing i need to add an LDAP path on line 3 >> Set objUser = GetObject("LDAP://" & objSysInfo.UserName)

Something like >> LDAP://OU=OurUSerGroup,DC=OurDomain,DC=com

I've researched objuser for IP Phone and it says use >> objuser.ipPhone (instead of line 4 >> set strtelno = objuser.telephonenumber ' Currently logged in User)

Then edit lines 9 and 10 >>
strKeyPath = "SOFTWARE\shoreline teleworks\shoreware client\"
KeyPath = "SOFTWARE\shoreline teleworks\shoreware client"

To our value >> SOFTWARE/XYZ/PhoneClient

I want to run this as a login script via Group Policy to around 50 users.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Chris DentPowerShell Developer
Top Expert 2010

Commented:
This should do it.
try {
    $adUser = ([ADSISearcher]"(sAMAccountName=$env:USERNAME)").FindOne()
    $ipPhone = $adUser.Properties['ipPhone'][0]

    Set-ItemProperty HKCU:\SOFTWARE\XYZ\PhoneClient -Name SomeValueName -Value $ipPhone
} catch {
    # Would you like to log any errors?
}

Open in new window

Note that I made up a property name under the registry key, you might want to fix that. The key is assumed to exist before the script runs. Is that reasonable?

Author

Commented:
Hi Chris, Yes the value exists.

Its called Endpoint
PowerShell Developer
Top Expert 2010
Commented:
My search filter is a bit broader than I thought. the snippet above is PowerShell (which you can use as a login script language, so it's not absurd).  

Updated the name, added Force to overwrite any existing value.
try {
    $adUser = ([ADSISearcher]"(sAMAccountName=$env:USERNAME)").FindOne()
    $ipPhone = $adUser.Properties['ipPhone'][0]

    Set-ItemProperty HKCU:\SOFTWARE\XYZ\PhoneClient -Name Endpoint -Value $ipPhone -Force
} catch {
    # Would you like to log any errors?
}

Open in new window

The VbScript version will work, it's more complex, but you don't need to add an LDAP path, AD system info is used to return information about the current user. ADSystemInfo is (a lot) harder to use in PowerShell, so the example above simply performs a small search against Active Directory.

Are you happy with PowerShell for this?
Ensure you’re charging the right price for your IT

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden using our free interactive tool and use it to determine the right price for your IT services. Start calculating Now!

Author

Commented:
Should i be able to save the below in to a notepad file, save as script.vbs and run it from the desktop of a windows 7 machine to test ?

try {
    $adUser = ([ADSISearcher]"(sAMAccountName=$env:USERNAME)").FindOne()
    $ipPhone = $adUser.Properties['ipPhone'][0]

    Set-ItemProperty HKCU:\SOFTWARE\XYZ\PhoneClient -Name Endpoint -Value $ipPhone
} catch {
    # Would you like to log any errors?
}
Chris DentPowerShell Developer
Top Expert 2010
Commented:
No, .ps1, as a PowerShell logon script. One tick, I'll give you the VbScript fix as well just in case. Then you can choose which to use.
Chris DentPowerShell Developer
Top Expert 2010

Commented:
VbScript version, untested.
Const HKEY_CURRENT_USER = &H80000001
Const REG_PATH = "SOFTWARE\XYZ\PhoneClient"

Dim objSysInfo : Set objSysInfo = CreateObject("ADSystemInfo")
Dim objUser : Set objUser = GetObject("LDAP://" & objSysInfo.UserName)

Dim strIPPhone : strIPPhone = objUser.Get('ipPhone')

Dim objReg : Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv")

objReg.SetStringValue HKEY_CURRENT_USER, REG_PATH, "Endpoint", strIPPhone

Open in new window

Author

Commented:
Just saved your last script (below) as .ps1 and ran from the desktop. It worked a treat. My IP Phone value is now in the registry under endpoint.

Thank you so much Chris.

try {
    $adUser = ([ADSISearcher]"(sAMAccountName=$env:USERNAME)").FindOne()
    $ipPhone = $adUser.Properties['ipPhone'][0]

    Set-ItemProperty HKCU:\SOFTWARE\XYZ\PhoneClient -Name Endpoint -Value $ipPhone -Force
} catch {
    # Would you like to log any errors?
}

Author

Commented:
Excellent help and support from Chris Dent. My issue was resolved in minutes.

Thank you so much Chris.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial