Удаленное управление powershell: Удаленное взаимодействие PowerShell — PowerShell

Содержание

Как в Powershell подключиться к удаленному компьютеру

В 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


 

Рекомендую

Подписывайтесь на наш Telegram канал

Теги:

#powershell

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

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

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

PowerShell Remoting решает большинство описанных проблем. Он основан на Microsoft реализации протокола Web Services for Management (WS-Management), а для связи использует службу  Windows Remote 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-администратору.

об удаленных требованиях — PowerShell

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

Краткое описание

Описывает системные требования и требования к конфигурации для запуска
удаленные команды в PowerShell.

Подробное описание

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

Примечание

Многие командлеты (включая Get-Service , Get-Process , Get-WMIObject ,
Командлеты Get-EventLog и Get-WinEvent ) получают объекты с удаленных компьютеров
с помощью методов Microsoft .NET Framework для извлечения объектов. Они делают
не использовать инфраструктуру удаленного взаимодействия PowerShell. Требования в этом
document не применяются к этим командлетам.

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

Системные требования

Для запуска удаленных сеансов в Windows PowerShell 3.0 локальные и удаленные компьютеры
должен иметь следующее:

  • Windows PowerShell 3.0 или более поздней версии
  • Microsoft .NET Framework 4 или более поздней версии
  • Удаленное управление Windows 3. 0

Для запуска удаленных сеансов в Windows PowerShell 2.0 локальный и удаленный
компьютеры должны иметь следующее:

  • Windows PowerShell 2.0 или более поздней версии
  • Microsoft .NET Framework 2.0 или более поздней версии
  • Удаленное управление Windows 2.0

Вы можете создавать удаленные сеансы между компьютерами под управлением Windows PowerShell
2.0 и Windows PowerShell 3.0. Однако функции, работающие только в Windows
PowerShell 3.0, например возможность отключения и повторного подключения к сеансам,
доступны только в том случае, если на обоих компьютерах установлена ​​Windows PowerShell 3.0.

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

Удаленное управление Windows (WinRM) 3.0 и Microsoft .NET Framework 4
включены в Windows 8, Windows Server 2012 и более новые выпуски Windows
операционная система. WinRM 3.0 входит в состав Windows Management Framework 3. 0.
для старых операционных систем. Если на компьютере нет необходимого
версию WinRM или Microsoft .NET Framework, установка завершается ошибкой.

Полномочия пользователя

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

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

Дескрипторы безопасности в конфигурациях сеанса по умолчанию,
Microsoft. PowerShell , Microsoft.PowerShell32 и
Microsoft.PowerShell.Workflow , разрешить доступ только членам
Группа администраторов .

Если у текущего пользователя нет разрешения на использование конфигурации сеанса,
команда для запуска команды (которая использует временный сеанс) или создания
постоянный сеанс на удаленном компьютере завершается сбоем. Пользователь может использовать
Параметр ConfigurationName командлетов, которые создают сеансы для выбора
другую конфигурацию сеанса, если она доступна.

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

Дополнительные сведения о конфигурациях сеансов см.
about_Session_Configurations.

Сетевые расположения Windows

Начиная с Windows PowerShell 3. 0, Enable-PSRemoting 9Командлет 0026 может включить
удаленное взаимодействие на клиентских и серверных версиях Windows на частных, доменных и
общедоступные сети.

В серверных версиях Windows с частными и доменными сетями
Командлет Enable-PSRemoting создает правила брандмауэра, разрешающие неограниченное удаленное
доступ. Он также создает правило брандмауэра для общедоступных сетей, которое разрешает удаленный
доступ только с компьютеров в той же локальной подсети. Эта локальная подсеть
правило брандмауэра включено по умолчанию в серверных версиях Windows в общедоступных
сети, но Enable-PSRemoting повторно применяет правило, если оно было изменено или
удален.

В клиентских версиях Windows с частными и доменными сетями по умолчанию
командлет Enable-PSRemoting создает правила брандмауэра, разрешающие неограниченное
удаленный доступ.

Чтобы включить удаленное взаимодействие в клиентских версиях Windows с общедоступными сетями, используйте
Параметр SkipNetworkProfileCheck командлета Enable-PSRemoting . Это создает
правило брандмауэра, разрешающее удаленный доступ только с компьютеров,
локальная подсеть.

Чтобы снять ограничение локальной подсети в общедоступных сетях и разрешить удаленное
доступ из всех расположений в клиентских и серверных версиях Windows, используйте
Командлет Set-NetFirewallRule в модуле NetSecurity . Запустите следующее
команда:

 Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Любой
 

Примечание

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

В Windows PowerShell 2.0, в серверных версиях Windows Enable-PSRemoting
создает правила брандмауэра, разрешающие удаленный доступ во всех сетях.

В Windows PowerShell 2. 0, в клиентских версиях Windows, Enable-PSRemoting
создает правила брандмауэра только в частных и доменных сетях. Если сеть
место общедоступное, Ошибка Enable-PSRemoting .

Запуск от имени администратора

Права администратора необходимы для следующих операций удаленного взаимодействия:

  • Установление удаленного подключения к локальному компьютеру. Это обычно
    известный как «петлевой» сценарий.

  • Управление конфигурациями сеансов на локальном компьютере.

  • Просмотр и изменение настроек WS-Management на локальном компьютере. Это
    настройки в узле LocalHost диска WSMAN:.

Для выполнения этих задач необходимо запустить PowerShell с параметром «Запуск от имени».
администратор», даже если вы являетесь членом группы «Администраторы » на
локальный компьютер.

В Windows 7 и Windows Server 2008 R2 для запуска PowerShell с
параметр Запуск от имени администратора :

  1. Нажмите кнопку Пуск, щелкните Все программы, щелкните Стандартные, а затем щелкните
    папку PowerShell.
  2. Щелкните правой кнопкой мыши PowerShell и выберите 9.0037 Запуск от имени администратора .

Чтобы запустить Windows PowerShell с параметром Запуск от имени администратора :

  1. Нажмите кнопку Пуск, щелкните Все программы, а затем
    папка.
  2. Щелкните правой кнопкой мыши PowerShell и выберите Запуск от имени администратора .

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

При запуске PowerShell из другой программы, например Cmd.exe, используйте
параметр Запуск от имени администратора для запуска программы.

Как настроить компьютер для удаленного взаимодействия

Компьютеры, работающие под управлением всех поддерживаемых версий Windows, могут устанавливать удаленное
подключения и запускать удаленные команды в PowerShell без каких-либо
конфигурация. Однако, чтобы получать подключения и разрешать пользователям создавать
локальные и удаленные сеансы PowerShell, управляемые пользователями ("PSSessions") и
запускать команды на локальном компьютере, необходимо включить PowerShell
удаленное взаимодействие на компьютере.

Windows Server 2012 и более новые версии Windows Server включены для
Удаленное взаимодействие PowerShell по умолчанию. Если настройки изменены, вы можете
восстановить настройки по умолчанию, запустив командлет Enable-PSRemoting .

Во всех других поддерживаемых версиях Windows необходимо запустить
Командлет Enable-PSRemoting для включения удаленного взаимодействия PowerShell.

Функции удаленного взаимодействия PowerShell поддерживаются WinRM
служба, которая является реализацией Microsoft веб-служб для
Протокол управления (WS-Management). Когда вы включаете PowerShell
удаленного взаимодействия, вы меняете стандартную конфигурацию WS-Management и добавляете систему
конфигурация, позволяющая пользователям подключаться к WS-Management.

Чтобы настроить PowerShell для получения удаленных команд:

  1. Запустите PowerShell с параметром Запуск от имени администратора .
  2. В командной строке введите: Enable-PSRemoting

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

 Новый-PSSession
 

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

 Идентификатор Имя Имя_компьютера Состояние Имя_конфигурации
-- ---- ------------ ----- -----
1 Session1 localhost Открыт Microsoft.PowerShell
 

Если команда не удалась, для получения помощи см.
about_Remote_Troubleshooting.

Понимание политик

При удаленной работе вы используете два экземпляра PowerShell, один на
локальном компьютере и один на удаленном компьютере. В результате ваша работа
затронуты политиками Windows и политиками PowerShell на
локальные и удаленные компьютеры.

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

Ограничения базовой аутентификации в Linux и macOS

При подключении из системы Linux или macOS к Windows базовая аутентификация
через HTTP не поддерживается. Обычную аутентификацию можно использовать по протоколу HTTPS.
установка сертификата на целевой сервер. Сертификат должен иметь
Имя CN, совпадающее с именем хоста, не просрочено и не отозвано. Самоподписанный
Сертификат может быть использован для целей тестирования.

См. Как настроить WINRM для HTTPS
для получения дополнительной информации.

Следующая команда, запускаемая из командной строки с повышенными привилегиями, настроит
Прослушиватель HTTPS в Windows с установленным сертификатом.

 $hostinfo = '@{Hostname=""; CertificateThumbprint=""}'
winrm создать winrm/config/Listener?Address=*+Transport=HTTPS $hostinfo
 

На стороне Linux или macOS выберите Basic для проверки подлинности и -UseSSl.

Примечание

Обычная проверка подлинности не может использоваться с учетными записями домена; локальная учетная запись
требуется, и учетная запись должна быть в группе администраторов .

 # Указанный локальный пользователь должен иметь права администратора на целевой машине.
# Укажите неполное имя пользователя.
$cred = имя пользователя Get-Credential
$session = New-PSSession -Computer  -Credential $cred `
  -Базовая аутентификация -UseSSL
 

Альтернативой Basic Authentication по HTTPS является Переговоры . Этот
приводит к проверке подлинности NTLM между клиентом и сервером, а полезная нагрузка
шифруется через HTTP.

Ниже показано использование Negotiate with New-PSSession :

 # Указанный пользователь должен иметь права администратора на целевой машине.
$cred = Get-Credential username@hostname
$session = New-PSSession -Computer  -Credential $cred `
  -Аутентификация переговоров
 

Примечание

Windows Server требует дополнительного параметра реестра для включения
администраторы, кроме встроенного администратора, для подключения с помощью NTLM.
Обратитесь к Параметр реестра LocalAccountTokenFilterPolicy в разделе
Negotiate Аутентификация в Authentication for Remote Connections

См. также

  • about_Remote
  • about_Remote_Variables
  • about_PSSessions
  • Вызов команды
  • Enter-PSSession
  • Новый-PSSession

Перезагрузите компьютер (Microsoft.PowerShell.Management) — PowerShell | Microsoft Learn

  • Справочник
Модуль:
Microsoft.PowerShell.Управление

Перезапускает операционную систему на локальном и удаленном компьютерах.

Синтаксис

 Перезагрузка компьютера
       [-WsmanAuthentication ]
       [[-ИмяКомпьютера] <Строка[]>]
       [[-Учетные данные]]
       [-Сила]
       [-Ждать]
       [-Тайм-аут ]
       [-Для ]
       [-Задержка ]
       [-Что если]
       [-Подтверждать]
       [<Общие параметры>] 

Описание

Этот командлет доступен только на платформе Windows.

Командлет Restart-Computer перезапускает операционную систему на локальном и удаленном компьютерах.

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

Начиная с Windows PowerShell 3.0, вы можете дождаться завершения перезапуска, прежде чем запускать следующий
команда. Укажите время ожидания и интервал запроса, а также подождите, пока определенные службы не будут
доступны на перезагруженном компьютере. Эта функция делает практичным использование Restart-Computer в
скрипты и функции.

Примеры

Пример 1: Перезагрузите локальный компьютер

Restart-Computer перезапускает локальный компьютер.

 Перезагрузка-компьютер 

Пример 2: перезапуск нескольких компьютеров

Restart-Computer может перезапускать удаленные и локальные компьютеры. Параметр ComputerName принимает
массив имен компьютеров.

 Restart-Computer -ComputerName Server01, Server02, localhost 

Пример 3. Получение имен компьютеров из текстового файла

Restart-Computer получает список имен компьютеров из текстового файла и перезагружает компьютеры.
Параметр ComputerName не указан. Но поскольку это первый параметр позиции, он
принимает имена компьютеров из текстового файла, которые отправляются по конвейеру.

 Get-Content -Path C:\Domain01.txt | Restart-Computer 

Get-Content использует параметр Path для получения списка имен компьютеров из текстового файла,
Домен01.txt . Имена компьютеров передаются по конвейеру. Restart-Computer перезагружает каждый
компьютер.

Пример 4. Принудительный перезапуск компьютеров, перечисленных в текстовом файле

В этом примере выполняется принудительный перезапуск компьютеров, перечисленных в Domain01. txt 9файл 0026.
имена компьютеров из текстового файла сохраняются в переменной. Параметр Force заставляет
немедленный перезапуск.

 $Names = Get-Content-Path C:\Domain01.txt
$Creds = Получить учетные данные
Restart-Computer -ComputerName $Names -Credential $Creds -Force 

Get-Content использует параметр Path для получения списка имен компьютеров из текстового файла,
Домен01.txt . Имена компьютеров хранятся в переменной $Names . Запросы Get-Credential
вам имя пользователя и пароль и сохраняет значения в переменной $Creds . Перезагрузка-Компьютер
использует параметры ComputerName и Credential с их переменными. Сила
параметр вызывает немедленную перезагрузку каждого компьютера.

Пример 6. Перезапустите удаленный компьютер и дождитесь PowerShell

Restart-Computer перезапустит удаленный компьютер, а затем подождет до 5 минут (300 секунд) для
PowerShell, чтобы он стал доступен на перезагруженном компьютере, прежде чем он продолжит работу.

 Restart-Computer -ComputerName Server01 -Wait -For PowerShell -Timeout 300 -Delay 2 

Restart-Computer использует параметр ComputerName для указания Server01 . Подождите
параметр ожидает завершения перезапуска. For указывает, что PowerShell может выполнять команды на
удаленный компьютер. Параметр Timeout указывает пятиминутное ожидание. Параметр Задержка
опрашивает удаленный компьютер каждые две секунды, чтобы определить, перезапущен ли он.

Пример 7. Перезагрузите компьютер с помощью WsmanAuthentication

Restart-Computer перезапускает удаленный компьютер с помощью механизма WsmanAuthentication .
Аутентификация Kerberos определяет, есть ли у текущего пользователя разрешение на перезапуск удаленного компьютера.
компьютер. Для получения дополнительной информации см.
Механизм аутентификации.

 Restart-Computer -ComputerName Server01 -WsmanAuthentication Kerberos 

Restart-Computer использует ComputerName для указания удаленного компьютера, Server01 .