Терминальный режим windows 10: Терминальный сервер на Windows 10

Содержание

Несколько одновременных RDP сессий пользователей в Windows 10 и 11

Удаленные пользователи могут подключаться к своим компьютерам Windows 10 или 11 через службу удаленных рабочих столов (RDP). Достаточно разрешить RDP доступ и подключиться к компьютеру с помощью любого клиента. Но есть ограничение на количество одновременных RDP сессии – допускается одновременная работа только одного удаленного пользователя. Если вы попробуете открыть вторую RDP сессию, появится предупреждение с запросом отключить сеанс первого пользователя.

В систему вошел другой пользователь. Если вы продолжите, он будет отключен. Вы все равно хотите войти в систему?

В английской версии предупреждение такое:

Another user is signed in. If you continue, they’ll be disconnected. Do you want to sign in anyway?

Во всех десктопных версиях Windows (включая Win 10 и 11) есть ряд ограничений на использование службы удаленного рабочего стола

  1. Вы можете удаленно подключаться по RDP только к старшим редакциям Windows (Professional, Enterprise). В домашних редакциях (Home/Single Language) RDP доступ заблокирован;
  2. Поддерживается только одно одновременное RDP подключение. При попытке запустить вторую RDP-сессию, пользователю будет предложено завершить активное подключение;
  3. Если пользователь работает за консолью компьютера (локально), то при удаленном подключении по RDP, его локальный сеанс будет отключен (заблокирован). Правильно и обратное утверждение: удаленный RDP сеанс принудительно завершается, если пользователь входит через консоль Windows.

Ограничение на количество одновременных RDP подключений в Windows является не техническим, но программным и лицензионным. Таким образом Microsoft запрещает создавать терминальный RDP сервер на базе рабочей станции для одновременной работы нескольких пользователей. Логика Microsoft проста: если вам нужен терминальный сервер — купите лицензию Windows Server, лицензии RDS CAL, установите и настройте роль Remote Desktop Session Host (RDSH).

Технически любая редакция Windows при наличии достаточного количества оперативной памяти может обслуживать одновременную работу нескольких десятков удаленных пользователей. В среднем на одну RDP сессию пользователя без учета запускаемых приложений требуется 150-200 Мб памяти. Т.е. максимальное количество одновременных RDP сессий в теории ограничивается только ресурсами компьютера.

Мы рассмотрим два способа убрать ограничение на количество одновременных RDP подключений к Windows 10 и 11: с помощью приложения RDP Wrapper и с помощью модификации системного файла termsrv.dll.

Содержание:

  • RDP Wrapper: разрешить несколько RDP сеансов в Windows
  • Не работает RDP Wrapper в Windows 10
  • Модификация файла termsrv.dll для снятия ограничений RDP в Windows 10 и 11
  • Патчинг файл termsrv.dll с помощью PowerShell скрипта

Примечание. Модификации системы, описанные в этой статье, считаются нарушением лицензионного соглашения Windows, и вы можете выполнять их на свой страх и риск.

RDP Wrapper: разрешить несколько RDP сеансов в Windows

OpenSource проект RDP Wrapper Library позволяет включить конкурентные RDP сессии в Windows 10 без замены системного файла termsrv. dll. Эта программа работает в качестве прослойки между менеджером управления службами (SCM — Service Control Manager) и службой терминалов (Remote Desktop Services). RDPWrap позволяет включить не только поддержку нескольких одновременных RDP сессии, но и реализовать RDP сервер на домашних редакциях Windows 10. RDP Wrapper не вносит никаких изменений в файл termsrv.dll, просто подгружая termsrv с изменёнными параметрами.

Таким образом, RDPWrap будет работать даже при обновлении версии файла termsrv.dll, что позволяет не опасаться обновлений Windows.

Важно. Перед установкой RDP Wrapper важно убедится, чтобы у вас использовалась оригинальная (непропатченная) версия файл termsrv.dll. Иначе RDP Wrapper может работать не стабильно, или вообще не запускаться.

Вы можете скачать RDP Wrapper из репозитория GitHub: https://github.com/binarymaster/rdpwrap/releases (последняя доступная версия RDP Wrapper Library v1.6.2). Утилита не развивается с 2017 года, но ее можно использовать на всех билдах Windows 10 и даже в Windows 11.

Архив RDPWrap-v1.6.2.zip содержит несколько файлов:

  • RDPWinst.exe —программа установки/удаления RDP Wrapper Library;
  • RDPConf.exe — утилита настройки RDP Wrapper;
  • RDPCheck.exe — Local RDP Checker — утилита для проверки RDP доступа;
  • install.bat, uninstall.bat, update.bat — пакетные файлы для установки, удаления и обновления RDP Wrapper.

Чтобы установить RDPWrap, запустите файл
install.bat
с правами администратора.

После окончания установки запустите RDPConfig.exe. Проверьте, что в секции Diagnostics все элементы окрашены в зеленый цвет.

После окончания установки запустите RDPConfig.exe. Скорее всего сразу после установки утилита покажет, что RDP wrapper запущен (Installed, Running, Listening), но не работает. Обратите внимание на красную надпись. Она сообщает, что данная версий Windows 10 (ver. 10.0.19041.1320) не поддерживается ([not supported]).

Дело в том, что под каждую версию Windows 10 должно быть описание в конфигурационном файле rdpwrap.ini. В вашем файле конфигурации просто нет настроек для вашего билда Windows 10.

Актуальную версию файла rdpwrap.ini можно скачать здесь https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini

Вручную скопируйте содержимое данной страницы в файл «C:\Program Files\RDP Wrapper\rdpwrap.ini». Или скачайте файл с помощью PowerShell командлета Invoke-WebRequest (предварительно нужно остановить службу Remote Desktop):

Stop-Service termservice -Force
Invoke-WebRequest https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini -outfile "C:\Program Files\RDP Wrapper\rdpwrap.ini"

Перезагрузите компьютер, запустите утилиту RDPConfig.exe. Проверьте, что в секции Diagnostics все элементы окрашены в зеленый цвет, и появилось сообщение [Fully supported]. На скриншоте ниже показано, что RDP Wrapper с данным конфигом прекрасно работает и в Windows 11.

Осталось перезагрузить компьютер. Попробуйте подключиться к своим компьютерам несколькими RDP сессиями (воспользуйтесь любым RDP клиентом: mstsc.exe, rdcman и т.д.). Все получилось (можно даже использовать сохранённые RDP пароли)! Теперь ваша Windows 10 позволяет одновременно подключаться по RDP сразу двум (и более) удаленным пользователям.

Утилита RDPWrap поддерживается во редакциях Windows, таким образом из любой клиентской версии Windows можно сделать сервер терминалов.

Также из интересных возможностей RDP Wrapper можно выделить:

  • Enable Remote Desktop — включить RDP доступ
  • Опция Hide users onlogon screen позволяет скрыть список пользователей на экране приветствия;
  • При отключении опции Single sessionper user — будут разрешены несколько одновременных RDP сессий под одной учетной записью (устанавливается параметр реестра fSingleSessionPerUser = 0 в ветке HKLM\SYSTEM\ CurrentControlSet\Control\Terminal Server\fSingleSessionPerUser).
  • RDP Port — можно изменить номера порта удаленного рабочего стола со стандартного TCP 3389 на любой другой;
  • В секции Session Shadowing Mode вы можете настроить режим теневого подключения к рабочему столу пользователей Windows 10.

Ограничения на длительность RDP сессий можно настроить через GPO.

Не работает RDP Wrapper в Windows 10

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

Если утилита в окне статуса показывала [not supported], значит в файле rdpwrap.ini отсутствует конфигурация для вашей версии Windows. Обновите файл rdpwrap.ini как описано выше.

Если RDP Wrapper не работает после обновления файла rdpwrap.ini, попробуйте открыть файл rdpwrap.ini и найти в нем описание для вашей версии Windows. Как понять, есть ли поддержка вашей версии Windows в конфиг фафле rdpwrapper?

На скриншоте ниже показано, что для моей версии Windows 10 (10. 0.19041.1320) есть две секции с описаниями:

[10.0.19041.1320]
…..
[10.0.19041.1320-SLInit]
…..

Если для вашей версии Windows нет секции в конфигурационном файле, попробуйте поискать в сети строки rdpwrap.ini для вашего билда. Добавьте найденные строки в самый конец файл.

Также при проблемах с RDPWrap вы можете открыть ветку в https://github.com/stascorp/rdpwrap/issues. Здесь же можно найти актуальные файлы rdpwrap.ini до момента обновления в официальном репозитории.

Если после установки обновлений безопасности или после апгрейда билда Windows 10, RDP Wrapper не работает, проверьте, возможно в секции Diagnostics присутствует надпись Listener state: Not listening.

Попробуйте обновить ini файл, и затем переустановить службу:

rdpwinst.exe -u
rdpwinst.exe -i

Бывает, что при попытке второго RDP подключения под другим пользователем у вас появляется надпись:

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

The number of connections to this computer is limited and all connections are in use right now. Try connecting later or contact your system administrator.

В этом случае нужно с помощью редактора групповых политики gpedit.msc в секции Конфигурация компьютера –> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Подключения включить политику “Ограничить количество подключений” и изменить ее значение на 999999 (Computer Configuration -> Administrative Templates -> Windows Components ->Remote Desktop Services ->Remote Desktop Session Host -> Connections-> Limit number of connections).

Перезагрузите компьютер для обновления GPO и применения настроек .

Модификация файла termsrv.dll для снятия ограничений RDP в Windows 10 и 11

Чтобы убрать ограничение на количество RDP подключений пользователей в Windows 10 без использования rdpwraper, можно заменить файл termsrv. dll. Это файл библиотеки, которая используется службой Remote Desktop Services. Файл находится в каталоге C:\Windows\System32.

Прежде, чем править или заменять файл termsrv.dll желательно создать его резервную копию. Это поможет вам в случае необходимости можно будет вернуться к исходной версии файла. Запустите командную строку с правами администратора и выполните команду:

copy c:\Windows\System32\termsrv.dll termsrv.dll_backup

Затем нужно стать владельцем файла. Проще всего это сделать из командной строки. Чтобы сменить владельца файла с TrustedInstaller на группу локальных администраторов с помощью команды:

takeown /F c:\Windows\System32\termsrv.dll /A

Должно появится сообщение: «SUCCESS: The file (or folder): «c:\Windows\System32\termsrv.dll» now owned by the administrators group».

Теперь с помощью icacls.exe предоставьте группе локальных администраторов полные права на файл termsrv.dll (Full Control):

icacls c:\Windows\System32\termsrv. dll /grant Administrators:F
(или
Администраторы
в русской версии Windows). Должно появится сообщение: «processed file: c:\Windows\System32\termsrv.dll Successfully processed 1 files; Failed processing 0 files«.

Теперь нужно остановить службу Remote Desktop Service (TermService) из консоли services.msc или из командной строки:

Net stop TermService

Вместе с ней останавливается служба Remote Desktop Services UserMode Port Redirector.

Прежде чем идти дальше, вам нужно узнать вашу версию (билд) Windows 10. Проще всего это сделать с помощью следующей команды PowerShell:

Get-ComputerInfo | select WindowsProductName, WindowsVersion

В моем случае установлена Windows 10 билд 21h2.

Затем откройте файл termsrv.dll с помощью любого HEX редактора (к примеру, Tiny Hexer). В зависимости от билда нужно найти и заменить строку:

Версия WindowsНайти строкуЗаменить на
Windows 11 RTM ( 21h3 22000. 258)39 81 3C 06 00 00 0F 84 4F 68 01 00 

 

 

 

B8 00 01 00 00 89 81 38 06 00 00 90

 

Windows 10 x64 21h339 81 3C 06 00 00 0F 84 DB 61 01 00
Windows 10 x64 21h239 81 3C 06 00 00 0F 84 2B 5F 01 00
Windows 10 x64 20h339 81 3C 06 00 00 0F 84 21 68 01 00
Windows 10 x64 200439 81 3C 06 00 00 0F 84 D9 51 01 00
Windows 10 x64 190939 81 3C 06 00 00 0F 84 5D 61 01 00
Windows 10 x64 190339 81 3C 06 00 00 0F 84 5D 61 01 00
Windows 10 x64 180939 81 3C 06 00 00 0F 84 3B 2B 01 00

 

Windows 10 x64 18038B 99 3C 06 00 00 8B B9 38 06 00 00

 

Windows 10 x64 170939 81 3C 06 00 00 0F 84 B1 7D 02 00

 

Редактор Tiny Hexer не может редактировать файл termsvr.dll напрямую из папки system32. Скопируйте его на рабочий стол, а после модификации замените исходный файл.

Например, для самой редакции Windows 10 x64 21h2 19043.1320 (версия файла termsrv.dll — 10.0.19041.1320) нужно открыть файл termsrv.dll в Tiny Hexer. Затем найдите строку:

39 81 3C 06 00 00 0F 84 2B 5F 01 00

И замените ее на:

B8 00 01 00 00 89 81 38 06 00 00 90

Сохраните файл и запустите службу TermService.
Если что-то пошло не так, и у вас возникнут проблемы со службой RDP, остановите службу и замените модифицированный файл termsrv.dll исходной версией:

copy termsrv.dll_backup c:\Windows\System32\termsrv.dll

Патчинг файл termsrv.dll с помощью PowerShell скрипта

Чтобы не редактировать файл termsrv.dll вручную с помощью HEX редактора, вы можете использовать следующий PowerShell скрипт для автоматического патчинга файла. Данный скрипт написан для версии Windows PowerShell, и не работает на PowerShell Core. Скрипт универсальный и может использоваться для внесения изменений в файл termsrv. dll на всех версиях Windows 10 и Windows 11.

# Остановить службу, сделать копию файл и изменить разрешения
Stop-Service UmRdpService -Force
Stop-Service TermService -Force
$termsrv_dll_acl = Get-Acl c:\windows\system32\termsrv.dll
Copy-Item c:\windows\system32\termsrv.dll c:\windows\system32\termsrv.dll.copy
takeown /f c:\windows\system32\termsrv.dll
$new_termsrv_dll_owner = (Get-Acl c:\windows\system32\termsrv.dll).owner
cmd /c "icacls c:\windows\system32\termsrv.dll /Grant $($new_termsrv_dll_owner):F /C"
# поиск шаблона в файле termsrv.dll
$dll_as_bytes = Get-Content c:\windows\system32\termsrv.dll -Raw -Encoding byte
$dll_as_text = $dll_as_bytes.forEach('ToString', 'X2') -join ' '
$patternregex = ([regex]'39 81 3C 06 00 00(\s\S\S){6}')
$patch = 'B8 00 01 00 00 89 81 38 06 00 00 90'
$checkPattern=Select-String -Pattern $patternregex -InputObject $dll_as_text
If ($checkPattern -ne $null) {
$dll_as_text_replaced = $dll_as_text -replace $patternregex, $patch
}
Elseif (Select-String -Pattern $patch -InputObject $dll_as_text) {
Write-Output 'The termsrv. ', '0x'
Set-Content c:\windows\system32\termsrv.dll.patched -Encoding Byte -Value $dll_as_bytes_replaced
# Сравним два файла
fc.exe /b c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll
# замена оригинального файла
Copy-Item c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll -Force
Set-Acl c:\windows\system32\termsrv.dll $termsrv_dll_acl
Start-Service UmRdpService
Start-Service TermService

Полный код скрипта доступен в моем GitHub репозитарии по ссылке https://github.com/winadm/posh/blob/master/Desktop/RDP_patch.ps1

Чтобы выполнить скрипт, скачайте его на свой компьютер. Измените настройки политики запуска скриптов PowerShell:

Set-ExecutionPolicy Bypass -Scope Process -Force

Запустите скрипт:

C:\users\root\desktop\rdp_patch.ps1

Скрипт можно запускать после установки обновлений Windows, чтобы немедленно внести изменения в файл termsrv. dll (защищает вас от ручной правки файла после каждой установки обновлений). Скрипт подходит для всех версий Windows 10 старше 1809 и для Windows 11.

Преимущество способа включения нескольких RDP сессий в Windows 10 путем замены файла termsrv.dll в том, что на него не реагируют антивирусы. В отличии от утилиты RDPWrap, которую многие антивирусов считают Malware/HackTool/Trojan. Основной недостаток — вам придется вручную править файл при каждом обновлении билда Windows 10 (или при обновлении версии файла termsrv.dll в рамках ежемесячных кумулятивных обновлений). А если вы используете RDPWrapper, то после установки обновлений Windows вам придётся обновлять файл rdpwrap.ini.

В этой статье вы рассмотрели, как снять ограничение на количество одновременных RDP подключений пользователей, и запустить бесплатный терминального сервера на клиентской Windows 10 или 11.

Invoke-WebRequest: Отправка HTTP запросов, загрузка файлов и обработка HTML веб-страниц в PowerShell

Командлет Invoke-WebRequest можно использовать для обращения к HTTP/HTTPS/FTP ресурсам прямо из консоли PowerShell. С помощью этой команды вы можете отправить HTTP запросы, скачивать файлы с любых веб-сайтов, парсить HTML веб-страницы, заполнять и отправлять веб-формы. В этой статье мы рассмотрим несколько базовых примеров использования командлета Invoke-WebRequest для работы с веб-сервисами.

Содержание:

  • Получить содержимое веб-страницы с помощью командлета Invoke-WebRequest
  • Использование Invoke-WebRequest с аутентификацией
  • Парсинг HTML страниц с помощью Powershell
  • Как скачать файл по HTTP с помощью PowerShell?
  • Заполнение и отправка веб-форм на Powershell
  • Invoke-WebRequest: игнорировать проверку SSL/TLS сертификатов

Получить содержимое веб-страницы с помощью командлета Invoke-WebRequest

Командлет Invoke-WebRequest доступен в Windows начиная с версии PowerShell 3.0. Командлет Invoke-WebRequest позволяет отправить HTTP запрос с методом GET к указанной веб странице и получить ответ от севера.

В Windows есть два алиаса для команды Invoke-WebRequest:
iwk
и
wget
.

Выполните следующую команду:

Invoke-WebRequest -Uri "https://winitpro.ru"

Совет. Если вы подключены к Интернет через прокси-сервер, нужно правильно настроить PowerShell для доступа через прокси-сервер.

Команда загрузила страницу и отобразила ее содержимое в консоли PowerShell. Возвращенный ответ представляет собой не просто HTML код страницы. Командлет Invoke-WebRequest возвращает объект типа HtmlWebResponseObject. Такой объект представляет собой набор коллекции форм, ссылок, изображений и других важных элементов HTML документа. Посмотрим все свойства данного объекта:

$WebResponseObj = Invoke-WebRequest -Uri "https://winitpro.ru"
$WebResponseObj| Get-Member

Чтобы получить сырой HTML код веб страницы, который содержится в данном объекте, выполните:

$WebResponseObj.content

Вы можете вывести HTML код страницы вместе с HTTP заголовками, которые вернул веб сервер:

$WebResponseObj. rawcontent

Можно получить только код ответа веб-сервера и HTTP заголовки HTML страницы:

$WebResponseObj.StatusCode

$WebResponseObj.Headers

Как вы видите, веб сервер вернул ответ 200, т.е. запрос выполнен успешно и веб сервер доступен и работает корректно.

Key                       Value
---                       -----
Transfer-Encoding         chunked
Connection                keep-alive
Vary                      Accept-Encoding,Cookie
Strict-Transport-Security max-age=31536000;
Cache-Control             max-age=3, must-revalidate
Content-Type              text/html; charset=UTF-8
Date                      Mon, 11 Jul 2022 08:18:05 GMT
Server                    nginx/1.20.2
X-Powered-By              PHP/5.6.40

Чтобы получить время последней модификации веб-страницы:

$WebResponseObj.ParsedHtml | Select lastModified

Вы можете указать строку User Agent при подключении к веб-ресурсу. В PowerShell есть набор встроенных строк User Agent:

invoke-webRequest -Uri $uri -userAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::Chrome)

Список доступных агентов можно вывести так:

[Microsoft.PowerShell.Commands.PSUserAgent].GetProperties() | Select-Object Name, @{n='UserAgent';e={ [Microsoft.PowerShell.Commands.PSUserAgent]::$($_.Name) }}

Либо вы можете задать собственную строку:

Invoke-WebRequest -Uri $uri -UserAgent 'MyApplication/1.1'

Использование Invoke-WebRequest с аутентификацией

Для доступа к некоторым веб ресурсам нужно выполнить аутентификацию. Вы можете использовать различные типы аутентификации совмести с командлетом Invoke-WebRequest (базовую, NTLM, Kerberos или аутентификацию по сертификату).

Для выполнения базовой аутентификации (Basic auth, аутентификация по имени и паролю зашифрованным в base64) сначала нужно получить имя пользователя и пароль:

$cred = Get-Credential
wget -Uri 'https://site. com' -Credential $cred

Для использования текущих учетных данных пользователя Windows для выполнения NTLM или Kerberos аутентификации, используйте параметр UseDefaultCredentials:

Invoke-WebRequest 'http://site.com' -UseDefaultCredentials

DefaultCredentials не работает с Basic аутентфикацией.

Для аутентификации по сертификату, нужно указать его отпечаток:

Invoke-WebRequest 'http://site.com' -CertificateThumbprint xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Вы можете использовать современную Bearer/OAuth аутентификацию с помощью токена в ваших PowerShell скриптах.

  • Сначала нужно получить токен OAuth у вашего провайдера REST API
  • Сконвертируйте токен с помощью ConvertTo-SecureString:
    $Token = "123123123123123123123123123123123" | ConvertTo-SecureString -AsPlainText –Force
  • Теперь вы можете выполнить OAuth аутентфикацию:
    $Params = @{
    Uri = "https://yoursite.com"
    Authentication = "Bearer"
    Token = $Token }
    Invoke-RestMethod @Params

Парсинг HTML страниц с помощью Powershell

Командлет Invoke-WebRequest позволяет довольно быстро и удобно парсить содержимое любых веб-страниц. При обработке HTML страницы из ее содержимого формируются коллекции ссылок (links), веб-форм (forms), изображений (images), скриптов (scripts) и т.д.

Рассмотрим, как обратиться к конкретным объектам на веб-странице. Например, мы хотим получить список всех исходящих ссылок (объекты HREF) на полученной веб-странице:

$SiteAdress = "http://winitpro.ru"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Links | Foreach {$_.href }

Чтобы получить и сам текст ссылки (содержится в элементе InnerText), можно воспользоваться такой конструкцией:

$HttpContent.Links | fl innerText, href

Можно выбрать только ссылки с определенным CSS классом:

$HttpContent.Links | Where-Object {$_.class -eq "page-numbers"} | fl innerText, href

Или определенным текстом в url:

$HttpContent.Links | Where-Object {$_.href -like "*exchange*"} | fl innerText,href

Теперь рассмотрим, как получить все изображения на данной странице:

$Img. Images

Сформируем коллекцию из полных url путей к используемым изображениям:

$images = $Img.Images | select src

Инициализируем новый экземпляр класса WebClient:

$wc = New-Object System.Net.WebClient

И скачаем все изображения со страницы (с оригинальными именами) в каталог c:\tools\:

$images | foreach { $wc.DownloadFile( $_.src, ("c:\tools\"+[io.path]::GetFileName($_.src) ) ) }

С помощью Invoke-WebRequest можно узнать внешний IP адреса компьютера из PowerShell через специальный веб-сервис.

Как скачать файл по HTTP с помощью PowerShell?

Invoke-WebRequest позволяет скачивать файлы с указанной веб-страницы или ftp сайта (работает как аналог Wget или cURL для Windows). Допустим, вы хотите скачать с HTTP сайта файл. Выполните такую команду PowerShell:

wget "https://download-installer.cdn.mozilla.net/pub/firefox/releases/102.0.1/win64/en-US/Firefox%20Setup%20102.0.1. exe" -outfile “c:\tools\firefox_setup.exe”

Этак команда скачает файл с HTTP сайта и поместит его в указанный каталог.

Так же вы можете скачать файлы с веб-сервера Windows при помощи BITS в синхронном режиме.

Вы можете получить размер файла в Мб перед его загрузкой:

$url = "https://download-installer.cdn.mozilla.net/pub/firefox/releases/102.0.1/win64/en-US/Firefox%20Setup%20102.0.1.exe"
(Invoke-WebRequest $url -Method Head).Headers.'Content-Length'/1Mb

Ниже приведен пример PowerShell скрипта, который найдет все ссылки на *.pdf файлы на веб странице и скачает все найденный файлы с сайта на ваш компьютер (каждый файл сохраняется под произвольным именем):

$OutDir="C:\Downloads\docs\PDF"
$SiteAdress = "https://www.site.ru/free-pdf-books/"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Links | Where-Object {$_.href -like "*.pdf"} | %{Invoke-WebRequest -Uri $_.href -OutFile ($OutDir + $(Get-Random 100000)+". pdf")}

В современных версиях PowerShell Core (6.1 и выше) команделт Invoke-WebRequest поддерживает режим докачки. Обновите вашу версию PowerShell Core и вы можете использовать опцию Resume в команде Invoke-WebRequest для автоматического возобновления загрузки файла при проблемах на канале или недоступности сервера.

Заполнение и отправка веб-форм на Powershell

Многие веб-сервисы для работы требуют ввода различных данных в HTML формы. С помощью Invoke-WebRequest можно получить доступ к любой HTML-форме, заполнить необходимые поля и передать заполненную форму обратно на сервер. В этом примере мы покажем, как с помощью Powershell авторизоваться в почтовом ящике популярного российского сервиса mail.ru через его стандартную веб форму.

С помощью следующей конструкции сохраним информацию о куках (Cookies) подключения в отдельной сессионной переменной:

$mailru = Invoke-WebRequest https://e.mail.ru/login -SessionVariable session

Следующей командой отобразим список заполняемых полей в HTML форме авторизации (форма называется LoginExternal):

$mailru. Forms["LoginExternal"].Fields

Присвоим нужные значения всем полям:

$mailru.Forms["LoginExternal"].Fields["Login"] = "[email protected]"

$mailru.Forms["LoginExternal"].Fields["Password"] = "Str0NgP$$w0rd"

И т.д….

Чтобы передать заполненную форму на веб сервер, вызовем атрибут HTML-формы action.

$Log = Invoke-WebRequest -method POST -URI ("https://e.mail.ru/login" + $mailru.Forms["LoginExternal"].Action) -Body $mailru.Forms["LoginExternal"].Fields -WebSession $session

Также вы можете использовать формат JSON для отправки данных на веб страницу через метод POST:

$headers = @{
'Content-Type'='application/json'
'apikey'='1234567890'
}
$jsonbody = @{
"siteUrl" ="https://site.com"
"email" = "[email protected]"
}
Invoke-WebRequest -Method 'Post' -Uri $url -Body ($jsonbody |ConvertTo-Json) -Headers $headers -ContentType "application/json"

Invoke-WebRequest: игнорировать проверку SSL/TLS сертификатов

Командлет Invoke-WebRequest тесно связан с Internet Explorer. Например, в редакциях Windows Server Core, в которых IE не установлен (или удален), командлет Invoke-WebRequest использовать нельзя.

Invoke-WebRequest : The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer’s first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again.

Вместо Invoke-WebRequest можно использовать класс WebClient:
(New-Object -TypeName 'System.Net.WebClient').DownloadFile($Url, $FileName)

Если на HTTP сайте используется некорректный SSL сертификат, или PowerShell не поддерживает этот тип протокола TLS, то командлет Invoke-WebRequest отказывается получать данные с него.

Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Invoke-WebRequest : Запрос был прерван: Не удалось создать защищенный канал SSL/TLS.
Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel. 

По умолчанию в Windows PowerShell (ранние билды Windows 10, Windows Server 2016 и более старые версии Windows) для подключения используется устаревший и небезопасный протокол TLS 1.0 (см. статью об ошибке установки PowerShell модуля: Install-Module: Unable to download from URI).

Если в Windows не отключены протоколы TLS 1.0 и TLS 1.1, нужно выполнить следующую команду, чтобы в текущей сессии PowerShell для подключения использовался протокол TLS 1.2:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Если вам нужно игнорировать самоподписанный сертификат SSL сертификат, используйте следующий PowerShell код:
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
$AllProtocols = [System. Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$result = Invoke-WebRequest -Uri "https://site.ru"

В версиях PowerShell Core у командлета Invoke-WebRequest доступен параметр –SkipCertificateCheck, который позволяет игнорировать некорректные сертификаты.

Еще один существенный недостаток командлета Invoke-WebRequest — довольно низкая скорость работы. HTTP поток при загрузке файла целиком буферизируется в память, и только после окончания полной загрузки сохраняется на диск. Таким образом, при загрузке больших файлов вы можете столкнутся с нехваткой памяти.

Установка терминала Windows | Microsoft Узнайте

Обратная связь

Редактировать

Твиттер

LinkedIn

Фейсбук

Эл. адрес

  • Статья
  • 3 минуты на чтение

Установить

Установить Windows Terminal

Чтобы попробовать последние функции предварительного просмотра, вы также можете установить Windows Terminal Preview.

Примечание

Если у вас нет доступа к Microsoft Store, сборки публикуются на странице выпусков GitHub . Если вы устанавливаете с GitHub, Windows Terminal не будет автоматически обновляться новыми версиями. Дополнительные параметры установки с помощью диспетчера пакетов (winget, Chocolatey, Scoop) см. в репозитории Windows Terminal .

Установите приложение терминала по умолчанию

Важно

Эта функция доступна только в Windows 11.

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

  1. Откройте Терминал Windows и перейдите к Настройки Окно пользовательского интерфейса.
  2. Выберите Запуск и выберите «Терминал Windows» в качестве параметра Терминальное приложение по умолчанию .

Установка профиля терминала по умолчанию

После установки, когда вы открываете Windows Terminal, он запускается с командной строкой PowerShell в качестве профиля по умолчанию на открытой вкладке.

Чтобы изменить профиль по умолчанию:

  1. Откройте Windows Terminal и перейдите в окно Settings UI.
  2. Выберите Запуск и выберите профиль по умолчанию , который вы предпочитаете.

Вы также можете установить свой профиль по умолчанию в файле Settings. json, связанном с Windows Terminal, если хотите.

Добавить новые профили

Терминал Windows автоматически создаст для вас профили, если у вас установлены дистрибутивы WSL или несколько версий PowerShell.

Ваши профили командной строки будут перечислены в пользовательском интерфейсе настроек в дополнение к опции + Добавить новые профили .

Узнайте больше о динамических профилях на странице Динамические профили.

Открыть новую вкладку

Вы можете открыть новую вкладку профиля по умолчанию, нажав Ctrl + Shift + T или нажав кнопку + (плюс). Чтобы открыть другой профиль, выберите ˅ (стрелку) рядом с кнопкой +, чтобы открыть раскрывающееся меню. Оттуда вы можете выбрать, какой профиль открыть.

Вызвать палитру команд

Вы можете вызвать большинство функций терминала Windows через палитру команд. Комбинация клавиш по умолчанию для его вызова: Ctrl + Shift + P . Вы также можете открыть его с помощью кнопки Палитра команд в раскрывающемся меню в Windows Terminal Preview.

Открыть новую панель

Вы можете запускать несколько оболочек одновременно, используя панели. Чтобы открыть панель, вы можете использовать Alt + Shift + + для вертикального окна или Alt + Shift + - для горизонтального. Вы также можете использовать Alt + Shift + D , чтобы открыть дублирующую панель вашего целевого профиля. Узнайте больше о панелях на странице Панели.

Конфигурация

Чтобы настроить параметры терминала Windows, выберите Настройки в раскрывающемся меню. Это откроет пользовательский интерфейс настроек для настройки ваших параметров. Вы можете узнать, как открыть пользовательский интерфейс настроек с помощью сочетаний клавиш, на странице «Действия».

Файл настроек JSON

Если вы предпочитаете настраивать параметры терминала Windows с помощью кода, а не графического пользовательского интерфейса, вы можете отредактировать файл settings. json.

Выберите Settings в раскрывающемся меню Windows Terminal, удерживая Shift , чтобы открыть файл settings.json в текстовом редакторе по умолчанию. (Текстовый редактор по умолчанию определяется в настройках Windows.)

Путь к файлу settings.json терминала Windows можно найти в одном из следующих каталогов:

  • Терминал (стабильный/общий выпуск): %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
  • Терминал (предварительная версия): %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\LocalState\settings.json
  • Терминал

  • (без упаковки: Scoop, Chocolately и т. д.): %LOCALAPPDATA%\Microsoft\Windows Terminal\settings.json

Совет

  1. Вы можете получить доступ к настройкам по умолчанию для Windows Terminal, выбрав Настройки в раскрывающемся меню, удерживая Alt , чтобы открыть файл defaults. json в текстовом редакторе по умолчанию. Этот файл создается автоматически, и любые изменения в нем будут игнорироваться.
  2. Можно создать расширение фрагмента JSON для хранения данных профиля и цветовых схем в отдельном файле, что может быть полезно для предотвращения чрезмерно больших файлов конфигурации.

Аргументы командной строки

Вы можете запустить терминал в определенной конфигурации, используя аргументы командной строки. Эти аргументы позволяют открывать терминал с определенными вкладками и панелями с пользовательскими настройками профиля. Узнайте больше об аргументах командной строки на странице Аргументы командной строки.

Устранение неполадок

Если у вас возникнут какие-либо трудности при использовании терминала, обратитесь к странице Устранение неполадок. Если вы обнаружите какие-либо ошибки или у вас есть запрос на функцию, вы можете выбрать ссылку обратной связи в меню About терминала, чтобы перейти на страницу GitHub, где вы можете создать новую проблему.

Обратная связь

Отправить и просмотреть отзыв для

Этот продукт

Эта страница

Просмотреть все отзывы о странице

Часто задаваемые вопросы по терминалу Windows

| Microsoft Узнайте

Обратная связь

Редактировать

Твиттер

LinkedIn

Фейсбук

Эл. адрес

Найдите ответы на некоторые из наиболее часто задаваемых вопросов о Windows Terminal.

Чтобы запустить Терминал Windows с повышенными правами администратора (режим администратора), щелкните правой кнопкой мыши значок Терминала Windows, затем еще раз на отображаемом заголовке Терминала Windows, затем выберите «Запуск от имени администратора».

Кроме того, вы можете открыть меню быстрого доступа Windows, используя ярлык ⊞ Клавиша Windows + X, а затем выбрав Терминал Windows (Администратор).

Нет, смешивание оболочек с вкладками на уровне администратора с теми, у которых нет повышенных прав администратора, не поддерживается из соображений безопасности.

Нет, Visual Studio Code — это xtermjs, написанный на TypeScript, а Windows Terminal — собственный код.

Терминал Windows будет поддерживать любую командную строку или оболочку, которые есть на вашем компьютере, в том числе те, которые включены в Windows, такие как PowerShell или командная строка Windows (cmd.exe), а также любой дистрибутив Linux, который можно установить с помощью WSL, Azure Cloud Shell, Git Bash и т. д. Терминал автоматически обнаружит, когда вы установили дистрибутив Linux с WSL, и создаст для вас профиль. Он также может сохранять ваши учетные данные Azure, чтобы вы могли быстро войти в Azure Cloud Shell.

Терминал Windows — это, по сути, хост, который позволяет вам запускать несколько приложений или оболочек командной строки параллельно в настраиваемой среде с использованием вкладок или оконных панелей. Примеры приложений-оболочек включают cmd.exe (традиционная командная строка Windows), powershell или zsh . Это текстовые приложения, которые предоставляют потоки символов и не заботятся о том, как они отображаются для пользователя. Их также иногда называют «клиентскими приложениями командной строки». С другой стороны, «терминальные» приложения, такие как Windows Terminal, gnome-terminal, xterm, iterm2 или Hyper, — это все графические приложения, которые можно использовать для визуализации вывода клиентов командной строки, настраивая такие параметры, как шрифт, размер текста. , цвета и т.д. В Windows, если запустить cmd.exe , операционная система создаст экземпляр conhost.exe в качестве «терминала» для отображения клиента командной строки cmd.exe . То же самое происходит и с PowerShell: система создает новое окно conhost для любого клиента, еще не подключенного к какому-либо терминалу. Любой терминал может запускать любое клиентское приложение командной строки, поэтому Windows Terminal может запускать любую оболочку, которую вы предпочитаете, например Bash, используя подсистему Windows для Linux (WSL).

В вашем файле settings.json вы можете создавать или изменять профили, которые запускают любой исполняемый файл командной строки. В файле settings.json установите для «командной строки» все, что хотите. Например, powershell —> «pwsh.exe».
Вы также можете добавить профиль с помощью пользовательского интерфейса настроек терминала, прокрутив список профилей до конца и выбрав «+ Добавить новый профиль».

Чтобы выйти из режима фокусировки, который скрывает вкладки и строку заголовка в терминале Windows, откройте палитру команд терминала (Ctrl+Shift+P), найдите «переключить режим фокусировки», затем нажмите Enter.

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

Windows Terminal — это общедоступная стабильная версия, которая получает регулярные обновления, протестированные и отлаженные в предварительной версии. Рекомендуемый способ установки — через Microsoft Store, который будет предоставлять автоматические обновления при каждом их выпуске.
Windows Terminal Preview — это выпуск для тех, кто заинтересован в опробовании новейших функций, поскольку они разрабатываются, проверяются на наличие ошибок и становятся достаточно стабильными, чтобы их можно было добавить в основной выпуск терминала. Функции этого выпуска задокументированы с тегом (Preview).

Хотя мы рекомендуем устанавливать Windows Terminal с помощью Microsoft Store, вы также можете выполнить установку с помощью диспетчера пакетов Windows, GitHub, Chocolatey или Scoop.

Да. Сначала вам нужно перейти в раздел «Профили» вашего файла settings.json. Используя свойство «командная строка»: , вы можете указать любой пакетный файл, команду, соединение ssh или исполняемый файл, который вы хотите запустить в качестве профиля в терминале Windows. Вам просто нужно ввести путь к файлу, который вы хотите запустить.

В этом примере показан пример профиля терминала, настроенного на основе «демонстрационного» пакетного файла.

 {
"командная строка": "%USERPROFILE%/OneDrive/demo. bat",
"name": "Пакетный профиль"
}
 

Это также можно сделать в пользовательском интерфейсе настроек. Выберите «+ Добавить новый профиль» > «+ Новый пустой профиль». Перейдите в начальный каталог, в котором находится ваш командный файл (или SSH-соединение, исполняемый файл, командный файл и т. д.). Дайте профилю имя и сохраните.

В Windows Terminal было внесено множество различных вкладов, включая исправления ошибок, выявление и обсуждение проблем, вклад в эту документацию, но некоторые из наших любимых функций, появившихся благодаря вкладам сообщества, включают поддержку фоновых изображений и GIF-файлов, ретро эффекты и раскраска вкладок, и это лишь некоторые из них. Узнайте больше о том, как внести свой вклад.

Хост консоли Windows, conhost.exe, представляет собой оригинальный пользовательский интерфейс командной строки Windows. Он также содержит инфраструктуру командной строки Windows и сервер API консоли Windows, механизм ввода, механизм рендеринга, пользовательские настройки и т. д. Основная цель консоли Windows — поддерживать обратную совместимость, поэтому добавление новых функций стало запретительным и привело к созданию Терминала Windows. Узнайте больше в репозитории Windows Terminal с открытым исходным кодом и в документах консоли WIndows.

Да! Начиная с Windows Terminal Preview v1.12.2922.0, теперь вы можете сохранять макеты оконных панелей при закрытии сеанса терминала с глобальным параметром firstWindowPreference.

Терминал Windows находится в стадии активной разработки. Вы можете просмотреть планы команды в документе «Дорожная карта терминала 2.0» в репозитории терминала с открытым исходным кодом. Новые функции сначала попадают в Windows Terminal Preview, а затем, как правило, через месяц после того, как они были в Preview, эти функции перемещаются в Windows Terminal.

Вы можете отправлять запросы функций или идеи, а также отчеты об ошибках, уязвимости безопасности или проблемы с документацией, заполнив сообщение о проблеме в репозитории терминала.

Читайте также: