Сценарий Powershell для проверки последнего входа пользователя в Active Directory - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь написать скрипт powershell, который принимает имя пользователя в качестве аргумента и отображает время последнего входа пользователя в систему.Если пользователь ранее не входил в систему, должно отображаться сообщение has not logged in before.

Например, если вы запускаете .\lastlogon -username marywong, отображается сообщение:

последний вход в систему marywongвремя 13/07/2017

Если вы запускаете .\lastlogon -username guest, я получаю сообщение:

Гость не входил в систему до

Ниже приведен мой код, однако, похоже, что он не зацикливается на цикле else, если пользователь ранее не входил в систему.

param (
    [string]$username
)

$user = Get-ADUser -Filter {sAMAccountName -eq $username} | Get-ADObject -Properties lastLogon

$lastlogontime = $user.lastlogon

If ($user -ne $Null) {
    if($user.LastLogon -gt $time) {
        $displaylastlogon = [datetime]::FromFileTime($lastlogontime)
        Write-Host  $username " last logon time" $displaylastlogon 
    }
    else {
        $displaylastlogon = [datetime]::FromFileTime($lastlogontime)
        Write-Host  $username " has not logged in before"
    }
}
else {
    Write-Host  $username " does not exist"
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Информация об использовании Get-ADUser и Get-ADObject может быть получена отдельно.Если пользователь никогда не входил в систему, он все еще является существующим пользователем.Это отличается от пользователя, который не существует.

[CmdletBinding()]
Param (
    [Parameter(Mandatory = $true, Position = 0)]
    [string]$username
)

$user = Get-ADUser -Filter {SamAccountName -eq $username}
if ($user -ne $null) {
    $userlogon = $user | Get-ADObject -Properties lastLogon
    if ($userlogon.LastLogon -ne $null) {
        $lastlogontime = [DateTime]::FromFileTime($userlogon.LastLogon)
        Write-Host  $username " last logon time" $lastlogontime
    } else {
        Write-Host  $username " has not logged in before"
    }
} else {
    Write-Host  $username " does not exist"
}
0 голосов
/ 24 сентября 2018

Когда вы используете lastLogon, вы получаете формат, который использует AD ... тогда, когда работает if, вы получаете

Could not compare "131820853335016078" to "09/24/2018 18:18:57". Error: "Cannot convert value "9/24/2018 6:18:57 PM" to type "System.Int64". Error: "Invalid cast from 'DateTime' to 'Int64'.""

, так что он не доходит до остального ..

попробуйте использовать свойство LastLogonDate, это поможет вам больше.

попробуйте использовать это:

$user = Get-ADUser -Filter {sAMAccountName -eq $username} -Properties LastLogonDate

$lastlogontime = $user.lastlogonDate

Редактировать:

у вас есть еще некоторые проблемы с вашим кодом:

  1. Вам необходимо удалить displaylastlogon

  2. , вы не можете использовать -gt, потому что он всегда будет ложным. Пользователь не может войти в будущем.вам нужно использовать -lt

вот полный сценарий, работающий:

$user = Get-ADUser -Filter {sAMAccountName -eq $username} -Properties LastLogonDate

$lastlogontime = $user.lastlogonDate

If ($user -ne $Null) {

if($lastlogontime -lt $time)
    {
          Write-Host  $username " last logon time" $lastlogontime 
    }

    else

    {
          Write-Host  $username " has not logged in before"
    }
}

else

    {
      Write-Host  $username " does not exist"
    }

еще один Edit:

Я просто заметил, что егоне отвечает на случай, когда пользователь никогда не будет входить в систему, потому что вы получите $ null, а $ null ниже текущего времени.поэтому вам нужно убедиться, что lastlogontime не равно нулю

измените if на это:

if($lastlogontime -ne $null -and $lastlogontime -lt $time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...