Главная

Friday, 11 March 2016

Общение с Windows PowerShell 2.0 Remoting.

Windows PowerShell 2.0 Remoting

Инфраструктура PowerShell Remoting основана на WinRM версии 2.0, и поэтому наследует все преимущества этой технологии, такие как шифрование передаваемых данных, и возможность работать по стандартным портам HTTP/HTTPS. Но благодаря богатым возможностям языка Windows PowerShell, и его способностям работы с объектами, мы получаем еще большие возможности.

В системы Windows 7 и Windows Server 2008R2  WinRM встроен изначально, как и PowerShell 2.0. Для Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 все необходимые компоненты можно получить в виде пакета называемого Windows Management Framework.

Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать (запустить), на управляющем, и управляемых компьютерах. Я пока рассматриваю случай когда у вас все получится с первого раза. Бывают разные случаи). Итак сделать активизацию WinRM относительно просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting: 

>Enable-PSRemoting 


Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrm quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно. 

Если любите все контролировать сами тогда ручками набираем:
>winrm quickconfig


Получаете две строчки что все ок.  После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):

>Invoke-Command -ComputerName МАХ7  -ScriptBlock {netsh interface dump > c:\ipconfig.txt} 

или

>Invoke-Command -ComputerName МАХ7 –Сredential MAX7\admin  -ScriptBlock {Get-Date} 

где ключ Сredential MAX7\admin задает имя удаленного администратора на хосте MAX7 в том случае если вы работаете под другим локальным администратором.


Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.

>$Command = {(get-item c:\Windows\explorer.exe).VersionInfo.FileVersion} 
>Invoke-Command -ComputerName MrFirst, ServerODB, ServerBackup -ScriptBlock $Command 

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

Впрочем возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.

Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. 

Troubleshooting

Это все хорошо. Но вот чаще надо подкручивать для WinRM некоторые настройки сети или безопасности. 

Начинаем со смены типа сетевого подключения  с «Общий» на «Частное». В качестве подопытного выступает Windows7.

Пуск, Выполнить, далее вводим secpol.msc. Далее открывается окно политик, там выбираем название слева политики сетей. И там выбираем название сетевое расположение и ставим галочки в принадлежности сети ЛИЧНОЕ, а пониже в окошке «ПОЛЬЗОВАТЕЛЬ МОЖЕТ ИЗМЕНИТЬ РАСПОЛОЖЕНИЕ СЕТИ». Далее название «Идентификация сетей»,  на этом названии щёлкаем 2-а раза мышкой  и ставим «ЛИЧНОЕ».  Далее  чуть ниже Название в этом списке Все сети - Жмём 2-а раза на название и там открываются вкладки 1 ИМЯ СЕТИ -- ставим галочку пользователь может изменить имя. В этом-же окошке чуть пониже Сетевое расположение -Пользователь может изменить расположение. И еще чуть пониже значок сети - Пользователь может изменить значок.

Много текста? Проверяйте себя по скриншотам. 







Все равно не работает? Тогда добавляем  в список доверенных хостов IP-адрес своего ПК или все ПК звездочкой:

>set-item wsman:\localhost\Client\TrustedHosts -value *

и проверяем что добавилось:

>get-item wsman:\localhost\Client\TrustedHosts


По прежнему проблемы с подключением? 
Тогда вызываем справку 
>Get-Help about_Remote_Troubleshooting
и внимательно читаем ее. И проверяем свои настройки.)


Что еще могу посоветовать в помощь?

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

Или вот здесь уверенный пост еще одного автора:

Есть также хорошая англоязычная книга в сети «Secrets of PowerShell Remoting» авторов Don Jones and Dr. Tobias Weltner. Ссылка на книгу не прямая http://PowerShellBooks.com, пробуйте ее найти сами.

Успехов.






No comments:

Post a Comment

А что вы думаете по этому поводу?