Последний вход пользователя в пакетный файл с использованием пользователя net - PullRequest
0 голосов
/ 23 апреля 2020

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

net user administrator | findstr /B /C:"Last logon"

Результат выглядит следующим образом:

Last logon                   04/23/2020 9:02 AM

Я хотел бы отобразить только дату и время и удалить Last logon

Как мне этого добиться?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Вы можете дополнительно использовать WMI для этой задачи, которая должна предоставить вам строку даты и времени, которая является универсально разбираемой.

Если вы хотите указать c пользователя:

@Set "UsersName=Administrator"
@For /F Tokens^=2^,4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount^
 Where "Name='%UsersName%'" Assoc /AssocClass:Win32_NetworkLoginProfile 2^>NUL'
)Do @For /F %%I In ('%__AppDir__%wbem\WMIC.exe Path Win32_NetworkLoginProfile^
 Where "Name='%%G\\%%H' And LastLogon Is Not Null" Get LastLogon 2^>NUL^
 ^|%__AppDir__%findstr.exe "[0123456789]"')Do @Echo %%H last logon was %%~nI
@Pause

В качестве альтернативы, если вы хотите получить список пользователей:

@For /F Tokens^=2^,4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount^
 Assoc /AssocClass:Win32_NetworkLoginProfile 2^>NUL')Do @For /F %%I In (
    '%__AppDir__%wbem\WMIC.exe Path Win32_NetworkLoginProfile Where^
     "Name='%%G\\%%H' And LastLogon Is Not Null" Get LastLogon 2^>NUL^
     ^|%__AppDir__%findstr.exe "[0123456789]"')Do @Echo %%H last logon was %%~nI
@Pause

[Изменить /?]
На основании вопроса, который вы задали в комментарии к другому ответу, и потому что Я уже указывал, что мое решение (я) выше предоставляет универсально разбираемый формат даты и времени, вы можете дополнительно адаптировать его для вывода только часа.

Например:

@For /F Tokens^=2^,4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount^
 Assoc /AssocClass:Win32_NetworkLoginProfile 2^>NUL')Do @For /F %%I In (
    '%__AppDir__%wbem\WMIC.exe Path Win32_NetworkLoginProfile Where^
     "Name='%%G\\%%H' And LastLogon Is Not Null" Get LastLogon 2^>NUL^
     ^|%__AppDir__%findstr.exe "[0123456789]"')Do @(Set "YYYYmmDDHHMMSS=%%~nI"
     Call Echo(%%H last logged in during the hour of %%YYYYmmDDHHMMSS:~-6,2%%:00)
@Pause

Конечно, это не определяет, в какой день произошел этот вход, но ваше дополнительное требование было указано c!

0 голосов
/ 23 апреля 2020

Windows 10 64-бит. PowerShell 5

Как отобразить отметку времени последнего журнала для одной / всех учетных записей локальных пользователей, используя CMD или Powershell. Как отобразить имя пользователя и / или дату и / или время и / или час. Ни одна из команд не требует прав администратора.

PowerShell:

# How to display the lastlogon timestamp for one / all local user accounts.
# PowerShell 5. https://stackoverflow.com/a/61387391/8826818
# Interactive, searchable, gridview window. All accounts except default accounts named: DefaultAccount, Guest, WDAGUtilityAccount
get-localuser | where {$_.name -notmatch 'defaultaccount|guest|WDAGUtilityAccount'} | select-object lastlogon,name | out-gridview 
# All accounts except default accounts named: DefaultAccount, Guest, WDAGUtilityAccount  
get-localuser | where {$_.name -notmatch 'DefaultAccount|Guest|WDAGUtilityAccount'} | select-object lastlogon,name | format-table -hidetableheaders 
# All local accounts name, date and time. Remove name if not wanted.
$adsi = [ADSI]"WinNT://$env:COMPUTERNAME" 
$adsi.Children | where {$_.SchemaClassName -eq 'user'} | format-table lastlogin,name -HideTableHeaders 
# Account by name:
Get-LocalUser -Name Administrator,_9doug | Select-Object lastlogon,name | Format-Table -HideTableHeaders
# All accounts:
get-localuser | where {$_.name} | select-object lastlogon,name | format-table -hidetableheaders 

Интерактивное окно поиска с возможностью поиска в сетке:

screenshot of gridview window

Или:

Administrator 4/12/2020 7  :  32  :  09 PM
_7doug        11/18/2019 11  :  13  :  53 PM
_8doug        10/25/2019 4  :  47  :  09 PM
_9doug        4/23/2020 6  :  49  :  41 AM

CMD:

rem date and time
for /f "tokens=2,*" %g in ('net user administrator ^| findstr /C:"Last logon"') do echo %h
rem only the hour 
for /f "tokens=4" %g in ('net user administrator ^| findstr /C:"Last logon"') do echo Last logon hour was: %g

Сценарий:

rem date and time
for /f "tokens=2,*" %%g in ('net user administrator ^| findstr /C:"Last logon"') do echo %%h
rem only the hour 
for /f "tokens=4" %%g in ('net user administrator ^| findstr /C:"Last logon"') do echo Last logon hour was: %%g

Необычный вывод команды net user:

screenshot of net user output

Для

QUSER: Работает только для текущего пользователя.

CMD:

rem date and time
for /f "skip=1 tokens=6-8" %g in ('quser administrator') do echo %g %h %i
rem only the hour 
for /f "skip=1 tokens=7 delims=: " %g in ('quser administrator') do echo Last logon hour was: %g

Сценарий:

rem date and time
for /f "skip=1 tokens=6-8" %%g in ('quser administrator') do echo %%g %%h %%i
rem only the hour 
for /f "skip=1 tokens=7 delims=: " %%g in ('quser administrator') do echo Last logon hour was: %%g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...