Another other way to do this is to link AD to a SQL server. You can then query AD for the pwdLastSet. This value is stored as a large integer that represents the number of 100 nanosecond intervals since January 1, 1601 (UTC) (which is not very helpful - but it's easy to convert).
So I query AD and then run the pwdLastset through a Scalar funtion to resolve the large integer into a date (code below). If you have a poilicy which requires your users to change their passwords every 90 days, you can run a stored procedure against the user account to get the number of days left to password reset.
This has worked in our environment for the last 5 years, and it's proved to be extremely accurate.
The SP below will get all user's whose password will expire in X days (you tell it how long). This can easily be modified to look at a specific user insted of all users.
rob
----------------------- StoredProcedure to get all users with expire password in X days -----------------
USE [Your_Database_Name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_GetPasswordExpireXDays]
@days int
AS
SELECT
samAccountName
,datediff(dd,getdate()-90,dbo.utc2date(pwdLastSet)) AS 'PWD Expires in:'
,dbo.utc2date(pwdLastSet) as 'Passwd Set:'
,sn
,givenName
,mail
,DistinguishedName
,UserAccountControl
FROM
OpenQuery(ADSI_GAL,'
SELECT
sAMAccountName
,pwdLastSet
,sn
,givenName
,mail
,DistinguishedName
,UserAccountControl
FROM ''LDAP://<DomainControllerFQDN>/DC=<Your>,DC=<AD Domain>,DC=<HERE>''
where objectCategory = ''Person'' AND objectClass = ''User'' ')
where UserAccountControl in (512, 534, 1049088, 590336)
and mail is not null
AND datediff(dd,getdate()-90,dbo.utc2date(pwdLastSet)) = @days
--------------------- UTC2date Scalar Function -------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[UTC2date] (@numSeconds BIGINT)
RETURNS DATETIME
AS BEGIN
DECLARE @date AS DATETIME
SET @numSeconds = @numSeconds / 10000000 - 11644473600
IF @numSeconds < 0
OR @numSeconds > 2147483647
BEGIN
SET @numSeconds = 0
END
RETURN DATEADD(ss, @numSeconds, '01-01-1970 00:00:00')
END