Powershell подключиться к другому компьютеру: Удаленное подключение к WMI с помощью PowerShell — Win32 apps

Содержание

Удаленное подключение к WMI с помощью PowerShell — Win32 apps





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья

  • Чтение занимает 2 мин

Windows PowerShell предоставляет простой механизм подключения к инструментарию управления Windows (WMI) на удаленном компьютере. Удаленные подключения в WMI зависят от Windows брандмауэра, параметров DCOM и контроля учетных записей пользователей (UAC). Дополнительные сведения о настройке удаленных подключений см. в статье «Удаленное подключение к WMI с помощью Windows Vista».

Примеры в этом разделе основаны на VBScripts из подключения к WMI на удаленном компьютере. Все примеры в этом разделе используют командлет Get-WmiObject . Дополнительные сведения см. в разделе Get-WmiObject.

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

В следующем Windows PowerShell примере показано задание уровня олицетворения:

Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -ComputerName Computer_B

В предыдущем примере пользователь подключается к удаленному компьютеру, используя те же учетные данные (домен и имя пользователя), с которыми он выполнил вход. Пользователь также попросил использовать олицетворение. В отличие от исходного примера VBScript, строка моникера не требуется, так как уровень олицетворения задается свойством «Олицетворение». По умолчанию уровень олицетворения имеет значение 3 (олицетворение).

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

Примечание

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

 

В следующем Windows PowerShell примере показано, как подключиться к удаленному компьютеру с разными учетными данными и задать уровень олицетворения равным 3, что является олицетворением:

$Computer = "atl-dc-01"
Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -Credential `
FABRIKAM\administrator -ComputerName $Computer

В предыдущем примере имя компьютера было присвоено переменной $Computer. Пользователь подключается к удаленному компьютеру, используя определенные учетные данные (домен и имя пользователя) и запрашивает олицетворение для уровня проверки подлинности.

Примечание

Символ серьезного акцента (‘) используется для обозначения разрыва строки. Он эквивалентен символу подчеркивания (_) в VBScript.

 

В следующем Windows PowerShell примере выполняется подключение к группе удаленных компьютеров в одном домене путем создания массива имен удаленных компьютеров, а затем отображения имен устройств Plug and Play ( экземпляров Win32_PnPEntity) на каждом компьютере:

$ArrComputers = "Computer1", "Computer2", "Computer3"
foreach ($Computer in $ArrComputers) 
{
write-host ""
write-host "===================================="
write-host "Computer: $Computer"
write-host "===================================="
write-host "-----------------------------------"
write-host "Win32_PnPEntity instance"
write-host "-----------------------------------"
$ColItems = Get-WmiObject -Class Win32_PnPEntity -Namespace "root\cimv2" -Computer $Computer
$ColItems[0. .47] | Format-List Name, Status
}

Примечание

Чтобы запустить предыдущий сценарий Windows PowerShell, необходимо быть администратором на удаленных компьютерах. Кроме того, обратите внимание на следующее:

 

  • Имена компьютеров в массиве должны быть заключены в кавычки, так как они являются строками.
  • Объекты, возвращаемые методом Get-WmiObject , назначаются переменной $ColItems.
  • Оператор диапазона [] ограничивает список Plug and Play устройств до 48 экземпляров. Дополнительные сведения см. в разделе About_Operators.
  • «|» — это символ конвейера. Объект, возвращаемый ColItems, отправляется командлету Format-List .

В следующем Windows PowerShell примере можно подключиться к удаленному компьютеру в другом домене. В этом примере также отображаются имена процессов для экземпляров Win32_Process на удаленном компьютере.

$Computer = "FullComputerName" 
$Domain = "DOMAIN"
$Credential = Get-Credential
$ColItems = Get-WmiObject -Class Win32_Process -Authority "ntlmdomain:$Domain" `
-Credential $Credential -Locale "MS_409" -Namespace "root\cimv2"  -ComputerName $Computer
foreach ($ObjItem in $colItems) 
{
write-host "Process Name:" $ObjItem. name
}

Примечание

Чтобы запустить предыдущий сценарий Windows PowerShell, необходимо быть администратором на удаленном компьютере.

 

В предыдущем примере пользователь подключается к удаленному компьютеру в другом домене и задает предпочтительный языковой стандарт. Команда Get-Credential запрашивает учетные данные пользователя и назначает учетные данные объекту. В этом примере также перечислены имена экземпляров класса Win32_Process , запущенных на компьютере.

Подключение к WMI на удаленном компьютере

 

 






PowerShell. О удалённом подключении (about_Remote) — Клёвый код

С помощью PowerShell можно выполнить удаленные команды, как на одном компьютере, так и на нескольких компьютерах. Использовать как временное, так и постоянное подключение. Можно так же запустить интерактивный сеанс с одним удаленным компьютером.

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

Примечание: Для использования Windows PowerShell Remoting, локальные и удаленные компьютеры должны быть настроены на удаленное взаимодействие. Для получения дополнительной информации см about_Remote_Requirements.

 

Как начать интерактивный сеанс (ENTER-PSSESSION)

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

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

Следующая команда начинает интерактивный сеанс с компьютером Server01:

PowerShell

Enter-PSSession Server01



Enter-PSSession Server01

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

PowerShell

Server01 \ PS>



Server01 \ PS>

Теперь можно вводить команды на компьютере Server01.
Чтобы завершить интерактивный сеанс, надо ввести:

PowerShell

Exit-PSSession



Exit-PSSession

Для получения дополнительной информации см Enter-PSSession.

Как работать с командлетами, которые имеют параметр ComputerName для дистанционного получения данных

Некоторые командлеты имеют параметр ComputerName, он позволяет получать объекты с удаленных компьютеров.

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

Ниже приведён список командлетов имеющих параметр ComputerName:
Clear-EventLog
Get-Counter
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WinEvent
Get-WmiObject
Limit-EventLog
New-EventLog
Remove-EventLog
Restart-Computer
Stop-Computer
Show-EventLog
Test-Connection
Write-EventLog

Для примера, следующая команда получает службы на удаленном компьютере Server01:

PowerShell

Get-Service -ComputerName Server01



Get-Service -ComputerName Server01

Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы отобразить эти командлеты надо выполнить следующую команду:

PowerShell

Get-Command | where { $_. Parameters.Keys -contains «ComputerName» -and $_.Parameters.Keys -NotContains «Session»}



Get-Command | where { $_.Parameters.Keys -contains «ComputerName» -and $_.Parameters.Keys -NotContains «Session»}

 

Как запустить команды удалённо

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

Для указания списка компьютеров или одного компьютера можно воспользоваться параметром ComputerName. Для задания одной или несколько команд надо воспользоваться парамертом ScriptBlock.

Например, следующая команда выполняет команду Get-Culture на компьютере Server01.

PowerShell

Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture}



Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture}

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

Как создать постоянное соединение (PSsession)

При использовании параметра ComputerName и командлета Invoke-Command, оболочка Windows PowerShell устанавливает подключение только для данной команды. Затем, когда команда завершена, оболочка закрывает соединение. Любые переменные или функции, которые были определены в команде, будут потеряны.

Чтобы создать постоянное подключение к удаленному компьютеру, надо воспользоваться командлетом New-PSSession. Например, следующая команда создает сеансы PSSession на компьютерах Server01 и Server02, а затем сохраняет эти сеансы в переменной $s.

PowerShell

$s = New-PSSession -ComputerName Server01, Server02



$s = New-PSSession -ComputerName Server01, Server02

Как выполнять команд в PSsession

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

Например, следующая команда использует командлет Invoke-Command для выполнения командлета Get-Process в сеансах PSSession $s на компьютерах Server01 и Server02. Команда сохраняет процессы в переменной $р в каждом из сеансов PSSession.

PowerShell

Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}



Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}

Так как PSSession использует постоянное подключение, вы можете запустить другую команду в той же сессии PSSession, в которой уже задана переменная $р. Следующая команда подсчитывает количество процессов, сохраненных в переменной $р.

PowerShell

Invoke-Command -Session $s -ScriptBlock {$p. count}



Invoke-Command -Session $s -ScriptBlock {$p.count}

 

Как запустить удалённые команды на нескольких компьютерах

Для запуска удаленной команды на нескольких компьютерах, необходимо ввести все имена компьютеров в значении параметра ComputerName командлета Invoke-Command. Разделите имена компьютеров запятыми.

Например, следующая команда запускает команду Get-Culture на трех компьютерах:

PowerShell

Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}



Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}

Можно так же запустить команду в нескольких сеансах PSSession. Следующие команды создают сеансы PSSession на компьютерах Server01, Server02, Server03 и затем выполняется команда Get-Culture в каждом из сеансов.

PowerShell

$s = New-PSSession -ComputerName Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Get-Culture}



$s = New-PSSession -ComputerName Server01, Server02, Server03

Invoke-Command -Session $s -ScriptBlock {Get-Culture}

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

PowerShell

Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}



Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}

 

Как запустить скрипт на удаленных компьютерах

Чтобы запустить скрипт с локального компьютера, на удаленных компьютерах, надо использовать параметр FilePath командлета Invoke-Command.
Например, следующая команда запускает сценарий sample.ps1 на компьютерах S1 и S2:

PowerShell

Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1



Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1

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

 

Как остановить удалённые команды

Чтобы прервать команду, надо нажать «CTRL» + «C». Запрос прерывания передастся на удаленный компьютер и завершит работу удаленного управления.

New-PSSession (Microsoft.PowerShell.Core) — PowerShell | Microsoft Learn

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

Создает постоянное подключение к локальному или удаленному компьютеру.

Синтаксис

 Новый-PSSession
   [[-ИмяКомпьютера] <Строка[]>]
   [-Учетные данные ]
   [-Имя <Строка[]>]
   [-EnableNetworkAccess]
   [-ConfigurationName <строка>]
   [-Порт ]
   [-использоватьSSL]
   [-ИмяПриложения <Строка>]
   [-Дроссельный лимит ]
   [-SessionOption ]
   [-Аутентификация <механизм аутентификации>]
   [-CertificateThumbprint ]
   [<Общие параметры>] 
 Новый-PSSession
   [-Учетные данные ]
   [-Имя <Строка[]>]
   [-EnableNetworkAccess]
   [-ConfigurationName <строка>]
   [-Дроссельный лимит ]
   [-ConnectionUri] 
   [-Разрешить перенаправление]
   [-SessionOption ]
   [-Аутентификация <механизм аутентификации>]
   [-CertificateThumbprint ]
   [] 
 New-PSSession
   -Учетные данные 
   [-Имя <Строка[]>]
   [-ConfigurationName <строка>]
   [-VMId] 
   [-Дроссельный лимит ]
   [<Общие параметры>] 
 Новый-PSSession
   -Учетные данные 
   [-Имя <Строка[]>]
   [-ConfigurationName <строка>]
   -VMName <Строка[]>
   [-Дроссельный лимит ]
   [] 
 New-PSSession
   [[-Сеанс] ]
   [-Имя <Строка[]>]
   [-EnableNetworkAccess]
   [-Дроссельный лимит ]
   [] 
 New-PSSession
   [-Имя <Строка[]>]
   [-ConfigurationName <строка>]
   -ContainerId <Строка[]>
   [-Запустить от имени администратора]
   [-Дроссельный лимит ]
   [<Общие параметры>] 
 Новый-PSSession
   [-Имя <Строка[]>]
   [-UseWindowsPowerShell]
   [] 
 New-PSSession
   [-Имя <Строка[]>]
   [-Порт ]
   [-HostName] <строка[]>
   [-имя_пользователя <строка>]
   [-KeyFilePath <Строка>]
   [-Подсистема <Строка>]
   [-ConnectingTimeout ]
   [-SSHТранспорт]
   [-Параметры <Хэш-таблица>]
   [] 
 New-PSSession
   [-Имя <Строка[]>]
   -SSHConnection <хеш-таблица []>
   [<Общие параметры>] 

Описание

Командлет New-PSSession создает сеанс PowerShell ( PSSession ) на локальном или удаленном
компьютер. Когда вы создаете PSSession , PowerShell устанавливает постоянное соединение с
удаленный компьютер.

Используйте PSSession для запуска нескольких команд, которые совместно используют данные, такие как функция или значение
переменная. Для запуска команд в сеансе PSSession используйте командлет Invoke-Command . Чтобы использовать
PSSession для прямого взаимодействия с удаленным компьютером используйте командлет Enter-PSSession . За
дополнительную информацию см. в разделе about_PSSessions.

Вы можете запускать команды на удаленном компьютере без создания PSSession с ComputerName
параметры Enter-PSSession или Invoke-Command . При использовании параметра ComputerName ,
PowerShell создает временное соединение, которое используется для команды, а затем закрывается.

Начиная с PowerShell 6. 0, вы можете использовать Secure Shell (SSH) для установления соединения и создания
сеанс на удаленном компьютере, если SSH доступен на локальном компьютере и удаленный компьютер
настроен с конечной точкой PowerShell SSH. Преимущество удаленного сеанса PowerShell на основе SSH заключается в следующем.
что он может работать на нескольких платформах (Windows, Linux, macOS). Для сеансов на основе SSH вы используете
параметр HostName или SSHConnection , установленный для указания удаленного компьютера и соответствующих
информация о соединении. Дополнительные сведения о настройке удаленного взаимодействия PowerShell SSH см.
Удаленное взаимодействие PowerShell через SSH.

Примечание

При использовании удаленного взаимодействия WSMan с клиента Linux или macOS с конечной точкой HTTPS, где сервер
сертификат не является доверенным (например, самоподписанный сертификат). Вы должны предоставить
PSSessionOption , который включает значения SkipCACheck и SkipCNCheck , установленные на $true на
успешно установить соединение. Делайте это только в том случае, если вы находитесь в среде, где вы можете быть
сертификат сервера и сетевое подключение к целевой системе.

Примеры

Пример 1: Создание сеанса на локальном компьютере

 $s = New-PSSession 

Эта команда создает новый PSSession на локальном компьютере и сохраняет PSSession в
$s переменная.

Теперь вы можете использовать этот PSSession для запуска команд на локальном компьютере.

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

 $Server01 = New-PSSession -ComputerName Server01 

Эта команда создает новую PSSession на компьютере Server01 и сохраняет ее в $Server01
переменная.

При создании нескольких объектов PSSession назначьте их переменным с полезными именами. Это будет
помочь вам управлять объектами PSSession в последующих командах.

Пример 3. Создание сеансов на нескольких компьютерах

 $s1, $s2, $s3 = New-PSSession -ComputerName Server01,Server02,Server03 

Эта команда создает три PSSession объектов, по одному на каждом из компьютеров, указанных
Имя_компьютера Параметр .

Команда использует оператор присваивания ( = ) для назначения новых объектов PSSession переменным:
$s1 , $s2 , $s3 . Он назначает Server01 PSSession на $s1 , Server02 PSSession на
$s2 и Server03 PSSession до $s3 .

Когда вы назначаете несколько объектов ряду переменных, PowerShell назначает каждому объекту
переменной в ряду соответственно. Если объектов больше, чем переменных, все остальные объекты
присваиваются последней переменной. Если переменных больше, чем объектов, остальные переменные
пусты ( $null ).

Пример 4. Создание сеанса с указанным портом

 New-PSSession -ComputerName Server01 -Port 8081 -UseSSL -ConfigurationName E12 

Эта команда создает новую PSSession на компьютере Server01, который подключается к серверному порту.
8081 и использует протокол SSL. Новый PSSession использует альтернативную конфигурацию сеанса.
позвонил E12 .

Перед настройкой порта необходимо настроить прослушиватель WinRM на удаленном компьютере для прослушивания
порт 8081. Дополнительные сведения см. в описании параметра Порт .

Пример 5: Создание сеанса на основе существующего сеанса

 New-PSSession -Session $s -Credential Domain01\User01 

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

Команда использует параметр Session New-PSSession , чтобы указать PSSession , сохраненный в
$s переменная. Он использует учетные данные пользователя Domain1\Admin01 для выполнения команды.

Пример 6. Создание сеанса с глобальной областью действия в другом домене

 $global:s = New-PSSession -ComputerName Server1.Domain44.Corpnet.Fabrikam.com -Credential Domain01\Admin01 

В этом примере показано, как создать PSSession с глобальной областью действия на компьютере в другом
домен.

По умолчанию объекты PSSession , созданные в командной строке, создаются с локальной областью действия и
Объекты PSSession , созданные в сценарии, имеют область действия сценария.

Чтобы создать PSSession с глобальной областью действия, создайте новый PSSession , а затем сохраните
PSSession в переменной, преобразованной в глобальную область. В этом случае переменная $s приведена
до глобального масштаба.

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

Пример 7. Создание сеансов для многих компьютеров

 $rs = Get-Content C:\Test\Servers.txt | New-PSSession -ThrottleLimit 50 

Эта команда создает PSSession на каждом из 200 компьютеров, перечисленных в файле Servers.txt .
и он сохраняет полученный PSSession в переменной $rs . Объекты PSSession имеют
ограничение дроссельной заслонки 50 .

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

Пример 8.

Создание сеанса с использованием URI

 $s = New-PSSession -URI http://Server01:91/NewSession -Credential Domain01\User01 

Эта команда создает PSSession на компьютере Server01 и сохраняет его в переменной $s . Это
использует параметр URI для указания транспортного протокола, удаленного компьютера, порта и
альтернативная конфигурация сеанса. Он также использует параметр Credential для указания учетной записи пользователя.
у которого есть разрешение на создание сеанса на удаленном компьютере.

Пример 9. Запуск фонового задания в наборе сеансов

 $s = New-PSSession -ComputerName (Get-Content Servers.txt) -Credential Domain01\Admin01 -ThrottleLimit 16
Invoke-Command -Session $s -ScriptBlock {Get-Process PowerShell} -AsJob 

Эти команды создают набор из объектов PSSession , а затем запускают фоновое задание в каждом из
PSSession объектов.

Первая команда создает новую PSSession на каждом из компьютеров, перечисленных в Серверы.txt
файл. Он использует командлет New-PSSession для создания PSSession . Значение
Параметр ComputerName — это команда, использующая командлет Get-Content для получения списка
компьютер называет файл Servers.txt .

Команда использует параметр Credential для создания объектов PSSession с
разрешения администратора домена, и он использует ThrottleLimit для ограничения
команда на 16 одновременных подключений. Команда сохраняет объектов PSSession в папке $s .
переменная.

Вторая команда использует параметр AsJob командлета Invoke-Command для запуска фонового
задание, которое запускает команду Get-Process PowerShell в каждом из объектов PSSession в $s .

Дополнительные сведения о фоновых заданиях PowerShell см.
about_Jobs и about_Remote_Jobs.

Пример 10. Создание сеанса для компьютера с использованием его URI

 New-PSSession -ConnectionURI https://management.exchangelabs.com/Management 

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

Пример 11. Создание параметра сеанса

 $so = New-PSSessionOption -SkipCACheck
New-PSSession -ConnectionUri https://management.exchangelabs.com/Management -SessionOption $so -Credential Server01\Admin01 

В этом примере показано, как создать объект параметра сеанса и использовать параметр SessionOption .

Первая команда использует командлет New-PSSessionOption для создания параметра сеанса. Это экономит
результирующий объект SessionOption в переменной $so .

Вторая команда использует параметр в новом сеансе. Команда использует командлет New-PSSession для
создать новую сессию. Значение SessionOption 9Параметр 0040 — это объект SessionOption .
в переменной $so .

Пример 12. Создание сеанса с использованием SSH

 New-PSSession -HostName UserA@LinuxServer01 

В этом примере показано, как создать новый сеанс PSSession с использованием Secure Shell (SSH). Если SSH настроен
на удаленном компьютере, чтобы запросить пароли, вы получите запрос пароля. В противном случае вы
придется использовать аутентификацию пользователя на основе ключа SSH.

Пример 13: Создайте сеанс с помощью SSH и укажите порт и ключ аутентификации пользователя

 New-PSSession -HostName UserA@LinuxServer01:22 -KeyFilePath c:\\userAKey_rsa 

В этом примере показано, как создать PSSession с помощью Secure Shell (SSH). Он использует порт .
параметр, чтобы указать используемый порт, и параметр KeyFilePath , чтобы указать ключ RSA, используемый для
идентифицировать и аутентифицировать пользователя на удаленном компьютере.

Пример 14. Создание нескольких сеансов с использованием SSH

 $sshConnections = @(
    @{
          Имя хоста = 'WinServer1'
          Имя пользователя = 'домен\пользовательA'
          KeyFilePath = 'c:\users\UserA\id_rsa'
    }
    @{
        Имя хоста = 'UserB@LinuxServer5'
        KeyFilePath = 'c:\UserB\<путь>\id_rsa'
    }
)
New-PSSession -SSHConnection $sshConnections 

В этом примере показано, как создать несколько сеансов с помощью Secure Shell (SSH) и
Набор параметров SSHConnection . Параметр SSHConnection принимает массив хэш-таблиц, которые
содержать информацию о соединении для каждого сеанса. Обратите внимание, что в этом примере требуется, чтобы цель
на удаленных компьютерах настроен SSH для поддержки аутентификации пользователей на основе ключей.

Пример 15. Создание нового сеанса с использованием параметров SSH

 $options = @{
    Порт=22
    Пользователь = 'Пользователь Б'
    Хост = 'LinuxServer5'
}
New-PSSession -KeyFilePath '/Users/UserB/id_rsa' -Options $options 

В этом примере показано, как создать новый сеанс на основе SSH на удаленной машине под управлением Linux с помощью SSH.
опции. Параметр Options принимает хеш-таблицу значений, которые передаются в качестве параметров в
базовая команда ssh установила соединение с удаленной системой.

Параметры

-AllowRedirection

-ApplicationName

-Authentication

-CertificateThumbprint

-ComputerName

-ConfigurationName

-ConnectingTimeout

-ConnectionUri

-ContainerId

-Credential

-EnableNetworkAccess

-HostName

-KeyFilePath

-Name

-Options

-Port

-RunAsAdministrator

-Session

-SessionOption

-SSHConnection

-SSHTransport

-Subsystem

-ThrottleLimit

-UserName

-UseSSL

-UseWindowsPowerShell

-VMId

-VMName

Входные данные

Строка

Вы можете передать строку этому командлету.

System.URI

Вы можете передать URI этому командлету.

PSSession

Вы можете передать объект сеанса этому командлету.

Выходы

PSSession

Примечания

PowerShell включает следующие псевдонимы для New-PSSession :

  • Все платформы:

    • нсн
  • Этот командлет использует инфраструктуру удаленного взаимодействия PowerShell. Чтобы использовать этот командлет, локальный
    компьютер и любые удаленные компьютеры должны быть настроены для удаленного взаимодействия PowerShell. Для большего
    информацию см. в разделе about_Remote_Requirements.

  • Чтобы создать PSSession на локальном компьютере, запустите PowerShell с параметром Запуск от имени
    опция администратора
    .

  • Когда вы закончите с PSSession , используйте командлет Remove-PSSession , чтобы удалить
    PSSession и освободить его ресурсы.

  • Наборы параметров HostName и SSHConnection были включены, начиная с PowerShell 6.0.
    Они были добавлены для обеспечения удаленного взаимодействия PowerShell на основе Secure Shell (SSH). И SSH, и
    PowerShell поддерживается на нескольких платформах (Windows, Linux, macOS) и удаленном взаимодействии PowerShell.
    будет работать на этих платформах, где установлены и настроены PowerShell и SSH. Это
    отдельно от предыдущего удаленного взаимодействия только для Windows, основанного на WinRM и многих других компонентах WinRM.
    специальные функции и ограничения не применяются. Например, квоты на основе WinRM, параметры сеанса,
    пользовательская конфигурация конечной точки и функции отключения/повторного подключения не поддерживаются. За
    дополнительные сведения о настройке удаленного взаимодействия PowerShell SSH см.
    Удаленное взаимодействие PowerShell через SSH.

Исполняемый файл ssh получает данные конфигурации из следующих источников в следующем порядке:

  1. параметры командной строки
  2. файл конфигурации пользователя (~/. ssh/config)
  3. общесистемный файл конфигурации (/etc/ssh/ssh_config)

Следующие параметры командлета сопоставляются с параметрами и параметрами ssh :

Параметр командлета параметр ssh эквивалент ssh -o опция
-Путь к ключевому файлу -i <Путь к ключевому файлу> -o IdentityFile=
-Имя пользователя -l <имя пользователя> -o Пользователь=<ИмяПользователя>
-Порт -p <Порт> -o Порт=<Порт>
-ИмяКомпьютера -Подсистема -s <имя_компьютера> <подсистема> -o Хост=<имя_компьютера>

Любые значения, явно переданные параметрами, имеют приоритет над значениями, переданными в параметрах
хеш-таблица. Дополнительные сведения о файлах ssh_config см.
ssh_config(5).

  • Коннект-PSSession
  • Disconnect-PSSession
  • Enter-PSSession
  • Выход-PSSession
  • Get-PSSession
  • Вызов команды
  • Прием-PSSession
  • Удалить-PSSession

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

Casper Manes on

Серверы Windows, удаленное управление и сценарии: что связывает все эти вещи воедино? PowerShell. Вы можете использовать PowerShell для управления как локальным, так и удаленным компьютером. Используя WinRM (удаленное управление Windows), вы можете настроить все свои серверы и рабочие станции для приема удаленных подключений PowerShell от авторизованных пользователей, чтобы ими можно было управлять удаленно из командной строки вручную или с помощью сценария. Это значительно расширяет возможности PowerShell и позволяет отказаться от сценариев WMI для управления системами.

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

Включение удаленного управления

Если вы хотите включить удаленное управление отдельным сервером:

  1. Откройте административную подсказку PowerShell
  2. Выполните следующую команду
    Enable-PSRemoting –Force [enter]

запустите службу WinRM, установите для нее тип запуска «Автоматически», создайте прослушиватель на всех сетевых адаптерах/ip.addrs для подключений удаленного управления и настройте брандмауэр Windows для приема этих подключений. Это «Easy Button» для удаленного управления.

Использование объекта групповой политики для упрощения этой задачи

Это достаточно просто для одного сервера, но вы, вероятно, не захотите для этого входить в систему на каждом сервере в домене. К счастью, вам это не нужно. Вы можете использовать объект групповой политики (GPO), чтобы сделать то же самое:

  1. Запустите консоль управления групповой политикой.
  2. Создайте новый объект групповой политики (или отредактируйте существующий объект групповой политики, если вы хотите добавить эти параметры к тому, что у вас уже есть. Только не редактируйте для этого политику домена по умолчанию).
  3. Найдите в дереве объект групповой политики, чтобы выбрать Конфигурация компьютера, Политики, Административные шаблоны, Компоненты Windows, Удаленное управление Windows (WinRM,) Служба WinRM.
  4. Как минимум, установите следующее:
    — Разрешить удаленное управление сервером через WinRM для Включено.
  5. В приведенном выше примере будут использоваться настройки по умолчанию, которые включают только аутентификацию Kerberos и Negotiate, а также прослушиватель TCP 5985. Вы также можете настроить:
    — Разрешить базовую аутентификацию на Включено (для базовой аутентификации через SSL)
    — Включите прослушиватель HTTP совместимости для включения

— Включите прослушиватель HTTPS совместимости для включения.

Подключение к удаленной системе

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

  1. Откройте административную подсказку PowerShell на своем ПК
  2. Введите следующую команду:
    Enter-PSSession –ComputerName host [-Credential username ]

Вот и все.

Вы даже можете использовать PowerShell для управления вашими Linux-компьютерами! Есть модуль PowerShell для управления Linux. На самом деле это модуль, который позволяет вам устанавливать SSH-подключения к любому слушателю SSH из сеанса PowerShell, но если вы пишете скрипт, который должен работать как с Windows, так и с Linux в одном скрипте, возможность использовать этот модуль для встраивания сеанса SSH в хост Linux и выполнения команд действительно крут! Проверьте это.