У меня есть скрипт, который получает время последнего входа в систему каждого компьютера в домене.

Мой сценарий:

$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)}}
}

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

Результат:

Компьютер Ластлогон
-------- ---------
DC1 06.06.2013 16:38:24
DC2 06.06.2013 16:30:40

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

Я также хочу узнать, кто / какая учетная запись сделала этот вход. Например:

Компьютер Lastlogon User
-------- ------------------ ----
DC1 06.06.2013 16:38:24 user2
DC2 06.06.2013 16:30:40 user1

2 ответа2

1

Этот может быть не идеальным, но он приведет вас на правильный путь. Чтобы получить точного последнего пользователя, пожалуйста, посмотрите этот скрипт. Это даст вам дополнительную информацию о том, как отфильтровать точного последнего пользователя. В приведенном ниже примере я использовал select-object -First 1, который должен быть довольно хорошим индикатором последнего зарегистрированного пользователя. Чтобы получить последнего зарегистрированного пользователя, вам нужно использовать

Get-WmiObject -Class Win32_UserProfile

Чтобы «объединить» информацию Get-ADComputer и Get-WMIObject, я использовал хэш-таблицу.

Если вы запускаете это из учетной записи администратора домена, вы можете убрать часть -credential $ credential. В противном случае оставьте его, и вы сможете запустить его с обычной рабочей станции с установленными инструментами RSAT, чтобы был доступен Get-ADComputer.

Код ниже:

$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)
}

Проверьте форматирование, когда вы его используете. Некоторые из них мне пришлось добавить в качестве символа escape (`), чтобы он поместился в окне скрипта.

Спасибо, Тим.

0

Это код Тима, и я обновил его, чтобы отобразить IP-адрес компьютера и операционную систему, а также экспортировать данные.

 $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"         
            }

Выражение свойств Powershell Get-ADComputer

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .