7

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

$a = (get-date).AddDays(7) ; 搜索-ADAAccount -AccountExpiring -TimeSpan "7" | 选择对象 SamAccountName,AccountExpirationDate | 排序对象 AccountExpirationDate | 导出-CSV 7_days.csv

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

$a = (get-date).AddDays(7) ; 搜索-ADAAccount -AccountExpiring -TimeSpan "7" | 选择对象 SamAccountName,AccountExpirationDate | 排序对象 AccountExpirationDate | Where-Object {$_.AccountExpirationDate -like $a } | 导出-CSV 7_days.csv

有人可以让我知道我做错了什么吗?我曾尝试移动 "Where-Object {$_.AccountExpirationDate -like $a } " 块,或 "-match" 而不是 "-like" ,但是这些并没有让我取得太大的成功。我哪里错了?

4

4 回答 4

10

更新:如果您传递一个字符串值,您可以获得帐户,传递一个整数将时间跨度初始化为 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 }
于 2012-04-20T16:43:26.950 回答
2

使用的属性是accountExpires自 1600 年以来以 100 纳秒的数据包表示

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
于 2012-04-20T16:46:22.827 回答
2

尝试以下 PowerShell 命令

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

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

于 2015-01-26T09:28:36.630 回答
2

虽然这是一个旧线程..让我添加一个快速说明和警告..

小心询问 7 天前的帐户。7 天 2 小时不是 7 天,因此与查询不匹配(可能是您的 CSV 为空的原因)。

因此,您将始终要说超过 7 天且少于 8 天(等)的帐户来捕获第 7 天内的所有内容。ETC...

此外,
[datetime](Get-ADuser user1 -Properties accountExpires).accountExpires
上面的代码给了我一个错误
,无法将值“9223372036854775807”转换为“System.DateTime”。错误:“刻度必须介于 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?论坛=ITCG

于 2014-05-28T16:28:11.873 回答