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