Удаленный доступ к серверу powershell. Настройка удалённого управления в Powershell


На сегодняшний день PowerShell Remoting является основным инструментом удаленного управления операционными системами Windows. Поэтому, знать о его возможностях и использовать в своих повседневных задачах должен каждый системный администратор Windows. Для запуска команд на удаленных компьютерах с помощью PowerShell Remoting, можно использовать командлет Powershell Invoke-Command (псевдоним icm).

Функционал командлета Invoke-Command основан на протоколе Web Services for Management (WS-Management ) и службе Windows Remote Management (WinRM ), используемой для связи. Связь между компьютерами выполняется по протоколу HTTP (по умолчанию) или HTTPS. Весь трафик между двумя компьютерами зашифрован на уровне протокола. Поддерживаются несколько методов аутентификации, включая NTLM и Kerberos. Возможность создания удаленных сеансов появилась в версии Powershell 2.0.

Для удаленного подключения к компьютеру через PowerShell Remoting на нем необходимо выполнить ряд настроек:

  1. Нужно разрешить удаленные подключения: Enable-PSRemoting -Force
  2. Запустить службу WinRM: Start-Service WinRM
  3. Создать правило Брандмауэра Windows, разрешающее входящие подключения по этому протоколу.

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

  1. Необходимо разрешить подключения к удаленным системам. Для предоставления доступа ко всем удаленным компьютерам, воспользуйтесь командой: Set-Item wsman:\localhost\client\trustedhosts * -Force
  2. Убедитесь, что файервол не блокирует исходящие подключения.

Теперь, чтобы выполнить команду на удаленном компьютере через Powershell Remoting (например, вы хотите перезапустить службу печати Spooler), вам нужно выполнить такую команду:

Invoke-Command -computername server1 -credential domain\user1 -scriptblock { Restart-Service spooler}

Эта команда выполняет команду Restart-Service spooler на удаленном компьютере с именем server1 . Параметр Credential используется для выполнения команды в контексте безопасности доменного пользователя domain\user1.

При указании имени пользователя, Windows PowerShell отобразит диалоговое окно, в котором нужно указать пароль учетной записи user1. Затем указанная в фигурных скобках команда выполняется на удаленном компьютере и возвращает результаты в консоль. После выполнения команды удаленный сеанс PoSh завершается.

Чтобы запустить задачу в фоновом режиме, вы можете указать параметр -AsJob .

При запуске команды в фоновом режиме PowerShell не возвращает ее результаты. Чтобы получить их, нужно использовать командлет Receive-Job.

Get-job –id 3 |Receive-Job

Для запуска не одной команды, а целого скрипта PowerShell, командлет Invoke-Command имеет специальный аргумент -FilePath, который нужно использовать вместо -ScriptBlock для указания пути к файлу скрипта. Например, я создал небольшой скрипт PoSh, который отображает список остановленных служб. Выполним данный скрипт на удаленном компьютере:

Invoke-Command -computername server1 -FilePath .\list.ps1

Тут важно отметить, что вам не нужно самостоятельно копировать файл скрипта ps1 на удаленный компьютер. Результаты выполнения скрипта выводятся в консоль.

Достаточно часто возникает необходимость одновременно выполнять одну и ту же команду/скрипт на нескольких компьютерах. С помощью Invoke-Command это реализуется довольно просто. Можно перечислить имена компьютеров, разделив из запятыми в аргументе -ComputerName .

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName server1,server2,server3

Либо поместить из в массив:

$srv_list = @(″server4″,″server5″,″server6″)
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName $servers

Или загрузить из тестового файла:

Invoke-Command -ScriptBlock {Restart-Service spooler} –ComputerName (Get-Content .\servers_list.txt)

Команда будет выполнена на каждом компьютере, а результаты ее выполнения будут отображаться в консоли.

Примечание . У командлета Invoke-Command есть параметр ThrottleLimit который позволяет установить максимальное количество компьютером, на которых одновременно может выполнятся одна и та же команда. По умолчанию число компьютером ограничено цифрой 32 . При необходимости это число можно увеличить, но имейте в виду, что увеличение этого параметра увеличивает нагрузку на процессор и память вашего компьютера, поэтому эту операцию нужно выполнять с осторожностью.

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

Get-ADComputer -Filter * -properties name | select {Name="computername";Expression={$_."name"}}| Invoke-Command -ScriptBlock {hostname}

Каждый раз при запуске Invoke-Command, создается новый сеанс, который потребляет некоторое время процессора и ресурсы. Чтобы избежать лишнего расходования ресурсов, можно использовать один сеанс для выполнения всех команд. Например, создадим новый сеанс sess1 с компьютером computer1 и присвоим его переменной $session, а затем выполним свою задачу в этом сеансе:

$session = New-PSSession -ComputerName computer1 -Name sess1
Invoke-Command -ScriptBlock { Restart-Service spooler } -Session $session

Данный Сеанс будет активен, пока вы не закроете консоль PowerShell. Вы также можете закрыть сеанс (Disconnect-PSSession) или удалить его (Remove-PSSession).

powershell удаленный запуск приложения

Запуск интерактивного сеанса

Чтобы запустить интерактивный сеанс с одним удаленным компьютером, используйте командлет Enter-PSSession. Например, чтобы запустить интерактивный сеанс с удаленным компьютером Server01, введите:
enter-pssession Server01
В командной строке отобразится имя компьютера, к которому вы подключены. В дальнейшем все команды, введенные в командной строке, будут запускаться на удаленном компьютере, а результаты отобразятся на локальном компьютере.
Чтобы завершить интерактивный сеанс, введите:
exit-pssession

Выполнение удаленной команды

Чтобы выполнить любую команду на одном или нескольких удаленных компьютерах, используйте командлет Invoke-Command. Например, чтобы выполнить команду Get-UICulture на удаленных компьютерах Server01 и Server02, введите:

Invoke-command -computername Server01, Server02 {get-UICulture}
Выходные данные будут возвращены на ваш компьютер.
Чтобы запустить сценарий на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command. Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.
Например, следующая команда выполняет сценарий DiskCollect.ps1 на удаленных компьютерах Server01 и Server02.
invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

Установка постоянного подключения
Чтобы выполнить ряд связанных команд с общими данными, создайте сеанс на удаленном компьютере, а затем используйте командлет Invoke-Command для выполнения команд в созданном сеансе. Чтобы создать удаленный сеанс, используйте командлет New-PSSession.
Например, следующая команда создает удаленный сеанс на компьютере Server01 и другой удаленный сеанс на компьютере Server02. Она сохраняет объекты сеанса в переменной $s.
$s = new-pssession -computername Server01, Server02
После установки сеансов в них можно выполнить любую команду. Так как сеансы являются постоянными, вы можете собирать данные в одной команде и использовать их в последующей.
Например, следующая команда выполняет команду Get-Hotfix в сеансах в переменной $s и сохраняет результаты в переменной $h. Переменная $h создается в каждом сеансе в $s, но она не существует в локальном сеансе.
invoke-command -session $s {$h = get-hotfix}
Теперь данные в переменной $h можно использовать в последующих командах, таких как следующая. Результаты отобразятся на локальном компьютере.

Invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"}

Всё взято с https://technet.microsoft.com/ru-ru/library/dd819505.aspx

Удаленное управление с помощью PowerShell

Существует довольно много методов для работы с удаленными компьютерами. Есть Windows Management Instrumentation (WMI), широко используемый в VBScript. Есть различные утилиты, которые позволяют осуществлять удаленное управление, типа от Sysinternals. Даже многие командлеты PowerShell имеют параметр ComputerName для выполнения на удаленных компьютерах.

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

PowerShell Remoting решает большинство описанных проблем. Он основан на Microsoft реализации протокола Web Services for Management (WS-Management), а для связи использует службу (WinRM). Связь между компьютерами осуществляется по HTTP (по умолчанию) или HTTPS. Весь трафик между двумя компьютерами шифруется на уровне протокола (за исключением случаев, когда используется SSL). Поддерживаются несколько методов аутентификации, включая NTLM и Kerberos.

В отличие от утилит, использующих различные программные интерфейсы, PS Remoting работает следующим образом: команды, вводимые на локальном компьютере, передаются на удаленный компьютер и там выполняются, затем результат передается обратно. Поскольку все команды выполняются локально, нет необходимости заботится о совместимости. Кроме того, для работы PS Remoting нужен всего один открытый порт на брандмауэре.

Есть несколько способов управления с помощью PowerShell Remoting.

Управление «один к одному»

Самый простой способ удаленного управления — интерактивно открыть удаленную сессию и в ней выполнить нужные действия. Например, откроем сессию на компьютер SRV4 и рестартуем на нем сервис печати:

Enter-PSSession -ComputerName SRV4
Restart-Service -Name spooler

Посмотрим состояние сервиса и закроем удаленную сессию:

Get-Service -Name spooler
Exit-PSSession

Интерактивная работа подходит для решения несложных задач удаленного администрирования. Если же надо автоматизировать процесс, то лучше воспользоваться командлетом Invoke-Command . Вот так с его помощью можно сделать то же самое действие:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName SRV4

Эта команда откроет удаленную сессию на SRV4, выполнит блок команд, указанный в параметре -ScriptBlock , и закроет сессию. А чтобы задание выполнялось в фоновом режиме, дополнительно можно указать параметр -AsJob .

Cледует помнить о том, что при работе в фоновом режиме PowerShell не возвращает результат. Для его получения придется воспользоваться командлетом Receive-Job .

Для того, чтобы выполнить не пару-тройку команд, а какой либо скрипт, у Invoke-Command есть параметр –FilePath , который можно использовать вместо –ScriptBlock для определения файла сценария. Для примера я создал скрипт, который выводит список остановленных служб и запустил его на удаленной машине SRV4:

Invoke-Command -FilePath .\script.ps1 -ComputerName SRV4

Управление «один ко многим»

Довольно часть возникает необходимость параллельно выполнить одну задачу на нескольких компьютерах. Это довольно легко можно сделать с помощью того же Invoke-Command . Например, имена компьютеров можно просто перечислить через запятую:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName SRV4,SRV5

Поместить в переменную:

$servers = @(″SRV1″,″SRV2″,″SRV3″)
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName $servers

Или взять из файла:

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName`
(Get-Content .\servers.txt)

Примечание: у Invoke-Command есть параметр ThrottleLimit , ограничивающий максимальное количество компьютеров, которыми можно управлять одновременно. По умолчанию этот параметр равен 32. При необходимости его можно изменить, но учтите, что повышение этого параметра увеличит нагрузку на процессор и память вашего компьютера, поэтому эту операцию нужно выполнять с большой осторожностью.

Сессии

Каждый раз при выполнении Invoke-Command создается новая сессия, на создание которой тратится время и ресурсы. Чтобы этого избежать мы можем открыть одну сессию, в которой и выполнять все команды. Например, откроем сессию с именем SRV4 на компьютер SRV4 и поместим ее в переменную $session, а затем этой сессии выполним нашу задачу (остановим многострадальный spooler):

$session = New-PSSession -ComputerName SRV4 -Name SRV4
Invoke-Command -ScriptBlock {Get-Service spooler | Stop-Service}`
-Session $session

Сессия будет активна до того момента, пока мы не выйдем из консоли PowerShell. Также сессию можно закрыть — Disconnect-PSSession или удалить — Remove-PSSession .

А теперь несколько интересных возможностей, появившихся в PowerShell 3.0. Если раньше при выходе из сессии или закрытии консоли сессия удалялась, то в PS 3.0 при закрытии сессия переходит в состояние disconnected . Мы можем открыть новый сеанс на этом же (или любом другом) компьютере и выполнить команду прямо в этой отключенной сессии. В качестве примера стартуем на компьютере SRV4 сервис печати, остановленный в прошлый раз:

Invoke-Command -ScriptBlock {Start-Service spooler}`
-ComputerName SRV4 -Disconnected

Еще один вариант использования отключенных сессий — запуск длительных по времени задач. Для примера откроем сессию c именем LongJob на SRV4 и запустим в ней фоновое задание, которое будет выводить список сервисов с интервалом в 1 минуту:

$session = New-PSSession -ComputerName SRV4 -Name LongJob
Invoke-Command -Session $session -ScriptBlock`
{Get-Service | foreach {$_;sleep 60} } -AsJob

Посмотрим, как выполняется задача и закроем сессию:

Receive-Job -Name Job2
Disconnect-PSSession $session

Идем на другой компьютер и открываем консоль, Подключаемся к сессии LongJob и с помощью командлета Receive-PSSession получаем результат выполнения задания:

Connect-PSSession -Name LongJob -ComputerName SRV4
Receive-PSSession -Name LongJob

Или еще вариант, без явного подключения к сессии с помощью Connect-PSSession :

$session = Get-PSSession -Name LongJob -ComputerName SRV4
$job = Receive-PSSession $session -OutTarget Job
Receive-Job $job

Примечание: для того, чтобы результат остался в системе, Receive-Job надо использовать с параметром -Keep .

Неявное удаленное управление

Еще один, довольно нестандартный способ удаленного управления — неявное удаленное управление (Implicit remoting). Используя его можно, не создавая удаленной сессии, локально выполнять командлеты, находящиеся на удаленном компьютере.

Для примера берем обычную рабочую станцию, без установленных средств удаленного администрирования. Создаем удаленную сессию с контроллером домена SRV4 и импортируем в эту сессию модуль Active Directory:

$session = New-PSSession -ComputerName SRV4
Invoke-Command {Import-Module ActiveDirectory} -Session $session

Затем экспортируем из удаленной сессии командлеты Active Directory и помещаем их в локальный модуль RemoteAD:

Export-PSSession -Session $session -CommandName *-AD* -OutputModule RemoteAD`
-AllowClobber

Эта команда создаст в папке WindowsPowerShell\Modules\RemoteAD новый модуль PowerShell. Загружены будут только командлеты с именами, соответствующими шаблону *-AD*. При этом сами командлеты не копируются на локальный компьютер. Локальный модуль служит своего рода ярлыком, а сами команды будут выполняться на удаленном контроллере домена.

После создания модуля удаленную сессию можно закрыть, она больше не понадобится.

Импортируем новый модуль в текущий сеанс (в PS 3.0 можно этот шаг пропустить):

Import-Module RemoteAD

А теперь внимание — мы не открываем удаленную сессию с контроллером домена, где расположены командлеты. Не нужно явно запускать этот сеанс - это можно сделать неявно , попытавшись выполнить удаленные командлеты:

New-ADUser -Name BillGates -Company Microsoft
Get-ADUser BillGates

При этом будет восстановлено удаленное подключение к контроллеру домена, после чего команда будет передана на контроллер домена и там выполнена. Результат выполнения будет сериализован в XML и передан по сети на локальный компьютер, где будет выполнена десериализация в объекты, с которыми может работать PowerShell.

Удаленный сеанс будет активным до тех пор, пока вы не закроете консоль или не удалите модуль RemoteAD.

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

В заключение скажу, что на данный момент PowerShell Remoting является основным инструментом для удаленного управления операционными системами Windows. Поэтому знать о его возможностях и уметь ими пользоваться просто необходимо любому Windows-администратору.

Резюме : Знакомство с удаленным управлением в Windows PowerShell.

Weekend Scripter: Включаем удаленное управление Windows.

Microsoft Scripting Guy, Ed Wilson на связи. Сегодня я собираюсь опубликовать отрывок из моей новой книги Windows PowerShell 3.0 Step by Step , издаваемой Microsoft Press. Сейчас эта книга доступна для предварительного заказа.

WinRM – Удаленное управление Windows

В Windows Server 2012 WinRM запущен по умолчанию для поддержки выполнения удаленных команд Windows PowerShell. WinRM это имплементация корпорацией Microsoft промышленного стандарта WS-Management Protocol. Поэтому WinRM предоставляет удобный способ доступа к удаленным системам с точки зрения требований к настройке файрвола. Это тот механизм, который используют новые CIM-командлеты. Таким образом, вы можете в любое время подключиться к работающей машине на Windows Server 2012 для запуска команд или открытия интерактивной консоли Windows PowerShell. На Windows 8, с другой стороны, WinRM по умолчанию отключена. Это означает, что первое, что необходимо сделать, это запустить командлет Enable-PSRemoting . При запуске этого командлета происходят следующие шаги:

1. Запускается или перезапускается служба WinRM.

2. Тип запуска службы WinRM устанавливается в автоматический.

3. Создается прослушиватель (listener) для приема подключений по всем IP-адресам.

4. Включается исключение файрвола для трафика WS-Man.

5. Активируется конфигурация Microsoft.powershell

6. Активируется конфигурация Microsoft.powershell.workflow

7. Активируется конфигурация Microsoft.powershell32

В течение этого процесса, функция запрашивает подтверждения на выполнение каждого из действий. Если вы знакомы с действиями, выполняемыми функцией и не собираетесь вносить в ее работу каких-либо изменений, вы можете запустить эту команду с ключом –Force и в этом случае запросы подтверждений выводиться не будут. Синтаксис этой команды приведен ниже.

Enable-PSRemoting –Force

Теперь приведем пример использования функции Enable-PSRemoting в интерактивном режиме, включая всю выводимую информацию.

PS C:\> Enable-PSRemoting

WinRM Quick Configuration

Running command «Set-WSManQuickConfig» to enable remote management of this computer by using the Windows Remote Management (WinRM) service. This includes:

1. Starting or restarting (if already started) the WinRM service

2. Setting the WinRM service startup type to Automatic

3. Creating a listener to accept requests on any IP address

4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).

Do you want to continue?

WinRM has been updated to receive requests.

WinRM service type changed successfully.

WinRM service started.

WinRM has been updated for remote management.

Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.

WinRM firewall exception enabled.

microsoft.powershell SDDL:

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):y

Are you sure you want to perform this action?

Performing operation «Set-PSSessionConfiguration» on Target «Name:

microsoft.powershell.workflow SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD). This will

allow selected users to remotely run Windows PowerShell commands on this computer».

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):y

Are you sure you want to perform this action?

Performing operation «Set-PSSessionConfiguration» on Target «Name:

microsoft.powershell32 SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD). This will

allow selected users to remotely run Windows PowerShell commands on this computer».

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):y

После того как конфигурация выполнена, можно проверить работоспособность WinRM при помощи командлета Test-WSMan . Если система сконфигурирована верно, выводится информация, подобная следующей.

PS C:\> Test-WSMan -ComputerName w8c504

ProductVersion: OS: 0.0.0 SP: 0.0 Stack: 3.0

Этот командлет также работает с компьютерами с Windows PowerShell 2.0. Пример, приведенный ниже, иллюстрирует запрос к контроллеру домена на Windows Server 2008 с установленным Windows PowerShell 2.0, на котором был сконфигурирован WinRM.

PS C:\> Test-WSMan -ComputerName dc1

wsmid: http: //schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd

ProtocolVersion: http: //schemas.dmtf.org/wbem/wsman/1/wsman.xsd

ProductVendor: Microsoft Corporation

ProductVersion: OS: 0.0.0 SP: 0.0 Stack: 2.0

Если WinRM не сконфигурирован, будет возвращено сообщение об ошибке. В случае операционной системы Windows 8, сообщение будет следующим.

PS C:\> Test-WSMan -ComputerName w8c10

Test-WSMan:

xmlns:f=»http: //schemas.microsoft.com/wbem/wsman/1/wsmanfault» Code=»2150859046″

Machine=»w8c504.iammred.net»>WinRM cannot complete the operation. Verify

that the specified computer name is valid, that the computer is accessible over the

network, and that a firewall exception for the WinRM service is enabled and allows

access from this computer. By default, the WinRM firewall exception for public

profiles limits access to remote computers within the same local subnet.

At line:1 char:1

Test-WSMan -ComputerName w8c10

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CategoryInfo: InvalidOperation: (w8c10:String) , InvalidOperationException

FullyQualifiedErrorId: WsManError,Microsoft.WSMan.Management.TestWSManCommand

Стоит помнить о том, что включение удаленного управления командлетом Enable-PSRemoting не активирует исключение файрвола Remote Management, поэтому попытка пропинговать машину с Windows 8 успехом не увенчается.

PS C:\> ping w8c504

Pinging w8c504.iammred.net with 32 bytes of data:

Request timed out.

Request timed out.

Request timed out.

Request timed out.

Ping statistics for 192.168.0.56:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss).

В случае же с Windows Server 2012 все работает.

PS C:\> ping w8s504

Pinging w8s504.iammred.net with 32 bytes of data:

<1ms TTL=128

Reply from 192.168.0.57: bytes=32 time<1ms TTL=128

Reply from 192.168.0.57: bytes=32 time<1ms TTL=128

Reply from 192.168.0.57: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.0.57:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

Это все, что касается включения WinRM.

Ed Wilson, Microsoft Scripting Guy

Оригинал:

Не так давно пришлось потратить немного времени на настройку удаленного доступа через Powershell. Мне такой подход кажется очень хорошей альтернативной Remote Desktop Services в ряде случаев (перезапустить сервис на удаленном хостинге VDS, сделать резервные копии, посмотреть состояние системы и т.д.).

Возможность создания удаленных сеансов Powershell появилась в версии 2. Для этого используется командлет Enter-PSSession / Invoke-Command . Однако, перед их использованием следует подготовить среду.

Что делаем на сервере :

Шаг 1: Открываем консоль Powershell и разрешаем удаленные сессии командлетом Enable-PSRemoting с ключом Force .

Enable-PSRemoting -Force

Шаг 2: Убеждаемся в том, что служба WinRM запущена.

Start-Service WinRM

Шаг 3: Настраиваем правила в брэндмауэре, чтобы входящие подключения были возможны.

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

Шаг 1: Разрешить подключение к удаленным узлам. Для доступа к любым узлам можно воспользоваться следующей конструкцией:

Set-Item wsman:\localhost\client\trustedhosts * -Force

Шаг 2: Убедиться, что брэндмауэр не блокирует исходящие соединения.

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

Enter-PSSession 192.168.1.160 -Credential VMNAME\User

Значения 192.168.1.160 и VMNAME\User необходимо заменить адресом удаленного узла и именем пользователя Windows на сервере.

Теперь удаленный доступ через Powershell работает. Однако, есть еще один ньюанс. Возможно, кто-либо из вас пользуется профилями в Powershell . Профили – это специальные скрипты, которые запускаются при запуске самой консоли. Здесь, например, можно определить все необходимые алиасы и выполнить предварительные действия.

Проблема заключается в том, что профили не запускаются при использовании удаленных сеансов. Решить это можно путем использования разных конфигураций подключения. Для этого первоначально необходимо зарегистрировать конфигурацию на удаленном сервере. Сделать это можно путем выполнения коммандлета Register-PSSessionConfiguration . При этом каждой конфигурации присваивается имя. Для каждой конфигурации можно задать путь до скрипта, который будет выполняться при старте сессии.

Register-PSSessionConfiguration -name Config1 -startupScript c:\scripts\Startup.ps1

После этого, при подключении к удаленному узлу, при использовании коммандлета Enter-PSSession следует указать имя конфигурации.

Enter-PSSession 192.168.1.160 -ConfigurationName Config1 -Credential VMNAME\User

Теперь можно не тратить ресурсы сервера на создание сессии подключения через Remote Desktop Services и удаленно управлять сервером, используя Powershell.