Powershell发现用户将在7天后到期

时间:2012-04-20 13:34:47

标签: powershell active-directory pattern-matching user-accounts

我正在尝试运行一个PowerShell脚本来查询在7天内到期的帐户,我目前有

  

$ a =(get-date).AddDays(7); Search-ADAccount -AccountExpiring   -TimeSpan“7”| Select-Object SamAccountName,AccountExpirationDate | Sort-Object AccountExpirationDate | Export-Csv 7_days.csv

然而,当我做出以下更改时,似乎有些麻烦,我最终得到一个空的CSV文件。最终,我希望帐户在7天内到期,而不是更多,而不是更少。

  

$ a =(get-date).AddDays(7); Search-ADAccount -AccountExpiring   -TimeSpan“7”| Select-Object SamAccountName,AccountExpirationDate | Sort-Object AccountExpirationDate |位置对象   {$ _。AccountExpirationDate -like $ a} | Export-Csv 7_days.csv

有人能让我知道我做错了什么吗?我试过移动“Where-Object {$ _。AccountExpirationDate -like $ a}”一块,或者“-match”而不是“-like”,但是这些并没有给我带来太多成功。我在哪里错了?

4 个答案:

答案 0 :(得分:9)

更新:如果传递字符串值,您可以获取帐户,传递整数将时间跨度初始化为7个刻度!

Search-ADAccount -AccountExpiring -TimeSpan "7"

其他有效选项:

Search-ADAccount -AccountExpiring -TimeSpan (New-TimeSpan -Days 7)
Search-ADAccount -AccountExpiring -TimeSpan ([TimeSpan]::FromDays(7))

可能是一个错误,它对我也不起作用。这是一个解决方法:

$NeverExpires = 9223372036854775807
$ExpringIn = (Get-Date).AddDays(7) 

Get-ADUser -Filter * -Properties accountExpires | 
Where-Object {$_.accountExpires -ne $NeverExpires  -and [datetime]::FromFileTime([int64]::Parse($_.accountExpires)) -lt $ExpringIn }

答案 1 :(得分:2)

使用的属性是accountExpires,并且自1600年以来在100纳秒的pacquet中表达

PS C:\Windows\system32> Get-ADuser user1 -Properties accountExpires


accountExpires    : 129821976000000000
DistinguishedName : CN=user1 users,OU=OUTest,DC=dom,DC=fr
Enabled           : True
GivenName         : user1
Name              : user1 users
ObjectClass       : user
ObjectGUID        : b1bef798-8e36-45ff-ad11-e79f89769efc
SamAccountName    : user1
SID               : S-1-5-21-3115856885-816991240-3296679909-1146
Surname           : Users
UserPrincipalName : user1@dom.fr

你可以像这样将它转换为[dateTime]:

PS> [datetime](Get-ADuser user1 -Properties accountExpires).accountExpires

mardi 22 mai 0412 22:00:00

答案 2 :(得分:2)

尝试以下PowerShell命令

Search-ADAccount -AccountExpiring -TimeSpan 6.00:00:00 | FT Name,ObjectClass -A

https://technet.microsoft.com/en-us/library/ee617247.aspx

答案 3 :(得分:1)

虽然这是一个老话题..让我添加一个快速的注释和谨慎的话......

要求提供7天的帐户。 7天2小时不会是7天,因此与查询不符(可能是您的CSV为空的原因)。

因此,您将始终想要说出超过7天的帐户,而不是8(等)来记录第7天内的所有帐户。等...

此外,上面的代码
  [datetime](Get-ADuser user1 -Properties accountExpires).accountExpires
给我一个错误 无法将值“9223372036854775807”转换为“System.DateTime”。错误:“Ticks必须介于DateTime.MinValue.Ticks和DateTime.MaxValue.Ticks之间。 参数名称:刻度“

您还可以查看http://social.technet.microsoft.com/Forums/scriptcenter/en-US/b70113b1-a043-4543-afa0-dbba5757d035/powershell-windows-2008-getaduser-accountexpirationdate-returns-wrong-result?forum=ITCG