none
Имя пользователя который был на компьютере во время последнего входа в домейн RRS feed

  • Вопрос

  • Привет всем,

    есть скрипт

    Get-QADComputer -SearchRoot 'DOMAIN/OU' -IncludedProperties name,lastLogontimeStamp

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

    заранее благодарен


    nesher13

    20 декабря 2014 г. 9:40

Ответы

  • В общем-то старый способ.

    - добавьте выполнение скрипта во время входа пользователя на рабочии станции;

    - предварительно разрешите пользователям менять значение одного из неиспользуемых атрибутов компьютера или создайте свой, но разрешение пользователям его менять также необходимо;

    - добавьте в ваш скрипт этот атрибут.

    Скрипт на vbs, примерно, такой:

    On Error Resume Next
    Set adsinfo = CreateObject("adsysteminfo")
    Set oComp = GetObject("LDAP://" & adsinfo.ComputerName)
    Set oUser = GetObject("LDAP://" & adsinfo.UserName)
    oComp.put "mail", oUser.cn
    oComp.Setinfo




    • Изменено KeyBi 20 декабря 2014 г. 18:06
    • Помечено в качестве ответа KazunEditor 29 декабря 2014 г. 7:16
    20 декабря 2014 г. 18:02
  • Такой информации в AD нет, в данном примере LastLogontimeStamp - это для учетной записи компьютере, а не пользователя.

    Я знаю два варианта, кто подскажет еще, буду благодарен. Оба варианта имеют свои ограничения.

    1) Использовать реестр ( данный параметр отключается в GPO, и во многих средах отключен администратором):

    • Windows XP
        • Key: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon
        • Value(s): DefaultUserName
    • Windows 7
      • Key:
        HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
      • Value: LastLoggedOnUser

    PS #  Get-Item HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
    
    
        Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication
    
    
    Name                           Property
    ----                           --------
    LogonUI                        ShowTabletKeyboard   : 0
                                   LastLoggedOnProvider : {6F45DC1E-5384-457A-BC13-2CD81B0D28ED}
                                   LastLoggedOnSAMUser  : WINPC\Александр
                                   LastLoggedOnUser     : .\Александр
    
    
    PS #  (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI -Name LastLoggedOnSAMU
    ser).LastLoggedOnSAMUser
    
    WINPC\Александр


    2) Использовать eventlog и событие под номером 4624(для Vista и старше). Требуется убедиться, что включен аудит. Так же надо определиться, какой logon type требуется - https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4624

    Для фильтра возьмем 2,7,9:

    Get-WinEvent -FilterHashtable @{ID='4624';LogName="Security"} -MaxEvents 1 Message : An account was successfully logged on. Subject: Security ID: S-1-5-18 Account Name: WINPC$ Account Domain: WORKGROUP Logon ID: 0x3e7 Logon Type: 7 New Logon: Security ID: S-1-5-21-911943506-3822758996-3146309554-1000 Account Name: Александр Account Domain: WINPC Logon ID: 0xc229415 Logon GUID: {00000000-0000-0000-0000-000000000000} Process Information: Process ID: 0x208 Process Name: C:\Windows\System32\winlogon.exe Network Information: Workstation Name: WINPC Source Network Address: 127.0.0.1 Source Port: 0 Detailed Authentication Information: Logon Process: User32 Authentication Package: Negotiate Transited Services: - Package Name (NTLM only): - Key Length: 0 PS # Get-WinEvent -FilterHashtable @{ID='4624';LogName="Security"} -MaxEvents 1).Properties[5] .Value Александр

    Для фильтра по logon type:

    $filter = "*[System[EventID=4624] and EventData[Data[@Name='LogonType']=2 or Data[@Name='LogonType']=7 or Data[@Name='LogonType']=12]]"
    (Get-WinEvent -FilterXPath $filter -MaxEvents 1).Properties[5].Value

    Оба варианта поддерживает удаленное выполнение:

    1) Тут стоит учесть,что служба удаленный реестр отключенна по умолчанию с Vista и выше.

    $srv = "WINPC"
    $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"
    $type = [Microsoft.Win32.RegistryHive]::LocalMachine
    [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $srv).OpenSubKey($key).GetValue("LastLoggedOnSAMUser")

    2) -ComputerName PCNAme

    • Предложено в качестве ответа Vector BCOModerator 21 декабря 2014 г. 14:38
    • Помечено в качестве ответа KazunEditor 29 декабря 2014 г. 7:16
    20 декабря 2014 г. 14:41
    Отвечающий

Все ответы

  • Такой информации в AD нет, в данном примере LastLogontimeStamp - это для учетной записи компьютере, а не пользователя.

    Я знаю два варианта, кто подскажет еще, буду благодарен. Оба варианта имеют свои ограничения.

    1) Использовать реестр ( данный параметр отключается в GPO, и во многих средах отключен администратором):

    • Windows XP
        • Key: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon
        • Value(s): DefaultUserName
    • Windows 7
      • Key:
        HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
      • Value: LastLoggedOnUser

    PS #  Get-Item HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
    
    
        Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication
    
    
    Name                           Property
    ----                           --------
    LogonUI                        ShowTabletKeyboard   : 0
                                   LastLoggedOnProvider : {6F45DC1E-5384-457A-BC13-2CD81B0D28ED}
                                   LastLoggedOnSAMUser  : WINPC\Александр
                                   LastLoggedOnUser     : .\Александр
    
    
    PS #  (Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI -Name LastLoggedOnSAMU
    ser).LastLoggedOnSAMUser
    
    WINPC\Александр


    2) Использовать eventlog и событие под номером 4624(для Vista и старше). Требуется убедиться, что включен аудит. Так же надо определиться, какой logon type требуется - https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventID=4624

    Для фильтра возьмем 2,7,9:

    Get-WinEvent -FilterHashtable @{ID='4624';LogName="Security"} -MaxEvents 1 Message : An account was successfully logged on. Subject: Security ID: S-1-5-18 Account Name: WINPC$ Account Domain: WORKGROUP Logon ID: 0x3e7 Logon Type: 7 New Logon: Security ID: S-1-5-21-911943506-3822758996-3146309554-1000 Account Name: Александр Account Domain: WINPC Logon ID: 0xc229415 Logon GUID: {00000000-0000-0000-0000-000000000000} Process Information: Process ID: 0x208 Process Name: C:\Windows\System32\winlogon.exe Network Information: Workstation Name: WINPC Source Network Address: 127.0.0.1 Source Port: 0 Detailed Authentication Information: Logon Process: User32 Authentication Package: Negotiate Transited Services: - Package Name (NTLM only): - Key Length: 0 PS # Get-WinEvent -FilterHashtable @{ID='4624';LogName="Security"} -MaxEvents 1).Properties[5] .Value Александр

    Для фильтра по logon type:

    $filter = "*[System[EventID=4624] and EventData[Data[@Name='LogonType']=2 or Data[@Name='LogonType']=7 or Data[@Name='LogonType']=12]]"
    (Get-WinEvent -FilterXPath $filter -MaxEvents 1).Properties[5].Value

    Оба варианта поддерживает удаленное выполнение:

    1) Тут стоит учесть,что служба удаленный реестр отключенна по умолчанию с Vista и выше.

    $srv = "WINPC"
    $key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"
    $type = [Microsoft.Win32.RegistryHive]::LocalMachine
    [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type, $srv).OpenSubKey($key).GetValue("LastLoggedOnSAMUser")

    2) -ComputerName PCNAme

    • Предложено в качестве ответа Vector BCOModerator 21 декабря 2014 г. 14:38
    • Помечено в качестве ответа KazunEditor 29 декабря 2014 г. 7:16
    20 декабря 2014 г. 14:41
    Отвечающий
  • В общем-то старый способ.

    - добавьте выполнение скрипта во время входа пользователя на рабочии станции;

    - предварительно разрешите пользователям менять значение одного из неиспользуемых атрибутов компьютера или создайте свой, но разрешение пользователям его менять также необходимо;

    - добавьте в ваш скрипт этот атрибут.

    Скрипт на vbs, примерно, такой:

    On Error Resume Next
    Set adsinfo = CreateObject("adsysteminfo")
    Set oComp = GetObject("LDAP://" & adsinfo.ComputerName)
    Set oUser = GetObject("LDAP://" & adsinfo.UserName)
    oComp.put "mail", oUser.cn
    oComp.Setinfo




    • Изменено KeyBi 20 декабря 2014 г. 18:06
    • Помечено в качестве ответа KazunEditor 29 декабря 2014 г. 7:16
    20 декабря 2014 г. 18:02