Windows powershell подключение к удаленному рабочему столу

How do I start an RDP session from powershell? I’m looking to avoid a custom script because I work at an MSP and end up remoting into machines across various domains in a day and so maintaining a selection of scripts across each is not trivial (unless you have a solution to that for me).

asked Jun 30, 2014 at 15:05

Josiah's user avatar

Same as in command line, you can launch the RDP client as so:

mstsc /v:10.10.10.10:3389

answered Jun 30, 2014 at 15:15

Raf's user avatar

RafRaf

9,7311 gold badge30 silver badges42 bronze badges

1

From your desktop, you can start an RDP session pointing to a remote system with this:

Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$machinename"

Where $machinename is the name of the remote system. You will be prompted for credentials.

answered Jun 30, 2014 at 15:15

alroc's user avatar

alrocalroc

27.6k6 gold badges51 silver badges97 bronze badges

2

Here it is in function format. As alorc said. Paste this into your $profile

    function Start-RDP ($computername)
{
    Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$computername"
}

answered Sep 7, 2016 at 15:24

Parthet's user avatar

ParthetParthet

611 silver badge1 bronze badge

Connection settings are stored in .rdp files. There is no need to specify a computer name and list other settings in the code.
Connect Hyper-V with settings from .rdp file:

$hyperv = Get-VM -Name "VM-Name"
if($hyperv.State -eq "Running") {
    Write-Host "Hyper-V is Running."
    Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "$env:userprofile\Documents\RDP-Name.rdp"
} else {
    Write-Host "Hyper-V is Stopped."
    Start-VM -Name "VM-Name"
    Start-Sleep -Seconds 6
    Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "$env:userprofile\Documents\RDP-Name.rdp"
}

Well, for the beauty of this whole process, create a .vbs file in the same folder that calls your .ps1 file in invisible mode.

Set objShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.GetFile(Wscript.ScriptFullName)
path = FSO.GetParentFolderName(F)
objShell.Run(CHR(34) & "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "" -ExecutionPolicy Bypass & ""'"  & path & "\Ps1File.ps1'" & CHR(34)), 0, True

answered Nov 20, 2019 at 19:18

Garric's user avatar

GarricGarric

6204 silver badges10 bronze badges

1

at the console prompt type:

mstsc /v:SERVERNAME

answered Jun 30, 2014 at 15:16

EBGreen's user avatar

EBGreenEBGreen

36.8k12 gold badges65 silver badges85 bronze badges

В Powershell есть несколько методов удаленного подключения. Это через:

  • WMI
  • CIM
  • PS remoting/WinRM

Сегодня мы поговорим о PS remoting/WinRM. В его состав входит, в основном, два командлета — это:

Enter-PSSession -ComputerName CL1

Этот командлет устанавливает сессию c удаленным компьютером и мы сможем работать прям на нем. Если сравнивать с Linux, то это почти одно и то же:

ssh CL1

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

Invoke-Command -ComputerName AD,CL1 -ScriptBlock {Get-ComputerInfo}

Где:
-ComputerName — имена компьютеров (или одного)
-Scriptblock — скрипт или командлет в скобках {}

Если опять же сравнить с Linux ssh, то это почти одно и то же:

ssh root@192.168.1.1 'ifconfig'

Как настроить удаленное управление через Powershell?

Для того что бы суметь настроить нужно понять как это работает. Команды выше могут работать по протоколу HTTP (по порту 5985) и HTTPS (5986), за исключением версии Powershell 1.0, который работал в XP (там порт 80/443). По умолчанию у нас стоит HTTP, но и эти данные шифруются используя симметричный ключ AES-256. Сама аутентификация работает в 2 режимах NTLM и Kerberos(по умолчанию стоит он). Если у вас сеть с домен контроллером, т.е. есть Kerberos, то у вас должны работать команды выше. Если компьютеры в Workgroup, то они используют NTLM и для этого нужна дополнительная настройка. Кроме того, если вы вместо имен используете IP, то вы в любом случае используете NTLM и это по умолчанию не работает.

Если у вас не работают команды выше нужно проверить запущен ли сервис WinRM на том компьютере, к которому мы хотим подключиться:

Get-Service -Name "*WinRM*" | fl

Если не запушен:

Enable-PSRemoting

В этом случае мы ставим запуск сервиса автоматически и настраиваем winrm в дефолтной конфигурации. Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.

Если вы работаете под профилем сети «Public» (не «Domain» или «Private»), то нужно выполнить еще один командлет, разрешающий работать в таких сетях:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any

Если мы выполним такую команду:

Invoke-Command -ComputerName 192.168.3.100 -ScriptBlock {Get-Command}

Получим ошибку:
Connecting to remote server 192.168.3.100 failed with the following error message : The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided.

Которая говорит, что мы можем подключится по IP если используем HTTPS (для этого нужен сертификат) или добавить хост, к которому подключаемся в TrustedHost компьютера с которого хотим запустить команду. Для этого делаем:

Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.3.134

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

$cred = Get-Credential
Invoke-Command -ComputerName 192.168.3.134 -ScriptBlock {Get-ComputerInfo} -Credential $cred

Где:
$cred — это переменная, куда мы сохраняем данные с формы Get-Credential
-Credential — сюда мы передаем переменную

Так же отмечу, что все команды, которые мы запускаем для удаленного выполнения через Poweshell, должны происходить от члена группы Администратора того хоста, к которому мы подключаемся.

Теперь мы можем устанавливать множество сессий с помощью командлета:

New-PSSession -ComputerName 192.168.3.134 -Credential $cred

Получать ID этих сессий:

Get-PSSession

И подключаться по этим ID:

Enter-PSSession -Id 9

Или использовать с invoke существующую сессию, а командлет для удаленного компьютера запускать с файла:

$cred = Get-Credential
$s = New-PSSession -ComputerName 192.168.3.134 -Credential $cred
Invoke-Command -Session $s -FilePath c:\scripts\test.ps1

А так же, т.к. WinRM настроен, выполнять командлеты где есть ключ -ComputerName, сразу на нескольких компьютерах. Этот командлет пропингует AD сразу с нескольких компьютеров:

Test-Connection -Source CL1,CL2 -ComputerName AD -Credential $cred

Или же использовать методы описанные выше. 

Дополнительные ключи мы можем узнать по командлетам:

Get-Help Enter-PSSession -Examples
Get-Command -Noun PSSession

или по powershell invoke

Get-Help Invoke-Command -Examples

Теги:

#powershell

How do I start an RDP session from powershell? I’m looking to avoid a custom script because I work at an MSP and end up remoting into machines across various domains in a day and so maintaining a selection of scripts across each is not trivial (unless you have a solution to that for me).

asked Jun 30, 2014 at 15:05

Josiah's user avatar

Same as in command line, you can launch the RDP client as so:

mstsc /v:10.10.10.10:3389

answered Jun 30, 2014 at 15:15

Raf's user avatar

RafRaf

9,7311 gold badge30 silver badges42 bronze badges

1

From your desktop, you can start an RDP session pointing to a remote system with this:

Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$machinename"

Where $machinename is the name of the remote system. You will be prompted for credentials.

answered Jun 30, 2014 at 15:15

alroc's user avatar

alrocalroc

27.6k6 gold badges51 silver badges97 bronze badges

2

Here it is in function format. As alorc said. Paste this into your $profile

    function Start-RDP ($computername)
{
    Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$computername"
}

answered Sep 7, 2016 at 15:24

Parthet's user avatar

ParthetParthet

611 silver badge1 bronze badge

Connection settings are stored in .rdp files. There is no need to specify a computer name and list other settings in the code.
Connect Hyper-V with settings from .rdp file:

$hyperv = Get-VM -Name "VM-Name"
if($hyperv.State -eq "Running") {
    Write-Host "Hyper-V is Running."
    Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "$env:userprofile\Documents\RDP-Name.rdp"
} else {
    Write-Host "Hyper-V is Stopped."
    Start-VM -Name "VM-Name"
    Start-Sleep -Seconds 6
    Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "$env:userprofile\Documents\RDP-Name.rdp"
}

Well, for the beauty of this whole process, create a .vbs file in the same folder that calls your .ps1 file in invisible mode.

Set objShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.GetFile(Wscript.ScriptFullName)
path = FSO.GetParentFolderName(F)
objShell.Run(CHR(34) & "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "" -ExecutionPolicy Bypass & ""'"  & path & "\Ps1File.ps1'" & CHR(34)), 0, True

answered Nov 20, 2019 at 19:18

Garric's user avatar

GarricGarric

6204 silver badges10 bronze badges

1

at the console prompt type:

mstsc /v:SERVERNAME

answered Jun 30, 2014 at 15:16

EBGreen's user avatar

EBGreenEBGreen

36.8k12 gold badges65 silver badges85 bronze badges

Командлет Enter-PSSession позволяет создать постоянную интерактивную PowerShell сессию с удаленным компьютером. Все команды, которые вы вводите в вашей командной строке, выполняются на удаленном компьютере. В этой статье мы рассмотрим основные возможности и особенности использования командлета Enter-PSSession для удаленного управления компьютерами с Windows 10 и Windows Server 2019/2016.

Командлет Enter-PSSession работает на базе стека PowerShell Remoting. PSRemoting основан на Web Services for Management (WS-Management). Для связи используется служба WinRM (Windows Remote Management). Трафик между компьютерами шифруется на уровне протокола (можно использовать SSL шифрование). Для аутентификации можно использовать различные методы, в том числе NTLM и Kerberos.

Для подключения в самом простом случае нужно указать только имя компьютера (параметр ComputerName). Чтобы подключиться к удаленному компьютеру, достаточно выполнить команду:

Enter-PSSession hq-srv01.contoso.com

Enter-PSSession интерактивная сессия с удаленным компьютером

Если у текущего пользователя есть полномочия на подключение к удаленному серверу, вы подключитесь к удаленному компьютеру.

Можно перед подключением запросить учетные записи пользователя:

Enter-PsSession –ComputerName hq-srv01.contoso.com –Credentials contoso\kbuldogov

Или так:

$creds = Get-Credential
Enter-PSSession -ComputerName hq-srv01 -Credential $creds

Обратите внимание, что в начале командной строки PowerShell теперь в квадратных скобках указывается имя удаленного компьютера (
[hq-srv01.contoso.com]
). Это позволяет понять, работаете ли вы в локальной сессии или в удаленной.

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

В этой интерактивной командной строке вы можете выполнять любые команды (в соответствии со своими полномочиями).

Например, выведем настройки сети:

Get-NetIPConfiguration

Можно изменить настройки DNS на удаленном компьютере:

Set-DNSClientServerAddress –InterfaceIndex 6 –ServerAddresses 192.168.13.4, 192.168.100.4

управление удаленным компьютером через консоль PowerShell

Чтобы завершить интерактивную сессию удаленного управления, нужно выполнить команду Exit-PSSession или exit. Строка-приглашение PS примет свой обычный вид, и вы вернетесь к своей локальной PowerShell консоли:

Exit-PSSession отключится от удаленного компьютера

Ранее для запуска интерактивной командной строки с удаленным Windows компьютером администраторы в основном использовалась утилиту PsExec. Но с появлением Enter-PSSession необходимость в использовании сторонней утилиты исчезла.

В Windows Server 2016/2019 PowerShell Remoting включен по умолчанию (это видно в консоли Server Manager -> Local Server -> Remote Management = Enabled).

В десктопных версиях Windows (Win10, Win11) PSRemoting и служба WinRM отключены.

remote management включен в Windows Server 2016 и 2019

Вы можете проверить, включен ли PSremoting на текущем компьютере:

Get-PSSessionConfiguration

Данная команда также позволяет получить список пользователей и групп, которым разрешено подключаться через WinRM. Для использования PSRemoting учетная запись пользователя должна состоять в группе
Administrators
или
Remote Management Users
. Особенности удаленного использования WinRM без прав администратора описаны здесь.

получить настройки PSRemoting с помощью Get-PSSessionConfiguration

Вы можете протестировать, можно ли подключится через PowerShell Remoting к вашему компьютеру локально:

Test-WSMan -ComputerName localhost

Если команда вернет версию схемы WSMan, значит удаленные подключения к этому компьютеру через PS Remoting разрешены.

Test-WSMan проверка подключения powershell remoting

Если PowerShell Remoting отключен или не настроен, появился ошибка:

Test-WSMan : <f:WSManFaultxmlns:f="http://schemas.microsoft.com/wbem/wsman/1/wsmanfault" Code="2150858770" Machine="srv02"><f:Message>The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig".

Чтобы включить PowerShell Remoting, выполните команду:

Enable-PSRemoting -Force

Данная команда:

  • Включает службу WinRM и настраивает ее на автозапуск;
  • Создает точку подключения на стандартном порту WinRM (TCP/5985 для HTTP трафика);
  • Добавляет исключения в Windows Firewall для WS-Management (если вы настраиваете PSRemoting вручную, добавьте правило самостоятельно);
  • Разрешает удаленные PowerShell сессии;
  • Перезапускает службу WinRM.

Убедитесь, что служба WinRM запущена и настроена на автоматический запуск:

Get-Service WinRM | Select MachineName,Name,Status, StartType

служба WinRM в windows

Команда Enable-PSRemoting работает только для доменного и частного сетевых профилей Windows. Если вы хотите включить PSRemoting на компьютере в общей (public) сети, нужно изменить тип сети на частную или воспользоваться командой:

Enable-PSRemoting -SkipNetworkProfileCheck -Force

В домене Active Directory проще всего настроить Windows Remote Management (PSRemoting) на серверах и компьютера централизованно с помощью групповой политики.

В новых версиях PowerShell(v6 и v7) поддерживается использование протокола Secure Shell (SSH) для подключения к удаленному компьютеру через PowerShell Remoting. На удаленном компьютере должен быть доступна точка подключения SSH (в Windows теперь есть встроенный SSH сервер). Вы можете запустить интерактивную сессию PSRemoting поверх SSH с помощью команды:

Enter-PSSession -HostName [email protected]

Или аутентифицироваться по SSH с помощью RSA ключа:

Enter-PSSession -HostName k[email protected]:22 -KeyFilePath c:\PS\your_rsa_key

Enter-PSSession можно использовать совместно с командой New-PSSession:

$s = New-PSSession -ComputerName hq-srv01.contoso.com
Enter-PSSession -Session $s

Enter-PSSession поддерживает несколько способов аутентификации. Вы можете задать нужный способ с помощью параметра
-Authentication
. Поддерживаются Basic, Digest, Kerberos, CredSSP, NegotiateWithImplicitCredential, Negotiate Challenge.

В примере выше мы показали пример интерактивного подключения Enter-PSSession между компьютерами в одном домене Windows (для подключения достаточно указать FQDN или короткое имя, используется Kerberos аутентфикация). Если попробовать подключиться к удаленному компьютеру по IP адресу или CNAME, аутентификация не пройдет:

Enter-PSSession : Connecting to remote server 192.168.13.5 failed with the following error message: The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated.

Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided

Для подключения к удаленному компьютеру по IP можно добавить этот хост в список доверенных (Trusted Hosts) или использовать SSL (более безопасно).

Чтобы добавить IP адрес в доверенные, выполните команду:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.5

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

Set-Item WSMan:\localhost\Client\TrustedHosts -Value *.winitpro.ru

Вывести список доверенных хостов:

Get-Item WSMan:\localhost\Client\TrustedHosts

Аналогично нужно добавить ваш хост в доверенные на удаленном компьютере.

Перезапустите службу:

Restart-Service WinRM

Чтобы подключиться к удаленному компьютеру по IP адресу, используйте такую команду:

Enter-PSSession -ComputerName 192.168.13.5 -Credential (Get-Credential -UserName contoso\kbuldogov)

Командлеты Enter-PSSession и New-PSSession создают постоянную сессию типа один к одному и используются в основном в интерактивных сценариях. Если вам нужно автоматизация, или есть задачи, которые нужно выполнить сразу на множестве удаленных компьютерах, используйте командлет Invoke-Command.

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

  • Windows player windows 7 скачать torrent
  • Windows powershell код события 403
  • Windows player rus portable скачать
  • Windows powershell как отключить автозапуск
  • Windows pin window on top