Powershell:如何查询pwdLastSet并使其有意义?


17

我需要获取Active Directory安全组中一组帐户的最新密码更改,我觉得这是PowerShell应该擅长的事情。

现在,我已经在如何从正在查看的AD帐户读取pwdLastSet属性上了。甚至运行像这样的简单的东西:

[adsi] "LDAP://cn=user1,ou=Staff,ou=User Accounts,dc=ramalamadingdong,dc=net" | Format-List *

给出pwdLastSet的结果,如下所示:

pwdLastSet            : {System.__ComObject}

我觉得我走错路了,那么什么是查询然后格式化pwdLastSet属性的输出(该值基于Windows Epoch而不是人类可读的)的最佳方式是什么?

Answers:


13

您也可以在没有管理单元的情况下执行此操作。我尝试了一下,它起作用了:

PS#> $ searcher =新对象DirectoryServices.DirectorySearcher
PS#> $ searcher.Filter =“(&(samaccountname = user1))”
PS#> $ results = $ searcher.findone()
PS#> [datetime] :: fromfiletime($ results.properties.pwdlastset [0])

2009年6月10日,星期三,下午4:32:08

如果我具有这样的用户对象集,我还将获得pwdLastSet的System .__ ComObject:
$ user = [adsi]“ LDAP:// cn = user1,ou = Staff,ou =用户帐户,dc = ramalamadingdong,dc = net ”

应该有一种方法可以使用[System .__ ComObject] .InvokeMember()和反射来从$ user对象获得该pwdLastSet值,但是我一直无法正确地做到这一点。我从来没有弄清楚,所以我使用了上面的示例并继续进行。

如果要使用AD(或Exchange或SQL Server)进行大量工作,则可能需要获取并使用该管理单元。


1
我一直努力在PowerShell中执行各种简单任务,以尝试学习语法。我有点沮丧,我到处都在寻找答案是使用外接程序。谢谢!
鲍勃

19

Windows 7 / Windows Server 2008 R2附带的内置AD命令集现在可以轻松完成此操作。在Windows 7上,从Powershell提示:

Import-Module ActiveDirectory
Get-ADUser 'user1' -properties PasswordLastSet | Format-List

“ PasswordLastSet”属性似乎是实际“ pwdLastSet”属性的翻译版本。


只是好奇什么意味着PasswordLastSet的任何值都不存在...是否100%表示自最初设置密码以来没有更改?
米哈伊尔(Mikhail)2013年

我没有可以对其进行测试的盒子,但我认为很可能尚未在该对象上设置密码。
Neobyte

@Mikhail,大多数情况下缺少PasswordLastSet的任何值表示您不要在提升的提示符下运行命令。
JPBlanc 2014年

3

有一种更简单的方法。

ADSI对象具有一个称为ConvertLargeIntegerToInt64的方法。请注意,它是ADSI对象的方法,而不是 System .__ Comobject 的方法,该方法是通过查询时间戳属性的值返回的,因此$ user.pwdLastSet.value.ConvertLargeIntegerToInt64()将不起作用。您需要按以下方式调用它:

$user.ConvertLargeIntegerToInt64($user.pwdLastSet.value)

如上面的Bratch所述,这将为您提供LDAP时间戳,该时间戳需要转换为可读的日期。这将适用于ADSI提供程序返回的任何时间戳属性值,并且(我相信)任何代表目录项的对象都可以使用ConvertLargeIntegerToInt64方法。

综上所述,这是如何获取上次设置密码的日期:

$user = [ADSI]'LDAP://cn=someusername,ou=someou,dc=somedomain,dc=com'
[datetime]::FromFileTime($user.ConvertLargeIntegerToInt64($user.pwdLastSet.value))

3

这是显示AD计算机的简单方法:

Get-ADComputer -Filter *  -Properties name,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp |
  FT Name,DNSHostName,LastLogonDate,PasswordLastSet,modified,modifyTimeStamp | 
    Out-File Computers.csv

1

安装:http : //www.quest.com/powershell/activeroles-server.aspx

打开PowerShell

运行以下命令:

add-PSSnapin quest.activeroles.admanagement

Get-QADUser | ft显示名称,PasswordLastSet

第一个命令将加载您刚刚下载的任务管理单元。如果您在开始菜单中使用快捷方式进行搜索,则无需执行此操作。第二个命令获取所有和用户以及密码上次更改时间的列表。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.