Как через powershell подключиться к удаленному пк
Перейти к содержимому

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

  • автор:

Как с помощью powershell подключиться к другому компьютеру?

Как с помощью powershell подключиться к другому компьютеру в локальной сети используя имя пользователя и пароль?
И если можно для знающих напишите команду как с помощью wmi удалить шару.

  • Вопрос задан более трёх лет назад
  • 2168 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 3

sergueik

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

Одна команда Windows PowerShell позволяет запускать команды на одном или сотнях компьютеров. Windows PowerShell поддерживает удаленные вычисления с помощью различных технологий, включая WMI, RPC и WS-Management.

PowerShell поддерживает удаленное взаимодействие WMI, WS-Management и SSH. В PowerShell 7 и более поздних версиях RPC поддерживается только в Windows.

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

  • Удаленное взаимодействие через SSH в PowerShell
  • Удаленное взаимодействие через WSMan в PowerShell

Удаленное взаимодействие с Windows PowerShell без настройки

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

В эти командлеты входят следующие:

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

Get-Command | Where-Object

Удаленное взаимодействие Windows PowerShell

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

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

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

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

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

Enter-PSSession Server01 

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

Чтобы завершить интерактивный сеанс, введите:

Exit-PSSession 

Дополнительные сведения о Enter-PSSession командлетах см Exit-PSSession . в следующих статье:

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

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

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock

Выходные данные будут возвращены на ваш компьютер.

LCID Name DisplayName PSComputerName ---- ---- ----------- -------------- 1033 en-US English (United States) server01.corp.fabrikam.com 1033 en-US English (United States) server02.corp.fabrikam.com 

Запуск сценария

Чтобы запустить скрипт на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета Invoke-Command . Сценарий должен быть включен или доступен для локального компьютера. Результаты будут возвращены на локальный компьютер.

Например, следующая команда выполняет DiskCollect.ps1 скрипт на удаленных компьютерах, Server01 и Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1 

Установка постоянного подключения

Используйте командлет New-PSSession для создания постоянного сеанса на удаленном компьютере. В следующем примере создаются удаленные сеансы на удаленных компьютерах Server01 и Server02. Объекты сеанса хранятся в переменной $s .

$s = New-PSSession -ComputerName Server01, Server02 

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

Например, следующая команда выполняет Get-HotFix команду в сеансах переменной $s и сохраняет результаты в переменной $h . Переменная $h создается в каждом сеансе из $s , но она не существует в локальном сеансе.

Invoke-Command -Session $s

Теперь вы можете использовать данные в переменной $h с другими командами в том же сеансе. Результаты отобразятся на локальном компьютере. Например:

Invoke-Command -Session $s > 

Расширенная служба удаленного взаимодействия

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

  • Настройка и создание удаленных сеансов с локальных и удаленных окончаний
  • Создание настраиваемых и ограниченных сеансов
  • Импорт команд из удаленного сеанса, который фактически выполняется неявно на удаленном сеансе.
  • Настройка безопасности удаленного сеанса

PowerShell в Windows включает поставщик WSMan. Поставщик создает диск WSMAN: , который позволяет перемещаться по иерархии параметров конфигурации на локальном и удаленном компьютерах.

См. дополнительные сведения о поставщике WSMan и командлетах WS-Management или введите команду Get-Help wsman в консоли Windows PowerShell.

Дополнительные сведения см. в разделе:

  • Часто задаваемые вопросы о удаленном взаимодействии PowerShell
  • Register-PSSessionConfiguration
  • Import-PSSession

Справку по ошибкам службы удаленного взаимодействия см. в статье about_Remote_Troubleshooting.

См. также

  • about_Remote
  • about_Remote_Requirements
  • about_Remote_Troubleshooting
  • about_PSSessions
  • about_WS-Management_Cmdlets
  • Invoke-Command
  • Import-PSSession
  • New-PSSession
  • Register-PSSessionConfiguration
  • Поставщик WSMan

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

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

Глава 8. Удаленное взаимодействие PowerShell

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

Как показано в следующем примере, Get-Command можно использовать с параметром ParameterName, чтобы определить, какие команды имеют параметр ComputerName.

Get-Command -ParameterName ComputerName 
CommandType Name Version Source ----------- ---- ------- ------ Cmdlet Add-Computer 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Clear-EventLog 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Connect-PSSession 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Enter-PSSession 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Get-EventLog 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Get-HotFix 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Get-Process 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Get-PSSession 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Get-Service 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Get-WmiObject 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Invoke-Command 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Invoke-WmiMethod 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Limit-EventLog 3.1.0.0 Microsoft.PowerShell.Management Cmdlet New-EventLog 3.1.0.0 Microsoft.PowerShell.Management Cmdlet New-PSSession 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Receive-Job 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Receive-PSSession 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Register-WmiEvent 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Remove-Computer 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Remove-EventLog 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Remove-PSSession 3.0.0.0 Microsoft.PowerShell.Core Cmdlet Remove-WmiObject 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Rename-Computer 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Restart-Computer 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Send-MailMessage 3.1.0.0 Microsoft.PowerShell.Utility Cmdlet Set-Service 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Set-WmiInstance 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Show-EventLog 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Stop-Computer 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Test-Connection 3.1.0.0 Microsoft.PowerShell.Management Cmdlet Write-EventLog 3.1.0.0 Microsoft.PowerShell.Management 

Параметр ComputerName есть у команд Get-Process и Get-Hotfix . Следует отметить, что для корпорации Майкрософт это не то долгосрочное направление, которого следует придерживаться для выполнения команд на удаленных компьютерах. Даже если вы нашли команду с параметром ComputerName, скорее всего, вам потребуется указать альтернативные учетные данные и у команды не будет параметра Credential. Если вы решили запустить PowerShell из учетной записи с повышенными привилегиями, брандмауэр между вами и удаленным компьютером может заблокировать запрос.

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

Enable-PSRemoting 
WinRM has been updated to receive requests. WinRM service type changed successfully. WinRM service started. WinRM has been updated for remote management. WinRM firewall exception enabled. 

Удаленное взаимодействие «один к одному»

Если вы хотите, чтобы удаленный сеанс был интерактивным, то в этом случае подойдет удаленное взаимодействие «один к одному». Этот тип удаленного взаимодействия предоставляется с помощью командлета Enter-PSSession .

В последней главе учетные данные администратора домена были сохранены в переменной с именем $Cred . Если вы еще не сделали этого, сохраните учетные данные администратора домена в переменной $Cred .

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

$Cred = Get-Credential 

Создайте сеанс удаленного взаимодействия PowerShell «один к одному» с контроллером домена DC01.

Enter-PSSession -ComputerName dc01 -Credential $Cred 
[dc01]: PS C:\Users\Administrator\Documents> 

Обратите внимание, что в предыдущем примере перед запросом PowerShell стоит [dc01] . Это означает, что вы находитесь в интерактивном сеансе PowerShell с удаленным компьютером dc01. Все запускаемые команды выполняются на компьютере dc01, а не на локальном компьютере. Кроме того, помните, что у вас есть доступ только к командам PowerShell, которые существуют на удаленном, а не на локальном компьютере. Иными словами, если на компьютере установлены дополнительные модули, они недоступны на удаленном компьютере.

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

[dc01]: Get-Process | Get-Member 
 TypeName: System.Diagnostics.Process Name MemberType Definition ---- ---------- ---------- Handles AliasProperty Handles = Handlecount Name AliasProperty Name = ProcessName NPM AliasProperty NPM = NonpagedSystemMemorySize64 PM AliasProperty PM = PagedMemorySize64 SI AliasProperty SI = SessionId VM AliasProperty VM = VirtualMemorySize64 WS AliasProperty WS = WorkingSet64 Disposed Event System.EventHandler Disposed(System.Object, . ErrorDataReceived Event System.Diagnostics.DataReceivedEventHandler . Exited Event System.EventHandler Exited(System.Object, Sy. OutputDataReceived Event System.Diagnostics.DataReceivedEventHandler . BeginErrorReadLine Method void BeginErrorReadLine() BeginOutputReadLine Method void BeginOutputReadLine() CancelErrorRead Method void CancelErrorRead() CancelOutputRead Method void CancelOutputRead() Close Method void Close() CloseMainWindow Method bool CloseMainWindow() CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(. Dispose Method void Dispose(), void IDisposable.Dispose() Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetType Method type GetType() InitializeLifetimeService Method System.Object InitializeLifetimeService() Kill Method void Kill() Refresh Method void Refresh() Start Method bool Start() ToString Method string ToString() WaitForExit Method bool WaitForExit(int milliseconds), void Wai. WaitForInputIdle Method bool WaitForInputIdle(int milliseconds), boo. __NounName NoteProperty string __NounName=Process BasePriority Property int BasePriority Container Property System.ComponentModel.IContainer Container ExitCode Property int ExitCode ExitTime Property datetime ExitTime Handle Property System.IntPtr Handle HandleCount Property int HandleCount HasExited Property bool HasExited Id Property int Id MachineName Property string MachineName MainModule Property System.Diagnostics.ProcessModule MainModule . MainWindowHandle Property System.IntPtr MainWindowHandle MainWindowTitle Property string MainWindowTitle MaxWorkingSet Property System.IntPtr MaxWorkingSet MinWorkingSet Property System.IntPtr MinWorkingSet Modules Property System.Diagnostics.ProcessModuleCollection M. NonpagedSystemMemorySize Property int NonpagedSystemMemorySize NonpagedSystemMemorySize64 Property long NonpagedSystemMemorySize64 PagedMemorySize Property int PagedMemorySize PagedMemorySize64 Property long PagedMemorySize64 PagedSystemMemorySize Property int PagedSystemMemorySize PagedSystemMemorySize64 Property long PagedSystemMemorySize64 PeakPagedMemorySize Property int PeakPagedMemorySize PeakPagedMemorySize64 Property long PeakPagedMemorySize64 PeakVirtualMemorySize Property int PeakVirtualMemorySize PeakVirtualMemorySize64 Property long PeakVirtualMemorySize64 PeakWorkingSet Property int PeakWorkingSet PeakWorkingSet64 Property long PeakWorkingSet64 PriorityBoostEnabled Property bool PriorityBoostEnabled PriorityClass Property System.Diagnostics.ProcessPriorityClass Prio. PrivateMemorySize Property int PrivateMemorySize PrivateMemorySize64 Property long PrivateMemorySize64 PrivilegedProcessorTime Property timespan PrivilegedProcessorTime ProcessName Property string ProcessName ProcessorAffinity Property System.IntPtr ProcessorAffinity Responding Property bool Responding SafeHandle Property Microsoft.Win32.SafeHandles.SafeProcessHandl. SessionId Property int SessionId Site Property System.ComponentModel.ISite Site StandardError Property System.IO.StreamReader StandardError StandardInput Property System.IO.StreamWriter StandardInput StandardOutput Property System.IO.StreamReader StandardOutput StartInfo Property System.Diagnostics.ProcessStartInfo StartInf. StartTime Property datetime StartTime SynchronizingObject Property System.ComponentModel.ISynchronizeInvoke Syn. Threads Property System.Diagnostics.ProcessThreadCollection T. TotalProcessorTime Property timespan TotalProcessorTime UserProcessorTime Property timespan UserProcessorTime VirtualMemorySize Property int VirtualMemorySize VirtualMemorySize64 Property long VirtualMemorySize64 WorkingSet Property int WorkingSet WorkingSet64 Property long WorkingSet64 PSConfiguration PropertySet PSConfiguration  

Завершив работу на удаленном компьютере, выйдите из сеанса удаленного взаимодействия "один к одному" с помощью командлета Exit-PSSession .

[dc01]: Exit-PSSession 

Удаленное взаимодействие "один ко многим"

Иногда может потребоваться выполнить задачу в интерактивном режиме на удаленном компьютере. Удаленное взаимодействие гораздо более эффективно при выполнении задачи на нескольких удаленных компьютерах одновременно. С помощью командлета Invoke-Command выполните команду на одном удаленном компьютере или нескольких одновременно.

Invoke-Command -ComputerName dc01, sql02, web01 -Credential $Cred 
Status Name DisplayName PSComputerName ------ ---- ----------- -------------- Running W32time Windows Time web01 Start. W32time Windows Time dc01 Running W32time Windows Time sql02 

В предыдущем примере на три сервера были отправлены запросы состояния службы времени Windows. Командлет Get-Service был помещен в блок сценария Invoke-Command . На самом деле сценарий Get-Service выполняется на удаленном компьютере и результаты возвращаются на локальный компьютер в виде десериализованных объектов.

Передача предыдущей команды в Get-Member подтверждает, что результаты действительно десериализованы.

Invoke-Command -ComputerName dc01, sql02, web01 -Credential $Cred | Get-Member 
 TypeName: Deserialized.System.ServiceProcess.ServiceController Name MemberType Definition ---- ---------- ---------- GetType Method type GetType() ToString Method string ToString(), string ToString(string format, Sys. Name NoteProperty string Name=W32time PSComputerName NoteProperty string PSComputerName=sql02 PSShowComputerName NoteProperty bool PSShowComputerName=True RequiredServices NoteProperty Deserialized.System.ServiceProcess.ServiceController[. RunspaceId NoteProperty guid RunspaceId=570313c4-ac84-4109-bf67-c6b33236af0a CanPauseAndContinue Property System.Boolean CanShutdown Property System.Boolean CanStop Property System.Boolean Container Property DependentServices Property Deserialized.System.ServiceProcess.ServiceController[. DisplayName Property System.String MachineName Property System.String ServiceHandle Property System.String ServiceName Property System.String ServicesDependedOn Property Deserialized.System.ServiceProcess.ServiceController[. ServiceType Property System.String Site Property StartType Property System.String Status Property System.String

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

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

Чтобы доказать это, далее я остановлю службу времени Windows на всех трех удаленных серверах с помощью метода Stop().

Invoke-Command -ComputerName dc01, sql02, web01 <(Get-Service -Name W32time).Stop()>-Credential $Cred Invoke-Command -ComputerName dc01, sql02, web01 -Credential $Cred 
Status Name DisplayName PSComputerName ------ ---- ----------- -------------- Stopped W32time Windows Time web01 Stopped W32time Windows Time dc01 Stopped W32time Windows Time sql02 

Как отмечалось в предыдущей главе, если для выполнения задачи существует командлет, рекомендуется использовать его, а не метод. В предыдущем сценарии вместо метода остановки советую выполнить командлет Stop-Service . Чтобы доказать свою точку зрения, я решил использовать метод Stop(), так как многие люди ошибочно полагают, что в рамках удаленного взаимодействия PowerShell вызывать методы невозможно. Их нельзя вызывать в возвращаемом объекте, потому что он десериализован, но можно вызывать в самом удаленном сеансе.

Сеансы PowerShell

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

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

Создайте сеанс PowerShell с каждым из трех компьютеров, с которыми мы работали в этой главе, — DC01, SQL02 и WEB01.

$Session = New-PSSession -ComputerName dc01, sql02, web01 -Credential $Cred 

С помощью переменной $Session запустите службу времени Windows с использованием метода и проверьте состояние службы.

Invoke-Command -Session $Session <(Get-Service -Name W32time).Start()>Invoke-Command -Session $Session
Status Name DisplayName PSComputerName ------ ---- ----------- -------------- Running W32time Windows Time web01 Start. W32time Windows Time dc01 Running W32time Windows Time sql02 

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

Завершив работу с сеансами, не забудьте удалить их.

Get-PSSession | Remove-PSSession 

Итоги

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

Отзыв

  1. Как включить удаленное взаимодействие PowerShell?
  2. Какая команда PowerShell используется для запуска интерактивного сеанса с удаленным компьютером?
  3. В чем преимущество использования сеанса удаленного взаимодействия PowerShell по сравнению с простым указанием имени компьютера с помощью каждой команды?
  4. Можно ли использовать сеанс удаленного взаимодействия PowerShell с сеансом удаленного взаимодействия "один к одному"?
  5. Чем отличается тип объектов, возвращаемых командлетами, от типа объектов, которые возвращаются при выполнении этих же командлетов на удаленных компьютерах с Invoke-Command ?

Рекомендуем прочесть

  • about_Remote
  • about_Remote_Output
  • about_Remote_Requirements
  • about_Remote_Troubleshooting
  • about_Remote_Variables
  • Часто задаваемые вопросы о удаленном взаимодействии PowerShell

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

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

Удаленное управление через Powershell

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

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

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

Enter-PSSession -ComputerName CL1

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

ssh CL1

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

Invoke-Command -ComputerName AD,CL1 -ScriptBlock

Где:
-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

Получим ошибку:
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 -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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *