Не забравяйте да прочетете предишните статии в серията:
- Научете как да автоматизирате Windows с PowerShell
- Научете как да използвате Cmdlets в PowerShell
- Учене как да използвате обекти в PowerShell
- Форматиране на обучение, филтриране и сравнение в PowerShell
И останете настроени за останалата част от серията през цялата седмица.
Какво е Remoting?
Груповото управление на сървърите ви може да е досадно и ако сте се наложили да промените конфигурацията на IIS на 50 уеб сървъри преди, ще разберете какво имам предвид. Това са видовете ситуации, при които PowerShell Remoting и езиковите скриптови способности могат да дойдат на помощ. Използвайки HTTP или по-защитения HTTPS, PowerShell Remoting ви позволява да изпращате команди към отдалечена машина във вашата мрежа. След това машината изпълнява командите и ви изпраща изхода, който на свой ред се показва на екрана ви.
Да се технически
В основата на PowerShell Remoting се крие една услуга на Windows, отдалеченото управление на Windows или услугата WinRM, както стана известно. С помощта на WinRM можете да настроите една или повече конфигурации на сесии (известни също като крайни точки), които в основата си са файлове, съдържащи информация за опита, който искате да предоставите на лицето, свързващо се с вашия отдалечен потребителски модел PowerShell. По-конкретно, можете да използвате конфигурационни файлове на сесиите, за да определите кой може и кой не може да се свърже с инстанцията, какви команди и скриптове могат да изпълняват, както и какъв контекст на сигурността сесия трябва да се изпълнява. С помощта на услугата WinRM сте създали и "слушатели", които слушат за входящи заявки за PowerShell. Тези "слушатели" могат да бъдат HTTP или HTTPS и могат да бъдат обвързани с един IP адрес на вашата машина. Когато отваряте PowerShell връзка към друго устройство (технически това се прави с протокола WS-MAN, който се основава на HTTP), връзката се свързва с един от тези "слушатели". След това "слушателите" отговарят за изпращането на трафика към приложението, свързано с подходящия конфигурационен файл на сесията; (обикновено PowerShell, но можете да имате и други хостинг приложения, ако искате), след това изпълнява командата и подава резултатите обратно през "слушателя" в мрежата и обратно на вашата машина.
Покажи ми как
Първото нещо, което трябва да направите, е да активирате пренасочването към машината, с която искате да се свържете. Това може да стане, като изпълните следното:
Enable-PSRemoting
- Услугата WinRM стартира.
- Услугата WinRM се променя от ръчен режим на стартиране до автоматичен.
- Той създава HTTP слушател, който е свързан с всичките ви мрежови карти.
- Той също така създава изключение за входящата защитна стена за протокола WS-MAN.
- Създават се някои конфигурации на сесия по подразбиране
Ако работите с Windows 7 и местоположението на вашата мрежова карта е настроено на Public, активирането на PowerShell Remoting ще се провали. За да го коригирате, трябва само да преминете към местоположението на мрежата Начало или Работа. Друга възможност е да пропуснете проверката на мрежата, като използвате следното:
Enable-PSRemoting –SkipNetworkProfileCheck
Има два начина за свързване с друга машина, използвайки PowerShell. Има един към един метод, който е много подобен на използването на SSH, а след това има един от многото методи.
Използване на сесия PowerShell
Първият начин за свързване към отдалечена машина чрез PowerShell използва нещо, наречено PowerShell Session. Просто поставете сесия ви позволява да стартирате команди на отдалечената машина по интерактивен начин, много по същия начин, колкото бихте направили и на вашата собствена машина. За да отворите сесия, трябва само да въведете следното:
Enter-PSSession –ComputerName “Darlah”
Get-ChildItem –Path C:
Използване на Invoke-Command
Вторият начин да използвате PowerShell на отдалечена машина е чрез използване на Invoke-Command. Предимството да използвате Invoke-Command идва от факта, че можете да изпълнявате същата команда на няколко машини едновременно. Както можете да си представите, това е особено полезно, когато искате да направите нещо като събиране на регистрационни файлове от сървърите. Invoke-Command следва следния синтаксис:
Invoke-Command -ComputerName Darlah,localhost -ScriptBlock {Get-EventLog Application -Newest 2}
Забележка: Има някои изключения от това правило, например повечето примитивни типове като цели числа могат да бъдат десериализирани с включените методи. Съществува и процес, наречен Рехидратация, при който някои методи могат да бъдат добавени обратно към десериализирани обекти. Просто бъдете внимателни и запомнете, че Get-Member е ваш приятел.