PowerShell: Convert Active Directory IADSLargeInteger to System.Int64

This PowerShell function will convert an IADSLargeInteger ComObject to a long/Int64 value. Extremely helpful when trying to work with Active Directory attributes like "pwdLastSet" or "lastLogonTimestamp".

function ConvertADSLargeInteger([object] $adsLargeInteger)
{
    $highPart = $adsLargeInteger.GetType().InvokeMember("HighPart", [System.Reflection.BindingFlags]::GetProperty, $null, $adsLargeInteger, $null)
    $lowPart  = $adsLargeInteger.GetType().InvokeMember("LowPart",  [System.Reflection.BindingFlags]::GetProperty, $null, $adsLargeInteger, $null)

    $bytes = [System.BitConverter]::GetBytes($highPart)     $tmp   = [System.Byte[]]@(0,0,0,0,0,0,0,0)     [System.Array]::Copy($bytes, 0, $tmp, 4, 4)     $highPart = [System.BitConverter]::ToInt64($tmp, 0)

    $bytes = [System.BitConverter]::GetBytes($lowPart)     $lowPart = [System.BitConverter]::ToUInt32($bytes, 0)       return $lowPart + $highPart }

No Comments