Obtenha a última hora de logon, computador e nome de usuário em conjunto com o Powershell

0

Eu tenho um script que obtém os últimos tempos de logon de cada computador no domínio.

Meu script:

$dcs = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*' } -Properties OperatingSystem

foreach($dc in $dcs) { 
    Get-ADComputer $dc.Name -Properties lastlogontimestamp | 
    Select-Object @{n="Computer";e={$_.Name}}, @{Name="Lastlogon"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}
}

==================================

Resultado:

Computador Lastlogon
-------- ---------
DC1 6/06/2013 16:38:24
DC2 6/06/2013 16:30:40

=============================================

Eu também quero saber quem / qual conta fez esse logon. Por exemplo:

Usuário do Lastlogon de computador
-------- ------------------ ----
DC1 6/06/2013 16:38:24 user2
DC2 6/06/2013 16:30:40 user1

    
por Ruben.w 21.09.2017 / 14:56

2 respostas

1

Este pode não ser perfeito, mas vai colocá-lo no caminho certo. Para obter o último usuário exato, consulte este script . Ele fornecerá mais informações sobre como filtrar o último usuário exato. No exemplo abaixo, usei, select-object -Primeiro 1, que deve ser um bom indicador do último usuário logado. Para obter o último usuário logado, você precisa usar

Get-WmiObject -Class Win32_UserProfile

Para 'juntar' as informações Get-ADComputer e Get-WMIObject, usei uma tabela de hash.

Se você estiver executando isso a partir de uma conta de Administrador de domínio, poderá retirar a parte da credencial $ -credential. Caso contrário, deixe-o entrar e você pode executá-lo a partir de uma estação de trabalho normal com as ferramentas RSAT instaladas para que o Get-ADComputer esteja disponível.

Código abaixo:

$computers = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*' } -Properties OperatingSystem
$credential = Get-Credential -Message "Please enter your administrator username and password"

foreach($computer in $computers) { 
    $pcinfo = Get-ADComputer $computer.Name -Properties lastlogontimestamp | ' 
              Select-Object @{n="Computer";e={$_.Name}}, ' 
             @{Name="Lastlogon";Expression[DateTime]::FromFileTime($_.lastLogonTimestamp)}}

    $lastuserlogoninfo = Get-WmiObject -Class Win32_UserProfile -ComputerName $computer.name -Credential $credential | Select-Object -First 1
    $SecIdentifier = New-Object System.Security.Principal.SecurityIdentifier($lastuserlogoninfo.SID)
    $username = $SecIdentifier.Translate([System.Security.Principal.NTAccount])

    # Create hashtable for properties
    $properties = @{'Computer'=$pcinfo.Computer;
                    'LastLogon'=$pcinfo.Lastlogon;
                    'User'=$username.value
                   } #end $properties
    write-output (New-Object -Typename PSObject -Property $properties)
}

Verifique a formatação quando usá-lo. Algumas delas eu tive que adicionar um caractere de escape (') para encaixá-lo na janela de script.

Obrigado, Tim.

    
por 23.09.2017 / 12:57
0

Este é o Código de Tim e eu atualizei-o para exibir o endereço IP do computador & sistema operacional e exportar dados.

 $computers = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*'} -Properties OperatingSystem

 foreach($computer in $computers) { 
     $pcinfo = Get-ADComputer $computer.Name -Properties ipv4Address, OperatingSystem ,lastlogontimestamp | 
               Select-Object @{n="Computer";e={$_.Name}}, 
              @{Name="Lastlogon";Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},ipv4Address,OperatingSystem

     $lastuserlogoninfo = Get-WmiObject -Class Win32_UserProfile -ComputerName $computer.name -Credential $credential | Select-Object -First 1
     $SecIdentifier = New-Object System.Security.Principal.SecurityIdentifier($lastuserlogoninfo.SID)
     $username = $SecIdentifier.Translate([System.Security.Principal.NTAccount])

     # Create hashtable for properties
     $properties = @{'Computer'=$pcinfo.Computer;
                     'LastLogon'=$pcinfo.Lastlogon;
                     'ipv4Address'=$pcinfo.ipv4Address;
                    'OperatingSystem'=$pcinfo.OperatingSystem
                     'User'=$username.value
                    } #end $properties
     write-output (New-Object -Typename PSObject -Property $properties) |
     export-csv .\Computers.csv -append -notypeinformation -encoding "unicode"         
            }

Expressão das propriedades do Powershell Get-ADComputer

    
por 13.11.2017 / 14:32