Powershell命令,用于在下个月或30天内让用户使用密码过期?

时间:2016-12-29 14:28:19

标签: powershell active-directory

我最难从PowerShell获得以下输出。控制台只是在命令运行时停在闪烁的光标处,但是我等了20分钟左右,我仍然没有输出,无论是在powershell控制台中,还是在我尝试导出为csv时。我使用以下命令:

Search-ADAccount -AccountExpiring -DateTime "01/29/2017" | where {$_.ObjectClass -eq 'user'} | FT Name,ObjectClass -A | Export-Csv C:\temp

有人可以帮忙吗?我在互联网上搜索无济于事。

2 个答案:

答案 0 :(得分:1)

您正在使用format-table。如果您需要在该点之后处理数据,请不要使用任何 Format-* cmdlet - 格式化使其无法实现。始终保存最终格式,并仅用于用户演示。

此外,您最终会在名为C:\的{​​{1}}根目录中找到一个不完全可用作CSV文件的文件,至少来自Excel和其他读者,因为其他信息将由temp插入。这将由Export-CSV开关消除。

此外,您可以通过为-notypeinformation指定-UsersOnly开关并跳过Search-ADAccount循环来加快速度 - 管道非常有用,但这样的构造可能会降低速度。尽可能向左侧过滤数据,如果可以在提供过滤器的cmdlet中进行,请在那里进行。

更正了应该按预期工作的脚本:

where-object

答案 1 :(得分:0)

如果这不是完美的代码,请原谅我,但是此脚本会让您的帐户在接下来的7天内过期。您可以更改$ DaysAhead变量以更改时间范围。

 $maxPwdAge=(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days; 
 $daysAhead = 7;
 $dateMin=(get-date).AddDays(-$maxPwdAge);
 $dateMax=$DateMin.AddDays($daysAhead); 
 Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False -and PasswordLastSet -gt 0} –Properties * | where {($_.PasswordLastSet) -ge $dateMin} |where {($_.PasswordLastSet) -le $dateMax} | select CN,EmailAddress,passwordLastSet | Format-Table;