Geek School Научете как да използвате Remoting в PowerShell
Едно от най-добрите функции на PowerShell е възможността за отдалечено управление на сървърите. Дори ви позволява да управлявате няколко от тях едновременно.
Прочетете предишните статии от поредицата:
- Научете как да автоматизирате 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, но можете да имате и други хостинг приложения, ако желаете) след това изпълнява командата и подава резултатите обратно през „слушателя“ в мрежата и обратно на вашата машина.
Покажи ми как
Първото нещо, което трябва да направите, е да разрешите отдалечаване на машината, с която искате да се свържете. Това може да стане, като се изпълни следното:
Активиране-PSRemoting
След това ще трябва да отговорите с "да" на всички подкани. Когато стартирате Enable-PSRemoting, на компютъра се правят няколко промени:
- Стартира се услугата WinRM.
- Услугата WinRM преминава от Ръчен режим на стартиране към Автоматичен.
- Той създава HTTP слушател, който е свързан с всички ваши мрежови карти.
- Също така създава изключение за входяща защитна стена за протокола WS-MAN.
- Създават се някои конфигурации на сесията по подразбиране
Ако работите с Windows 7 и местоположението на вашата мрежова карта е настроено на Public, активирането на PowerShell Remoting няма да бъде успешно. За да го поправите, просто преминете към домашното или работното мрежово местоположение. Друга възможност е да пропуснете проверката на мрежата, като използвате следното:
Enable-PSRemoting -SkipNetworkProfileCheck
Въпреки това ви препоръчваме по-скоро да промените местоположението си в мрежата.
Има два начина за свързване към друга машина, използвайки PowerShell. Има един от един метод, който е много подобен на използването на SSH, и след това има един към много метод.
Използване на PowerShell сесия
Първият начин за свързване към отдалечена машина с PowerShell използва нещо, наречено PowerShell Session. Просто поставете сесия, която ви позволява да изпълнявате команди на отдалечената машина по интерактивен начин много по същия начин, както бихте направили и на собствената си машина. За да отворите сесия, просто въведете следното:
Въведете-PSSession-Компютърно име „Darlah“
Съобщението ще получи префикс, който означава машината, срещу която стартирате cmdlet.
Оттук можете наистина да третирате съобщението, като че ли седите на отдалечената машина. Например, ако искате да видите всички файлове на C: \ t
Get-ChildItem -Path C: \ t
Ако идвате от Linux фон, можете да мислите за използване на този метод за отдалечаване като алтернатива на PowerShell към SSH.
Използване на Invoke-Command
Вторият начин да използвате PowerShell на отдалечена машина е да използвате Invoke-Command. Предимството от използването на Invoke-Command идва от факта, че можете да изпълните една и съща команда на няколко машини едновременно. Както можете да си представите, това е особено полезно, когато искате да направите нещо като събиране на журнали от събития от вашите сървъри. Invoke-Command следва следния синтаксис:
Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Приложение за Get-EventLog -Newest 2
Тъй като командата се изпълнява паралелно на всички машини, ще ви трябва някакъв начин да видите от кой компютър даден резултат е дошъл. Можете да направите това, като погледнете собствеността на PSComputerName.
Когато използвате Invoke-Command, вече нямате обектите, които може да очаквате в тръбопровода. Виждате ли, за да може PowerShell да получи информацията от отдалечената машина обратно към вашата машина, те се нуждаят от някакъв начин за представяне на обектите, които командата, която сте пуснали на изходите на отдалечената машина. Тези дни изглежда, че избраният начин за представяне на йерархична структура на данните е да се използва XML, което означава, че когато издавате команда, използвайки Invoke-Command, резултатите първо се сериализират в XML, преди да се изпратят обратно на вашата машина. Щом се върнат на вашата машина, те се десериализират обратно в обект; Гота тук е, че когато те са десериализирани, всички методи, с изключение на метода ToString (), че обектът е бил отстранен от него.
Забележка: Има някои изключения от това правило, например повечето примитивни типове като числа могат да бъдат десериализирани с включените му методи. Има и процес наречен Рехидратация, където някои методи могат да бъдат добавени обратно към десериализирани обекти. Така че просто бъдете внимателни и помнете, че Get-Member е ваш приятел.
Домашна работа
- Прочетете Тайните на PowerShell Remoting ebook от Дон Джоунс.