Microsoft Data Access Component (MDAC)
Support 64 bit OLEDB over ODBC
MSDASQL.dll is built and deployed on X64 and IA64 systems.
MSDASQL is installed as the default OLEDB provider for x86.
Who should use MDAC feature enhancements?
Customers interested in ADO/OLEDB app migration from x86 to x64 (classic ASP Web apps use ADO extensively).
Benefits of new features in MDAC
ADO/OLEDB app migration from x86 to x64 should now be simplified.
Earlier any connection string that did not explicitly specify an OLEDB provider (e.g. "Provider=SQLOLEDB") would fail to connect after upgrade to x64. The workaround was to have applications update all of their connection strings to use the appropriate OLEDB provider to keep application functionality. Many non-MS data sources do not have matching 64-bit OLEDB providers, so no workaround was possible for these cases (e.g. SyBase).
Scenario 1 – ADO application migration from x86 to x64
Validate that 32 bit ADO/OLEDB applications can be successfully migrated/behave correctly on x64 machine with x64 Windows Vista operating system.
User Profiles What’s New in User Profiles
This User Profile WMI provider replaces Moveuser.exe in Windows Vista. The new User Profile WMI provider can be used to map an existing local account profile to a new domain based account. It can also be used to map an existing domain-based account profile to a new domain-based account profile.
This WMI Provider has been previously available on the Microsoft Download Center and is now a part of Windows Vista Service Pack 1.
For more information please refer: http://support.microsoft.com/kb/930955
Details of the User Profile WMI Provider
The Win32_UserProfile is added under root\cimv2 namespace in WMI. It provides rich user profile information and methods to manage user profiles.
Win32_UserProfile
Properties:
SID : This property contains the SID of the user who owns this user profile.
LocalPath: This property contains the user profile's path on the local computer.
Loaded: This property indicates whether this profile is loaded.
RefCount: This property indicates the ref count of the profile. If the profile is loaded, the ref count is at least 1. Higher values indicate there more than one application or service has loaded the profile.
Special: This property indicates whether this profile belongs to a special system service.
RoamingConfigured: This property indicates whether the user has a roaming profile configured.
Note
If a user has a roaming profile configured, it does not mean that this profile is indeed roaming. There are other policies and user preference can prevent the profile from roaming. Please refer to the RoamingPreference and Status property.
RoamingPath: This property contains the user's roaming profile path if RoamingConfigured is true.
RoamingPreference: This property indicates whether the user would prefer to have their profile synchronize with the storage location. By default, the RoamingConfigured property is set to true allow the roaming profile to synchronize with the storage location. User can set this property to false to prevent roaming, which will cause the profile work like a local profile.
Status: May be one or more of the following:
0x00000001 - Indicates the profile is a temporary profile; it will be deleted at user logoff.
0x00000002 - Indicates the profile is now set to roaming, if this bit is not set, then it is set to local.
0x00000004 - Indicates the profile is a mandatory profile.
0x00000008 - Indicates the profile is a corrupted profile, and not in use, user or administrator must fix the corruption in order to use this profile again.
LastUseTime: This property indicates when this profile is used last time."
LastDownloadTime: This property indicates when a roaming profile was downloaded from server last time
LastUploadTime: This property indicates when a roaming profile was uploaded to server last time.
Method:
ChangeOwner: Change a user profile's owner to another user, the result value is HRESULT
The Win32_UserProfile class is defined in UserProfileWmiProvider.mof and UserProfileWmiProvider.mfl.
Who Should Use User Profile WMI Provider feature enhancements?
System Administrators can use this User Profile WMI provider to
Manage user profiles with a script.
Query user profiles status and information.
Change Roaming User Profile preference in some machines .
Change user profile owner ship (like moveuser.exe in XP).
Application Developers can use it to build applications for User Profile management.
Benefits of new features in User Profile WMI Provider
Query Win32_UserProfile objects to get User Profiles information by WMI
The Win32_UserProfile properties give very useful information to help IT professionals to remotely troubleshoot profile problems. For example, Administers can find all corrupted user profiles by checking the Status property with a WMI query.
Delete User Profile by script
With WMI, administrators can create a script to clean up the unused User Profile remotely.
Change User Profile ownership
Administrators can change a user profile ownership from one account to other account with a script. This is very useful when a group of users is moved from one domain to other domain.
Key Scenarios Scenario 1 – List all User Profiles in a remote machine: Goal of the scenario:
Get the User Profiles information from a remote machine.
Prerequisites or specific configuration for the scenario
Make sure the WMI in remote machine is enabled
The firewall for WMI on the remote machine must be open. (For more information, see http://msdn2.microsoft.com/en-us/library/aa822854.aspx.)
Step-by-step scenario description
1. Create several (local\domain) test users on the remote machine.
2. Logon several users on the remote machine, and then log them off.
3. Run the VB script below with administrator account in an elevated cmd prompt. You will need to specify the full remote machine name (i.e., replace in the script below).
strComputer = ""
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProfiles = objWMIService.ExecQuery("Select * from Win32_UserProfile")
For Each objProfile in colProfiles
Set objSID = objWMIService.Get("Win32_SID.SID='" & objProfile.SID & "'")
Wscript.Echo "================================================== " & VBNewLine _
& "Sid: " & objProfile.Sid & VBNewLine _
& "User Name: " & objSID.AccountName & VBNewLine _
& "User Domain: " & objSID.ReferencedDomainName & VBNewLine _
& "LocalPath: " & objProfile.LocalPath & VBNewLine _
& "Loaded: " & objProfile.Loaded & VBNewLine _
& "Special profile: " & objProfile.Special & VBNewLine _
& "RefCount: " & objProfile.RefCount & VBNewLine _
& "RoamingConfigured: " & objProfile.RoamingConfigured & VBNewLine _
& "RoamingPath: " & objProfile.RoamingPath & VBNewLine _
& "RoamingPreference: " & objProfile.RoamingPreference & VBNewLine _
& "Status: " & objProfile.Status & " " & StatusString(objProfile.Status) & VBNewLine _
& "LastUseTime: " & objProfile.LastUseTime & VBNewLine _
& "LastDownloadTime: " & objProfile.LastDownloadTime & VBNewLine _
& "LastUploadTime: " & objProfile.LastUploadTime & VBNewLine
Next
Function StatusString(status)
If (status = 0) Then
StatusString = "Normal"
End If
If (status AND 1) Then
StatusString = "Temporary"
End If
If (status AND 2) Then
StatusString = StatusString & " Roaming"
End If
If (status AND 4) Then
StatusString = StatusString & " Mandatory"
End If
If (status AND 8) Then
StatusString = StatusString & " Corrupted"
End If
End Function
Expected results
You should see a list of User Profiles in the remote machine.
Output sample:
==================================================
Sid: S-1-5-21-3804530314-1794463735-1854392452-500
User Name: Administrator
User Domain: OWA3-X86
LocalPath: C:\Users\Administrator
Loaded: False
Special profile: False
RefCount: 0
RoamingConfigured: False
RoamingPath:
RoamingPreference:
Status: 0 Normal
LastUseTime: 20070323085130.923000+000
LastDownloadTime:
LastUploadTime:
==================================================
Sid: S-1-5-21-3804530314-1794463735-1854392452-1001
User Name: TestUser1
User Domain: OWA3-X86
LocalPath: C:\Users\Jason
Loaded: False
Special profile: False
RefCount: 0
RoamingConfigured: False
RoamingPath:
RoamingPreference:
Status: 0 Normal
LastUseTime: 20070323172647.487000+000
LastDownloadTime:
LastUploadTime:
==================================================
Sid: S-1-5-21-1774824749-1455565658-4053419961-500
User Name: Administrator
User Domain: GTSRUPDC
LocalPath: C:\Users\administrator.GTSRUPDC
Loaded: True
Special profile: False
RefCount: 1
RoamingConfigured: False
RoamingPath:
RoamingPreference:
Status: 0 Normal
LastUseTime: 20070323210540.452000+000
LastDownloadTime:
LastUploadTime:
==================================================
Sid: S-1-5-21-1774824749-1455565658-4053419961-3800
User Name: TestRoamingUser1
User Domain: GTSRUPDC
LocalPath: C:\Users\TestRoamingJasO1
Loaded: False
Special profile: False
RefCount: 0
RoamingConfigured: True
RoamingPath: \\gtsrup\ariwa\TestRoamingJasO1.V2
RoamingPreference: True
Status: 2 Roaming
LastUseTime: 20070323182735.221000+000
LastDownloadTime: 20070323182720.971000+000
LastUploadTime: 20070323182737.471000+000
==================================================
Sid: S-1-5-20
User Name: NETWORK SERVICE
User Domain: NT AUTHORITY
LocalPath: C:\Windows\ServiceProfiles\NetworkService
Loaded: True
Special profile: True
RefCount:
RoamingConfigured: False
RoamingPath:
RoamingPreference:
Status: 0 Normal
LastUseTime: 20070323174459.426000+000
LastDownloadTime:
LastUploadTime:
==================================================
Sid: S-1-5-19
User Name: LOCAL SERVICE
User Domain: NT AUTHORITY
LocalPath: C:\Windows\ServiceProfiles\LocalService
Loaded: True
Special profile: True
RefCount:
RoamingConfigured: False
RoamingPath:
RoamingPreference:
Status: 0 Normal
LastUseTime: 20070323174504.707000+000
LastDownloadTime:
LastUploadTime:
==================================================
Sid: S-1-5-18
User Name: SYSTEM
User Domain: NT AUTHORITY
LocalPath: C:\Windows\system32\config\systemprofile
Loaded: True
Special profile: True
RefCount: 1
RoamingConfigured: False
RoamingPath:
RoamingPreference:
Status: 0 Normal
LastUseTime: 20070323032214.355000+000
LastDownloadTime:
LastUploadTime:
Scenario 2 – Delete a User Profile: Goal of the scenario:
Clean up the unused User Profiles.
Prerequisites or specific configuration for the scenario
Make sure the WMI in the machine is enabled.
Step-by-step scenario description
1. Create a test user (named TestUser1).
2. Logon TestUser1 and then logoff to the machine.
3. Locate the TestUser1’s User Profile that was created (you can find it under the Users folder, e.g., c:\Users).
4. Run the following VB script with an administrator account in an elevated command prompt and pass “TestUser1’s SID” to the script as an argument (see the Additional Information section at the end of this section to find out how to obtain the SID of a user) :
Set objUserProfile = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2:Win32_UserProfile.SID='" & WScript.Arguments(0) & "'")
WScript.Echo "Got user profile directory: " & objUserProfile.LocalPath & VBNewLine
objUserProfile.Delete_
WScript.Echo "Success!"
Expected results
The TestUser1’s profile should be removed. Please run the VB script in scenario 1 to verify. Since this scenario is local, you have to specify the local machine name where it says .
Output sample:
Got user profile directory: C:\Users\TestUser1
Success!
Scenario 3 - Change Roaming User Profile preference: Goal of the scenario:
Prevent Roaming User Profile to roam on and from a particular machine.
Prerequisites or specific configuration for the scenario
Setup a W2K3 domain server and two Windows Vista client machines (called C1 and C2) to join the domain.
Step-by-step scenario description
1. Create a domain user (named TestRoamingUser1) with Roaming User Profile enabled.
2. Logon TestRoamingUser1 to the client machine C1, and then logoff : his profile will get created up on the server.
3. Run the VB script below with an administrator account in an elevated cmd prompt on the client machine C1. Please pass the two following arguments “TestUser1’s SID” and “False” to the script (see the end of the document to know how to obtain the SID of a user) :
Set objUserProfile = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2:Win32_UserProfile.SID='" & WScript.Arguments(0) & "'")
WScript.Echo "Got user preference: " & objUserProfile.RoamingPreference & VBNewLine
If (WScript.Arguments(1) = "True") Then
WScript.Echo "Setting the preference to true" & VBNewLine
objUserProfile.RoamingPreference = true
Else
WScript.Echo "Setting the preference to false" & VBNewLine
objUserProfile.RoamingPreference = false
End If
'Flag 1 means update only
objUserProfile.Put_(1)WScript.Echo "Success!"
This script will remove the roaming attribute from TestRoamingUser1 on machine C1
To verify this change:
1. Logon TestRoamingUser1 on C2 and create a text file named “Hello.txt” on the TestRoamingUser1’s Desktop.
2. Logoff TestRoamingUser1 from the client machine C2 (that user’s changes will roam to the server).
3. Logon TestRoamingUser1 back to the client machine C1.
Expected results
You should not see the Hello.txt file on the TestRoamingUser1’s Desktop in the client machine C1, because TestRoamingUser1’s User Profile preference in the client machine C1 is set to false.
Output sample:
Got user preference: True
Setting the preference to false
Success!
Scenario 4 - Change User Profile Ownership: Goal of the scenario:
Transfer a User Profile from one user to another user.
Prerequisites or specific configuration for the scenario
Make sure the WMI in the machine is enabled.
Step-by-step scenario description
1. Create two test users (called TestUser1 and TestUser2) on a local machine.
2. Logon TestUser1 on the machine.
3. Create a text file named “Hello.txt” on the TestUser1’s Desktop.
4. Logoff TestUser1 from the client machine.
5. Run the following VB script with an administrator account in an elevated command prompt in the client machine C1. Please pass “TestUser1’s SID” and “TestUser2’s SID” and “1 as the Flag parameter” to the script as 3 arguments (see the Additional Information section at the end of this section to find out know how to obtain the SID of a user) :
Set objUserProfile = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2:Win32_UserProfile.SID='" & WScript.Arguments(0) & "'")
WScript.Echo "Change owner for user profile directory: " & objUserProfile.LocalPath & VBNewLine
returnCode = objUserProfile.ChangeOwner(WScript.Arguments(1), WScript.Arguments(2))
WScript.Echo "Success!"
This script will basically make TestUser2 the new owner of TestUser1’s profile.
To verify this change:
1. Logon TestUser2: you will see the “Hello.txt” file in TestUser2’s Desktop. This comes from the fact that TestUser1’s user profile has been transferred to TestUser2.
2. Logoff TestUser2 from the client machine.
3. Logon as TestUser1 on the client machine: you will see that a new User Profile is created for TestUser1.
Expected results
TestUser1’s user profile has been transferred to TestUser2.
Output sample:
Change owner for user profile directory: C:\Users\TestUser1
Success!
Additional Information – How to obtain a user’s SID
Here is a script that can be run to obtain a user’s SID:
Pass as the two following parameters to the script below: “domain name” and “user name”
Set objAccount = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2:Win32_UserAccount.Domain='" & WScript.Arguments(0) & "',Name='" & WScript.Arguments(1) & "'")
WScript.Echo "SID = " & objAccount.SID & VBNewLine
The return value will be the user’s SID
If the user is local, specify the “machine name” instead of the “domain name”.
|