Как получить Windows SE RDP & CONSOLE с использованием сценариев? - PullRequest
0 голосов
/ 01 октября 2019

Я пытался создать скрипт для записи имени пользователя ПК / СЕРВЕРА, выхода из системы, продолжительности входа в систему, имени пользователя, имени сеанса, даты, времени. Я застрял в имени сеанса, потому что он неправильно отображает результат.

Это команда в скрипте bat, которая точно такая же, когда я набираю вручную в cmd:

echo %SESSIONNAME%
pause

ЕслиЯ использую файл bat, он показывает неправильный результат:

W:\IT Tools>echo
ECHO is on.

W:\IT Tools>pause
Press any key to continue . . . _

Используя cmd, он может показать правильный результат:

C:\Users\Administrator>echo %SESSIONNAME%
RDP-Tcp#39

C:\Users\Administrator>_

1 Ответ

0 голосов
/ 01 октября 2019

Для запроса информации о сеансе используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...