Для запроса информации о сеансе используйте QWinSta
или Query Session
.
Я предполагаю, что это сценарий cmd, который будет использоваться в качестве сценария входа в Windows. Если это так,% UserName% и% ComputerName% будут заполнены информацией уже для этих элементов.
Пример Query Session
для возврата информации о сеансе для текущего пользователя на сервере, на котором запущен скрипт:
Query Session %UserName%
Чтобы получить информацию о сеансе, которую вы хотите использовать в комбинированном выводе, мы хотим поместить команду в For
цикл.
Мы также будем использовать find
, чтобы игнорировать ненужные строки.
For %%_ IN ('
Query Session %UserName%
^| Find /I "%UserName%"
') DO (
Set "_SessionID=%%_"
)
Echo.Session = "%_SessionID%"
Сценарий входа в систему ниже выдаст большую часть того, что вы искали, сохранив его в CSV в каталоге, из которого запускается ваш скрипт входа (обычно netlogon - Примечание. если нет Netlogon, вам нужно убедиться, что пользователи домена будут иметь права на запись в этот каталог) это делается с помощью переменной %0
, которая содержит имя сценария, а путь ~dp
указывает только на использование полного пути, мы 'я буду создавать и записывать журналы в подкаталог журналов)
@(SetLocal EnableDelayedExpansion
Call :Get-DateTime
Set "_LogPath=%~0Logs"
IF Not Exist "!_LogPath!\" (
MD "!_LogPath!\" )
Set "_Log=!_LogPath!\RDPLogins_!_IsoDate!.log"
Set "Write-Output=CALL :Write-Output "
)
Call :Main
( Endlocal
Exit /b 0
)
:Main
For %%_ IN ('
Query Session %UserName%
^| Find /I "%UserName%"
') DO (
Set "_SessionID=%%_"
)
%Write-Output% LogOn,%username%,%_SessionID%,%_IsoDate%,%_IsoTime%,%#TMinutes%
Goto :EOF
:Write-Output
Echo(%*
Echo(%*>>"%_Log%"
GOTO :EOF
:Get-DateTime
FOR /F "Tokens=1-7 delims=MTWFSmtwfsouehrandit:-\/. " %%A IN (
"%DATE% %TIME: =0%"
) DO (
FOR /F "Tokens=2-4 Skip=1 Delims=(-)" %%a IN ('
ECHO.^| DATE
') DO (
SET "_%%~a=%%~A"
SET "_%%~b=%%~B"
SET "_%%~c=%%~C"
SET "_HH=%%~D"
SET "_Mn=%%~E"
SET "_SS=%%~F"
SET "_Ms=%%~G"
SET /a "#TMinutes=((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E))"
SET /a "#TSeconds=((((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E)))*60)+(1%%~F - (2%%~F-1%%~F))"
)
)
SET "_IsoTime=%_HH%.%_Mn%.%_SS%"
SET "_IsoDate=%_yy%-%_mm%-%_dd%"
SET "Get-DateTime=CALL :Get-DateTime"
GOTO :EOF