Exporting/Importing 个来自 Active Directory 的日期
Exporting/Importing dates from Active Directory
用于从 Active Directory 中获取用户并输出 .csv
文件的简单导出脚本:
$ad_users = Get-ADUser -SearchBase $adPath -LDAPFilter $filter -Properties samAccountName, DisplayName, LastLogonDate, accountExpires |
export-csv -Path $exportPath -nti
对于帐户过期,用户有时会有0或9223372036854770000。我知道这两种情况都表示帐户设置为永不过期,但为什么会有不同?为什么两个不同的值代表同一个东西?
然后在上次登录日期的情况下,我得到一个实际日期字符串,如“10/12/2022 8:42:56 AM”。
为什么不一致?一个是日期字符串,另一个是时间戳(无论如何谁从 1600 开始以纳秒为单位存储时间)?
目前,我如何转换时间戳:
$account_expire = ([DateTime]$expires_timestamp).AddYears(1600).ToLocalTime()
• 根据您关于 “帐户到期” 和 “帐户到期日期” 属性的问题,其中 ' account expires' 可以在 AD powershell cmdlet 中调用,而 'account expiration date' 是 AD 中每个人的属性,可以在 ADSI 控制台中看到。在用户属性对话框的 “帐户” 选项卡上存储的关于用户帐户到期日期的数据存储在 'accountExpires' Active directory 中用户对象的属性,可以从 'adsiedit.msc' 界面访问和查看。虽然 'AccountExpirationDate' 属性 由 IADs 用户界面 公开,但它可用于显示和设置此日期。
• 因此,如果您比较“accountExpires”属性和“AccountExpirationDate”,值通常相差一天,有时甚至两天。用户对象的‘accountExpires’属性是数据类型‘Integer’。 整数值是 64 位(8 字节)数字,将日期表示为自 1601 年 1 月 1 日 12:00 AM 以来的 100 纳秒间隔(也称为滴答)数。一个 100 纳秒的间隔是 0.0000001 秒。这听起来应该是一个巨大的数字,这就是为什么它需要一个 64 位值。 12:00 2006 年 1 月 1 日上午,自 1601 年 1 月 1 日上午 12:00 以来计算出 127,805,472,000,000,000 100 纳秒间隔。
• “AccountExpirationDate”属性 方法是 NT 域的延续,如果 Active Directory 中的用户对象从未有过期日期,“accountExpires”属性将设置为一个巨大的数字。 实际值为‘2^63 – 1,即9,223,372,036,854,775,807’。这是因为 64 位数字的范围可以从‘-2^63 到 2^63 – 1’,这使得它成为可以保存为 64 位值的最大数字。显然,这代表了迄今为止无法解释的未来日期。事实上,如果“AccountExpirationDate”尝试读取此值,则会引发错误。 如果用户对象有到期日期,然后您通过在“帐户”选项卡上选择“从不”在 ADUC 中删除此日期,则 GUI 会将“accountExpires”设置为 0。因此,值 0 和 2 ^63 - 1 都是“从不”的意思。.
• 在 VBScript 中,您可以分配给“accountExpires”属性的唯一值是 0 和 -1。由于 64 位值的处理方式,-1 实际上是 2^63 - 1,即上面提到的巨大数字。值 0 对应于 date/time 12:00 1601 年 1 月 1 日上午。值 -1 对应于 30,828 年的 9 月 14 日。有关此属性的用法和概念的更多详细信息,请参阅下面的link:-
用于从 Active Directory 中获取用户并输出 .csv
文件的简单导出脚本:
$ad_users = Get-ADUser -SearchBase $adPath -LDAPFilter $filter -Properties samAccountName, DisplayName, LastLogonDate, accountExpires |
export-csv -Path $exportPath -nti
对于帐户过期,用户有时会有0或9223372036854770000。我知道这两种情况都表示帐户设置为永不过期,但为什么会有不同?为什么两个不同的值代表同一个东西?
然后在上次登录日期的情况下,我得到一个实际日期字符串,如“10/12/2022 8:42:56 AM”。
为什么不一致?一个是日期字符串,另一个是时间戳(无论如何谁从 1600 开始以纳秒为单位存储时间)?
目前,我如何转换时间戳:
$account_expire = ([DateTime]$expires_timestamp).AddYears(1600).ToLocalTime()
• 根据您关于 “帐户到期” 和 “帐户到期日期” 属性的问题,其中 ' account expires' 可以在 AD powershell cmdlet 中调用,而 'account expiration date' 是 AD 中每个人的属性,可以在 ADSI 控制台中看到。在用户属性对话框的 “帐户” 选项卡上存储的关于用户帐户到期日期的数据存储在 'accountExpires' Active directory 中用户对象的属性,可以从 'adsiedit.msc' 界面访问和查看。虽然 'AccountExpirationDate' 属性 由 IADs 用户界面 公开,但它可用于显示和设置此日期。
• 因此,如果您比较“accountExpires”属性和“AccountExpirationDate”,值通常相差一天,有时甚至两天。用户对象的‘accountExpires’属性是数据类型‘Integer’。 整数值是 64 位(8 字节)数字,将日期表示为自 1601 年 1 月 1 日 12:00 AM 以来的 100 纳秒间隔(也称为滴答)数。一个 100 纳秒的间隔是 0.0000001 秒。这听起来应该是一个巨大的数字,这就是为什么它需要一个 64 位值。 12:00 2006 年 1 月 1 日上午,自 1601 年 1 月 1 日上午 12:00 以来计算出 127,805,472,000,000,000 100 纳秒间隔。
• “AccountExpirationDate”属性 方法是 NT 域的延续,如果 Active Directory 中的用户对象从未有过期日期,“accountExpires”属性将设置为一个巨大的数字。 实际值为‘2^63 – 1,即9,223,372,036,854,775,807’。这是因为 64 位数字的范围可以从‘-2^63 到 2^63 – 1’,这使得它成为可以保存为 64 位值的最大数字。显然,这代表了迄今为止无法解释的未来日期。事实上,如果“AccountExpirationDate”尝试读取此值,则会引发错误。 如果用户对象有到期日期,然后您通过在“帐户”选项卡上选择“从不”在 ADUC 中删除此日期,则 GUI 会将“accountExpires”设置为 0。因此,值 0 和 2 ^63 - 1 都是“从不”的意思。.
• 在 VBScript 中,您可以分配给“accountExpires”属性的唯一值是 0 和 -1。由于 64 位值的处理方式,-1 实际上是 2^63 - 1,即上面提到的巨大数字。值 0 对应于 date/time 12:00 1601 年 1 月 1 日上午。值 -1 对应于 30,828 年的 9 月 14 日。有关此属性的用法和概念的更多详细信息,请参阅下面的link:-