Powershell Active Directory获取过期用户

xesrikrc  于 2023-02-08  发布在  Shell
关注(0)|答案(1)|浏览(194)

这是我第一次上堆栈溢出,所以请发发慈悲:)
我试图创建一个Powershell图形用户界面做一个搜索请求,我们的活动目录,显示我所有过期和即将过期的用户帐户。
我的请求(Get-ADUser)中出现语法错误...
Error Message in Powershell ISE

$ShowExpiring.Add_Click({
     $ADUserSearch.Visible = $False
     $CheckDisabled.Visible = $False
     $ShowExpiring.Visible = $False
     $Back.Visible = $True
     $Results.Visible = $True
     $Results.Clear()
     $Results.ScrollBars = "Vertical"
 Import-Module ActiveDirectory
     $CurrentDate = Get-Date
     $ExpiringPasswords = Get-ADUser -Filter '((PasswordExpired -eq $True) -or (PasswordLastSet -le ((get-date).AddDays(-((get-addefaultdomainpolicy).MaxPasswordAge.Days)))))' -Properties Name,PasswordLastSet
 if($ExpiringPasswords) {
         $ExpiringPasswords = $ExpiringPasswords | sort PasswordLastSet
 foreach ($User in $ExpiringPasswords) {
 if ($User.PasswordLastSet -lt (Get-Date).AddDays(-((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days))) {
                 $Results.SelectionColor = "Red"
 else {
                 $Results.SelectionColor = "Orange"
             }
             $Results.AppendText("Username: $($User.Name)  Expiration Date: $($User.PasswordLastSet)`n")
         }
 else {
    $Results.AppendText("No passwords expiring or already expired.")
     }
 })

我也尝试了这个代码,它给我没有错误消息,但也没有结果,从禁用用户:

$ShowExpiring.Add_Click({
     $ADUserSearch.Visible = $False
     $CheckDisabled.Visible = $False
     $ShowExpiring.Visible = $False
     $Back.Visible = $True
     $Results.Visible = $True
     $Results.Clear()
     $Results.ScrollBars = "Vertical"
 Import-Module ActiveDirectory
     $CurrentDate = Get-Date
     $ExpiringPasswords = (Search-ADAccount -AccountExpired -UsersOnly | select Name, @{n='ExpirationDate';e={[datetime]::FromFileTime($_.AccountExpirationDate)}}) + (Search-ADAccount -AccountExpiring -TimeSpan (New-TimeSpan -Days 10) -UsersOnly | select Name, @{n='ExpirationDate';e={[datetime]::FromFileTime($_.AccountExpirationDate)}})
 if($ExpiringPasswords) {
         $ExpiringPasswords = $ExpiringPasswords | sort ExpirationDate
 foreach ($User in $ExpiringPasswords) {
 if ($User.ExpirationDate -lt $CurrentDate) {
                 $Results.SelectionColor = "Red"
 else {
                 $Results.SelectionColor = "Orange"
             }
             $Results.AppendText("Username: $($User.Name)  Expiration Date: $($User.ExpirationDate)`n")
         }
 else {
         $Results.AppendText("No passwords expiring or already expired.")
     }
 })

谢谢你帮我。

brccelvz

brccelvz1#

语法错误的原因可能是您尝试使用

Get-ADDefaultDomainPolicy

...它不存在。您要查找的是

Get-ADDefaultDomainPasswordPolicy

下面是一些代码,您应该在第一个示例中的适当位置进行替换。我将代码/过滤器分解了一些,以使代码/过滤器更容易理解,但如果您愿意,可以重新组合它们。

$MaxPasswordAgeDays = $(Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
$OldestAcceptablePasswordLastSetDate = $(Get-Date).AddDays(-$MaxPasswordAgeDays)
$ExpiringPasswords = Get-ADUser -Filter {PasswordExpired -eq $True -or PasswordLastSet -le $OldestAcceptablePasswordLastSetDate} -Properties Name,PasswordLastSet

我建议使用**{ }而不是单引号' '**,这样Powershell编辑器就可以帮助您进行智能感知和语法突出显示,而不是在示例中使用单引号。除此之外,如果您遇到语法错误,我建议尝试像上面所做的那样将其分解,以帮助您了解代码的哪一部分(在本例中,您的筛选器)失败。我很快发现您这样做是在尝试使用一个不存在的cmdlet。

相关问题