Как удаленно установить время используя powershell. Powershell: использование командлета Invoke-Command. Запуск команд через фоновые сессии

На сегодняшний день PowerShell Remoting является основным инструментом удаленного управления операционными системами Windows. Поэтому, знать о его возможностях и использовать в своих повседневных задачах должен каждый системный администратор Windows. Для запуска команд на удаленных компьютерах с помощью PowerShell Remoting, можно использовать командлет Powershell Invoke-Command (псевдоним icm).

Функционал командлета Invoke-Command основан на протоколе Web Services for Management (WS-Management ) и службе Windows Remote Management (WinRM ), используемой для связи. Связь между компьютерами выполняется по протоколу HTTP (по умолчанию) или HTTPS. Весь трафик между двумя компьютерами зашифрован на уровне протокола. Поддерживаются несколько методов аутентификации, включая NTLM и Kerberos. Возможность создания удаленных сеансов появилась в версии Powershell 2.0.

Для удаленного подключения к компьютеру через PowerShell Remoting на нем необходимо выполнить ряд настроек:

  1. Нужно разрешить удаленные подключения: Enable-PSRemoting -Force
  2. Запустить службу WinRM: Start-Service WinRM
  3. Создать правило Брандмауэра Windows, разрешающее входящие подключения по этому протоколу.

Компьютер, с которого планируется удаленно управлять другими компьютерами/серверами через PowerShell Remoting также нужно донастроить:

  1. Необходимо разрешить подключения к удаленным системам. Для предоставления доступа ко всем удаленным компьютерам, воспользуйтесь командой: Set-Item wsman:\localhost\client\trustedhosts * -Force
  2. Убедитесь, что файервол не блокирует исходящие подключения.

Теперь, чтобы выполнить команду на удаленном компьютере через Powershell Remoting (например, вы хотите перезапустить службу печати Spooler), вам нужно выполнить такую команду:

Invoke-Command -computername server1 -credential domain\user1 -scriptblock { Restart-Service spooler}

Эта команда выполняет команду Restart-Service spooler на удаленном компьютере с именем server1 . Параметр Credential используется для выполнения команды в контексте безопасности доменного пользователя domain\user1.

При указании имени пользователя, Windows PowerShell отобразит диалоговое окно, в котором нужно указать пароль учетной записи user1. Затем указанная в фигурных скобках команда выполняется на удаленном компьютере и возвращает результаты в консоль. После выполнения команды удаленный сеанс PoSh завершается.

Чтобы запустить задачу в фоновом режиме, вы можете указать параметр -AsJob .

При запуске команды в фоновом режиме PowerShell не возвращает ее результаты. Чтобы получить их, нужно использовать командлет Receive-Job.

Get-job –id 3 |Receive-Job

Для запуска не одной команды, а целого скрипта PowerShell, командлет Invoke-Command имеет специальный аргумент -FilePath, который нужно использовать вместо -ScriptBlock для указания пути к файлу скрипта. Например, я создал небольшой скрипт PoSh, который отображает список остановленных служб. Выполним данный скрипт на удаленном компьютере:

Invoke-Command -computername server1 -FilePath .\list.ps1

Тут важно отметить, что вам не нужно самостоятельно копировать файл скрипта ps1 на удаленный компьютер. Результаты выполнения скрипта выводятся в консоль.

Достаточно часто возникает необходимость одновременно выполнять одну и ту же команду/скрипт на нескольких компьютерах. С помощью Invoke-Command это реализуется довольно просто. Можно перечислить имена компьютеров, разделив из запятыми в аргументе -ComputerName .

Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName server1,server2,server3

Либо поместить из в массив:

$srv_list = @(″server4″,″server5″,″server6″)
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName $servers

Или загрузить из тестового файла:

Invoke-Command -ScriptBlock {Restart-Service spooler} –ComputerName (Get-Content .\servers_list.txt)

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

Примечание . У командлета Invoke-Command есть параметр ThrottleLimit который позволяет установить максимальное количество компьютером, на которых одновременно может выполнятся одна и та же команда. По умолчанию число компьютером ограничено цифрой 32 . При необходимости это число можно увеличить, но имейте в виду, что увеличение этого параметра увеличивает нагрузку на процессор и память вашего компьютера, поэтому эту операцию нужно выполнять с осторожностью.

Если установлен , становится возможным одновременно запускать команды на множестве компьютеров, выбираемых из AD с использованием конвейеров:

Get-ADComputer -Filter * -properties name | select {Name="computername";Expression={$_."name"}}| Invoke-Command -ScriptBlock {hostname}

Каждый раз при запуске Invoke-Command, создается новый сеанс, который потребляет некоторое время процессора и ресурсы. Чтобы избежать лишнего расходования ресурсов, можно использовать один сеанс для выполнения всех команд. Например, создадим новый сеанс sess1 с компьютером computer1 и присвоим его переменной $session, а затем выполним свою задачу в этом сеансе:

$session = New-PSSession -ComputerName computer1 -Name sess1
Invoke-Command -ScriptBlock { Restart-Service spooler } -Session $session

Данный Сеанс будет активен, пока вы не закроете консоль PowerShell. Вы также можете закрыть сеанс (Disconnect-PSSession) или удалить его (Remove-PSSession).

Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.

Введение

Я часто работаю с командами на удаленных системах через PowerShell как во время пентестов, так и при решении повседневных задач. Запуска удаленных команд происходит через протокол WinRM (Windows Remote Management), который, насколько мне известно, поддерживается в Windows Vista SP 1, Windows 7, Windows Server 2008 и Windows Server 2012.

Первоначальные настройки

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

1. Запустите консоль PowerShell от имени администратора и выполните следующую команду:

Enable-PSRemoting -force

Команда выше разрешает запуск команд на удаленных системах. Если у вас возникли проблемы, используйте команды ниже:

2. Убедитесь в том, что служба WinRM запускается автоматически.

# Устанавливаем нужный режим

Set-Service WinRM -StartMode Automatic

# Проверяем, что служба запущена

Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}

3. Устанавливаем у всех хостов статус «достоверный» (можно сделать позже).

# Доверяем всем хостам

Set-Item WSMan:localhost\client\trustedhosts -value *

# Проверяем настройку достоверных хостов

Get-Item WSMan:\localhost\Client\TrustedHosts

Примеры работы с удаленными системами

Запуск одиночной команды на удаленной системе

Команда "Invoke-Command" предназначена для запуска команд на удаленных системах. Можно работать от имени текущего пользователя, либо использовать стороннюю учетную запись, если вы работаете в системе, которая не является частью домена:

Invoke-Command –ComputerName MyServer1 -ScriptBlock {Hostname}
Invoke-Command –ComputerName MyServer1 -Credentials demo\serveradmin -ScriptBlock {Hostname}

Если установлен модуль для работы с ActiveDirectory, становится возможным запуск команд на множестве систем при помощи каналов (pipeline):

Get-ADComputer -Filter * -properties name | select @{Name="computername";Expression={$_."name"}} |
Invoke-Command -ScriptBlock {hostname}

Иногда на удаленной системе требуется запустить скрипт, хранящийся локально:

Invoke-Command -ComputerName MyServer1 -FilePath C:\pentest\Invoke-Mimikatz.ps1
Invoke-Command -ComputerName MyServer1 -FilePath C:\pentest\Invoke-Mimikatz.ps1 -Credentials demo\serveradmin

Если вы генерируете команды или функции динамически, которые затем передаются на удаленную систему можно использовать связку команд invoke-expression и invoke-command:

$MyCommand = "hostname"
$MyFunction = "function evil {write-host `"Getting evil...`";iex -command $MyCommand};evil"
invoke-command -ComputerName MyServer1 -Credentials demo\serveradmin -ScriptBlock
{Invoke-Expression -Command "$args"} -ArgumentList $MyFunction

Организация интерактивной консоли на удаленной системе

Организовать интерактивную консоль в PowerShell на удаленной системе можно при помощи команды "Enter-PsSession" (немного похожа на SSH). Команда "Enter-PsSession" также запускается либо от имени текущего пользователя, либо при помощи альтернативной учетной записи:

Enter-PsSession –ComputerName server1.domain.com
Enter-PsSession –ComputerName server1.domain.com –Credentials domain\serveradmin

Закрытие сессии выполняется при помощи команды "Exit-PsSession":

Создание фоновых сессий

Еще одна полезная возможность позволяет создавать фоновые сессии (команда "New-PsSession"). Фоновые сессии могут оказаться полезны при запуске множества команд во множестве систем. Как и предыдущие команды, команда "New-PsSession" запускается от имени текущего пользователя, либо при помощи альтернативной учетной записи:

New-PSSession -ComputerName server1.domain.com
New-PSSession –ComputerName server1.domain.com –Credentials domain\serveradmin

Если установлен модуль для работы с ActiveDirectory, становится возможным единовременное создание фоновых сессий для множества систем (этот трюк можно выполнить различными способами). Ниже показан пример создания фоновых сессий для всех систем, входящих в домен. В примере создание сессий происходит в системе, не входящей в домен, при помощи альтернативной учетной записи домена.

New-PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root "
" -Server a.b.c.d -credential domain\user
cd RemoteADS:
Get-ADComputer -Filter * -Properties name | select @{Name="ComputerName";Expression={$_."name"}}
| New-PSSession

Вывод перечня фоновых сессий

Как только создано несколько фоновых сессий, можно просмотреть их перечень при помощи команды "Get-PsSession".

Взаимодействие с фоновыми сессиями

Первое время у меня было ощущение схожее с тем, как я работал с сессиями в MetaSploit. Однако фоновые сессии в PowerShell чуть более стабильны. Ниже показан пример взаимодействия при помощи идентификатора сессии:

Enter-PsSession –id 3

Для выхода из сессии используйте команду "Exit-PsSession". Сессия перейдет обратно в фоновый режим.

Запуск команд через фоновые сессии

Если вы хотите выполнить команду во всех активных сессиях, используйте связку команд "Invoke-Command" и "Get-PsSession".

Invoke-Command -Session (Get-PSSession) -ScriptBlock {Hostname}

Удаление фоновых сессий

Для удаления всех активных сессий используйте команду "Disconnect-PsSession"

Get-PSSession | Disconnect-PSSession

Заключение

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

  • Для запуска одиночной команды на удаленной системе используйте "Invoke-Command".
  • Для взаимодействия с одиночной системой используйте "Enter-PSSession".
  • Если вы хотите запускать множество команд во множестве систем, используйте фоновые сессии.

Надеюсь, эта статья оказалась для вас полезной.

Не так давно пришлось потратить немного времени на настройку удаленного доступа через Powershell. Мне такой подход кажется очень хорошей альтернативной Remote Desktop Services в ряде случаев (перезапустить сервис на удаленном хостинге VDS, сделать резервные копии, посмотреть состояние системы и т.д.).

Возможность создания удаленных сеансов Powershell появилась в версии 2. Для этого используется командлет Enter-PSSession / Invoke-Command . Однако, перед их использованием следует подготовить среду.

Что делаем на сервере :

Шаг 1: Открываем консоль Powershell и разрешаем удаленные сессии командлетом Enable-PSRemoting с ключом Force .

Enable-PSRemoting -Force

Шаг 2: Убеждаемся в том, что служба WinRM запущена.

Start-Service WinRM

Шаг 3: Настраиваем правила в брэндмауэре, чтобы входящие подключения были возможны.

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

Шаг 1: Разрешить подключение к удаленным узлам. Для доступа к любым узлам можно воспользоваться следующей конструкцией:

Set-Item wsman:\localhost\client\trustedhosts * -Force

Шаг 2: Убедиться, что брэндмауэр не блокирует исходящие соединения.

Теперь для подключения к удаленному узлу через Powershell можно осуществлять так:

Enter-PSSession 192.168.1.160 -Credential VMNAME\User

Значения 192.168.1.160 и VMNAME\User необходимо заменить адресом удаленного узла и именем пользователя Windows на сервере.

Теперь удаленный доступ через Powershell работает. Однако, есть еще один ньюанс. Возможно, кто-либо из вас пользуется профилями в Powershell . Профили – это специальные скрипты, которые запускаются при запуске самой консоли. Здесь, например, можно определить все необходимые алиасы и выполнить предварительные действия.

Проблема заключается в том, что профили не запускаются при использовании удаленных сеансов. Решить это можно путем использования разных конфигураций подключения. Для этого первоначально необходимо зарегистрировать конфигурацию на удаленном сервере. Сделать это можно путем выполнения коммандлета Register-PSSessionConfiguration . При этом каждой конфигурации присваивается имя. Для каждой конфигурации можно задать путь до скрипта, который будет выполняться при старте сессии.

Register-PSSessionConfiguration -name Config1 -startupScript c:\scripts\Startup.ps1

После этого, при подключении к удаленному узлу, при использовании коммандлета Enter-PSSession следует указать имя конфигурации.

Enter-PSSession 192.168.1.160 -ConfigurationName Config1 -Credential VMNAME\User

Теперь можно не тратить ресурсы сервера на создание сессии подключения через Remote Desktop Services и удаленно управлять сервером, используя Powershell.

04.03.2011 Билл Стюарт

В версии Windows PowerShell 2.0 реализован альтернативный механизм подключения к удаленным компьютерам, именуемый remoting (удаленное взаимодействие). Этот механизм использует средства службы дистанционного управления Windows (Windows Remote Management, WinRM). Он обеспечивает подключение к удаленному компьютеру, а также запуск команд, выполняемых на этом удаленном компьютере

Разработка оболочки PowerShell 1.0 стала настоящим прорывом в развитии средств управления и автоматизации Windows XP, а также более поздних версий платформы ОС Windows. Базирующаяся на платформе. NET Framework технология PowerShell 1.0 включает в себя единообразную структуру команд (cmdlets), она наделена мощными встроенными средствами форматирования выходных данных и обеспечивает значительное повышение доступности других технологий, и прежде всего - инструментария управления Windows (WMI). Однако, хотя некоторые составные команды PowerShell 1.0 и объекты. NET могут подключаться к удаленным компьютерам, эта функция реализуется дифференцированно, в зависимости от конкретного случая. Команды, поддерживающие удаленные соединения, имеют параметр -ComputerName; кроме того, при установлении соединений они используют либо вызовы удаленных процедур (RPC), либо модель DCOM.

Во многих ситуациях RPC и DCOM хорошо справляются с задачами управления, однако при выполнении процедур диагностики и при выявлении причин неполадок порой возникают проблемы. К примеру, команда Get-Service может считывать данные служб с удаленного компьютера с помощью параметра -ComputerName, однако эта команда не имеет параметра -Credential, и потому для ее выполнения следует зарегистрироваться с учетной записью, имеющей разрешение на доступ к удаленной системе.

Но уже в версии Windows PowerShell 2.0 реализован альтернативный механизм подключения к удаленным компьютерам, именуемый remoting (удаленное взаимодействие). Этот механизм использует средства службы дистанционного управления Windows (Windows Remote Management, WinRM). Он обеспечивает подключение к удаленному компьютеру, а также запуск команд, выполняемых на этом удаленном компьютере. Поясню сказанное на примере. Средства подключения к удаленному рабочему столу относятся к графическому интерфейсу пользователя так же, как удаленное взаимодействие к командной строке оболочки PowerShell. Когда вы запускаете составную команду с использованием механизма удаленного взаимодействия, команда фактически выполняется на удаленном компьютере, но полученные результаты вы можете видеть на локальной машине.

Где можно получить Windows PowerShell 2.0

Оболочка PowerShell 2.0 и служба WinRM входят в состав систем Windows 7 и Windows Server 2008 R2, так что, если вы используете эти операционные системы, нет необходимости устанавливать данные компоненты. Если же вы работаете с системами Windows Vista SP2, Windows XP SP3, Windows Server 2008 SP2 или Windows Server 2003 SP2, вам придется загрузить и установить пакет Windows Management Framework Core (support.microsoft.com/kb/968930).

Включение функции удаленного взаимодействия

Для того чтобы компьютер мог устанавливать соединения с удаленными системами, на которых установлена оболочка PowerShell, необходимо обеспечить следующие условия.

  1. Должна быть активирована служба WinRM.
  2. Должен быть установлен прослушиватель WinRM, который принимает соединения с одного или нескольких IP-адресов.
  3. Сетевой экран Windows должен быть сконфигурирован таким образом, чтобы появилась возможность установления соединений через WinRM.
  4. Должен быть включен и надлежащим образом сконфигурирован сеанс PowerShell.

Если компьютер не будет принимать соединения от оболочек PowerShell, установленных на удаленных компьютерах, выполнение указанных условий необязательно.

Чтобы пользователи могли как можно скорее приступить к работе, разработчики Microsoft PowerShell создали команду Enable-PSRemoting, обеспечивающую автоматическую настройку упомянутых компонентов. Эту настройку нужно выполнять не на машине, с которой вы будете осуществлять удаленное взаимодействие, а на компьютере, к которому вы будете обращаться дистанционно. Выполнять команду Enable-PSRemoting можно лишь в в том случае, если вы работаете с оболочкой PowerShell с правами администратора. Если вы работаете с машинами Windows Vista, Server 2008 и более поздних версий, правой кнопкой мыши щелкните на значке PowerShell и в раскрывшемся меню выберите пункт Run as administrator. Если вы запустите команду Enable-PSRemoting с параметром -Force, при ее выполнении система не будет обращаться к вам за разрешением на выполнение каждого этапа конфигурации. Чтобы получить более подробные сведения о составной команде Enable-PSRemoting, выполните команду

Get-Help Enable-PSRemoting

Выполнение одной команды на удаленном компьютере

Самый простой способ подключиться к среде PowerShell на удаленном компьютере - воспользоваться командой Enter-PSSession. По умолчанию эта команда выполняется с параметром -ComputerName, поэтому при ее вводе с клавиатуры данный параметр можно не указывать. К примеру, для установления соединения с удаленным компьютером с именем rigel надо ввести с клавиатуры

PS C:\> Enter-PSSession rigel

Обратите внимание: для полноты картины я включаю в текст приглашение. Вам же не нужно вводить приглашение как часть команды.

После того как вы введете дистанционный сеанс, синтаксис приглашения PowerShell изменится. Теперь оно будет включать в себя заключенное в квадратные скобки имя удаленного компьютера; это будет означать, что вы установили соединение с удаленным компьютером. В данном случае приглашение будет выглядеть так:

: PS C:\>

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

: PS C:\> Get-ChildItem C:\

команда Get-ChildItem будет выполнена на удаленной машине. Ее выходные данные будут содержать имена файлов и папок, хранимых в накопителе C удаленного компьютера. Чтобы завершить сеанс удаленного взаимодействия, воспользуйтесь командой Exit-PSSession

: PS C:\> Exit-PSSession

Выполнение блока сценария (Scriptblock) на удаленном компьютере

Удаленное взаимодействие с помощью PowerShell позволяет выполнять на удаленном компьютере блок сценария, или scriptblock (то есть блок кода PowerShell, заключенный в фигурные скобки). Для этого нужно воспользоваться командой Invoke-Command с параметром -ComputerName. К примеру, в команде, отображенной на экране 1, я использовал команду Invoke-Command, с тем чтобы выполнить Get-ChildItem на удаленном компьютере. Просматривая экран 1, обратите внимание на то, что для установления соединения с удаленным компьютером перед тем, как запустить блок сценария, я не использовал команду Enter-PSSession. Команды Enter-PSSession и Invoke-Command - это два различных метода удаленного взаимодействия.

Первым параметром команды Invoke-Command является параметр -ScriptBlock; он указывает на код, который вы собираетесь выполнить. На экране 1 я опустил имя параметра -ScriptBlock, поскольку указывать его необязательно. Параметр -ComputerName содержит имя удаленного компьютера. Как можно увидеть в выходных данных команды Get-ChildItem, среда PowerShell для удобства оператора даже указывает имя удаленного компьютера в столбце PSComputerName выходных данных.

Выполнение блока сценария на нескольких удаленных компьютерах

Блок сценария можно выполнять и на нескольких удаленных компьютерах. Это называется конфигурацией «один ко многим» или веерным развертыванием. На экране 1 параметр -ComputerName команды Invoke-Command содержит одно имя, однако в него можно включать и несколько имен компьютеров. Так, команда

PS C:\> Invoke-Command {Get-ChildItem env: co*} -Computer titan, rigel

обеспечивает выполнение команды Get-ChildItem на двух удаленных компьютерах. В тексте статьи данная команда разбита на несколько строк, однако в консоли PowerShell ее следует вводить одной строкой. То же касается и других команд, разделенных на несколько строк. Так же, как и на экране 1, столбец PSComputerName в выходных данных будет содержать имена компьютеров.

Выполнение блока сценария в фоновом режиме

Среда PowerShell 2.0 дает возможность выполнять фоновые задания, то есть оператор может запускать команду в фоновом режиме. Такая возможность полезна при запуске команд, выполнение которых требует много времени.

Чтобы запустить фоновое задание на локальном компьютере, можно воспользоваться командой Start-Job. Но надо сказать, что данная команда не имеет параметра -ComputerName, а это значит, что ее нельзя использовать для выполнения фонового задания на удаленной машине. Вместо этого вам нужно будет выполнить команду Invoke-Command с параметром -AsJob. Так, верхняя команда на экране 2 инициирует выполнение блока сценария в виде фонового задания на удаленном компьютере titan. После того как я ввел эту команду, на экране сразу же появилось приглашение: оболочка PowerShell отправила блок сценария для выполнения на удаленный компьютер и после этого вернула мне управление. В предупреждении говорится, что выполненная команда не уместилась в окне консоли и потому не была включена в выходные данные. Если бы окно консоли у меня было шире, средство форматирования оболочки PowerShell включило бы команду в перечень выходных данных. В столбцах Id и Name указывается задание (его идентификатор и понятное имя соответственно), а в столбце State указывается, в каком состоянии находится задание: выполняется, приостановлено или завершено. В столбце HasMoreData содержится информация, свидетельствующая о том, что извлечены все данные, касающиеся того или иного задания, или что задание содержит больший объем сведений, которые следует извлечь.

Чтобы установить, завершено ли выполнение фонового задания, вы можете выполнить команду Get-Job, как показывает вторая команда на экране 2. Если при этом вы не используете каких-либо параметров, Get-Job проверяет состояние всех заданий, запущенных в ходе текущего сеанса. Если у вас выполняется несколько заданий одновременно, можете использовать такие параметры, как -Id или -Name, для указания на то, какое именно задание вы хотите проверить. Когда выполнение фонового задания завершится, столбец State выходных данных будет иметь значение Completed.

Для считывания результатов выполнения фонового задания можно использовать команду Receive-Job. Эта команда, как и команда Get-Job, возвращает выходные данные всех заданий, запущенных в ходе текущего сеанса, если вы не использовали параметр для указания на то, какое именно задание вас интересует. Так, последняя команда на экране 2 включает в себя параметр -Id, который указывает на то, что необходимо получить выходные данные о задании с идентификатором 9. Я опустил имя параметра -Id, поскольку его указывать необязательно. На экране 3 отображены последние строки выходных данных, касающихся выполнения рассматриваемого дистанционного фонового задания.

Создание сеансов PowerShell

Приведенные выше примеры показывают, как получить доступ к приглашению PowerShell на удаленной машине и как выполнять команды на удаленных компьютерах. Но я пока не упоминал о том, что удаленное взаимодействие всегда осуществляется в контексте сеанса. Сеанс - это, скажем так, место обитания PowerShell. Когда вы открываете окно консоли PowerShell или окно интегрированной среды сценариев (ISE) PowerShell, вы создаете сеанс. Без использования средств удаленного взаимодействия все сеансы выполняются на локальном компьютере и не зависят друг от друга. Во всех приведенных выше примерах удаленного взаимодействия создаются временные сеансы, которые автоматически прекращаются по завершении удаленного взаимодействия. Кроме того, существует возможность создавать экземпляры сеансов удаленного взаимодействия и повторно использовать их. Такой подход гораздо эффективнее в случаях, когда необходимо обращаться к удаленным компьютерам более одного раза.

Для создания новых сеансов используется команда New-PSSession с параметром -ComputerName. Имя этого параметра в командах можно опускать. Так, команда

C:\> $sessions = New-PSSession phineas, ferb, perry

создает три сеанса на трех компьютерах с именами phineas, ferb и perry. Вы можете просмотреть эти сеансы, создав переменную $sessions. Для этого в командной строке нужно ввести имя

$sessions

и нажать клавишу ввода. Параметр -Session команды Invoke-Command поддерживает объекты session, созданные с помощью команды New-PSSession, поэтому далее вы можете использовать команду, подобную следующей:

C:\> Invoke-Command {Get-ChildItem} -session $sessions

Эта команда выполняет команду Get-ChildItem на машинах phineas, ferb и perry, но не разрывает соединения. Вы можете добавить параметр -AsJob и выполнить команду в фоновом режиме:

C:\> Invoke-Command {Get-ChildItem} -session $sessions -asjob

Новый подход к работе

Удаленное взаимодействие с помощью средств PowerShell - это новый мощный механизм выполнения команд на удаленных компьютерах. Надеюсь, эта статья подвигнет вас на исследование новых возможностей. Более подробные сведения об удаленном взаимодействии, включая проблемы диагностики, можно найти в справочных темах PowerShell about_Remote по адресу technet.microsoft.com/en-us/library/dd347616.aspx .

Билл Стюарт ([email protected]) - системный и сетевой администратор компании French Mortuary, Нью-Мехико



Резюме : Знакомство с удаленным управлением в Windows PowerShell.

Weekend Scripter: Включаем удаленное управление Windows.

Microsoft Scripting Guy, Ed Wilson на связи. Сегодня я собираюсь опубликовать отрывок из моей новой книги Windows PowerShell 3.0 Step by Step , издаваемой Microsoft Press. Сейчас эта книга доступна для предварительного заказа.

WinRM – Удаленное управление Windows

В Windows Server 2012 WinRM запущен по умолчанию для поддержки выполнения удаленных команд Windows PowerShell. WinRM это имплементация корпорацией Microsoft промышленного стандарта WS-Management Protocol. Поэтому WinRM предоставляет удобный способ доступа к удаленным системам с точки зрения требований к настройке файрвола. Это тот механизм, который используют новые CIM-командлеты. Таким образом, вы можете в любое время подключиться к работающей машине на Windows Server 2012 для запуска команд или открытия интерактивной консоли Windows PowerShell. На Windows 8, с другой стороны, WinRM по умолчанию отключена. Это означает, что первое, что необходимо сделать, это запустить командлет Enable-PSRemoting . При запуске этого командлета происходят следующие шаги:

1. Запускается или перезапускается служба WinRM.

2. Тип запуска службы WinRM устанавливается в автоматический.

3. Создается прослушиватель (listener) для приема подключений по всем IP-адресам.

4. Включается исключение файрвола для трафика WS-Man.

5. Активируется конфигурация Microsoft.powershell

6. Активируется конфигурация Microsoft.powershell.workflow

7. Активируется конфигурация Microsoft.powershell32

В течение этого процесса, функция запрашивает подтверждения на выполнение каждого из действий. Если вы знакомы с действиями, выполняемыми функцией и не собираетесь вносить в ее работу каких-либо изменений, вы можете запустить эту команду с ключом –Force и в этом случае запросы подтверждений выводиться не будут. Синтаксис этой команды приведен ниже.

Enable-PSRemoting –Force

Теперь приведем пример использования функции Enable-PSRemoting в интерактивном режиме, включая всю выводимую информацию.

PS C:\> Enable-PSRemoting

WinRM Quick Configuration

Running command «Set-WSManQuickConfig» to enable remote management of this computer by using the Windows Remote Management (WinRM) service. This includes:

1. Starting or restarting (if already started) the WinRM service

2. Setting the WinRM service startup type to Automatic

3. Creating a listener to accept requests on any IP address

4. Enabling Windows Firewall inbound rule exceptions for WS-Management traffic (for http only).

Do you want to continue?

WinRM has been updated to receive requests.

WinRM service type changed successfully.

WinRM service started.

WinRM has been updated for remote management.

Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.

WinRM firewall exception enabled.

microsoft.powershell SDDL:

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):y

Are you sure you want to perform this action?

Performing operation «Set-PSSessionConfiguration» on Target «Name:

microsoft.powershell.workflow SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD). This will

allow selected users to remotely run Windows PowerShell commands on this computer».

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):y

Are you sure you want to perform this action?

Performing operation «Set-PSSessionConfiguration» on Target «Name:

microsoft.powershell32 SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD). This will

allow selected users to remotely run Windows PowerShell commands on this computer».

[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is «Y»):y

После того как конфигурация выполнена, можно проверить работоспособность WinRM при помощи командлета Test-WSMan . Если система сконфигурирована верно, выводится информация, подобная следующей.

PS C:\> Test-WSMan -ComputerName w8c504

ProductVersion: OS: 0.0.0 SP: 0.0 Stack: 3.0

Этот командлет также работает с компьютерами с Windows PowerShell 2.0. Пример, приведенный ниже, иллюстрирует запрос к контроллеру домена на Windows Server 2008 с установленным Windows PowerShell 2.0, на котором был сконфигурирован WinRM.

PS C:\> Test-WSMan -ComputerName dc1

wsmid: http: //schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd

ProtocolVersion: http: //schemas.dmtf.org/wbem/wsman/1/wsman.xsd

ProductVendor: Microsoft Corporation

ProductVersion: OS: 0.0.0 SP: 0.0 Stack: 2.0

Если WinRM не сконфигурирован, будет возвращено сообщение об ошибке. В случае операционной системы Windows 8, сообщение будет следующим.

PS C:\> Test-WSMan -ComputerName w8c10

Test-WSMan:

xmlns:f=»http: //schemas.microsoft.com/wbem/wsman/1/wsmanfault» Code=»2150859046″

Machine=»w8c504.iammred.net»>WinRM cannot complete the operation. Verify

that the specified computer name is valid, that the computer is accessible over the

network, and that a firewall exception for the WinRM service is enabled and allows

access from this computer. By default, the WinRM firewall exception for public

profiles limits access to remote computers within the same local subnet.

At line:1 char:1

Test-WSMan -ComputerName w8c10

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

CategoryInfo: InvalidOperation: (w8c10:String) , InvalidOperationException

FullyQualifiedErrorId: WsManError,Microsoft.WSMan.Management.TestWSManCommand

Стоит помнить о том, что включение удаленного управления командлетом Enable-PSRemoting не активирует исключение файрвола Remote Management, поэтому попытка пропинговать машину с Windows 8 успехом не увенчается.

PS C:\> ping w8c504

Pinging w8c504.iammred.net with 32 bytes of data:

Request timed out.

Request timed out.

Request timed out.

Request timed out.

Ping statistics for 192.168.0.56:

Packets: Sent = 4, Received = 0, Lost = 4 (100% loss).

В случае же с Windows Server 2012 все работает.

PS C:\> ping w8s504

Pinging w8s504.iammred.net with 32 bytes of data:

<1ms TTL=128

Reply from 192.168.0.57: bytes=32 time<1ms TTL=128

Reply from 192.168.0.57: bytes=32 time<1ms TTL=128

Reply from 192.168.0.57: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.0.57:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

Это все, что касается включения WinRM.

Ed Wilson, Microsoft Scripting Guy

Оригинал:

 
Статьи по теме:
Проверяем работоспособность жесткого диска на ошибки и бэды
Мы расскажем один простой и второй, более продвинутый, способ проверить состояние вашего жесткого диска и исправить поврежденные сектора с помощью программы HDDScan и программы HDD Regenerator.Жесткий диск имеет свой ресурс, поэтому желательно раз в год п
Powershell: использование командлета Invoke-Command
На сегодняшний день PowerShell Remoting является основным инструментом удаленного управления операционными системами Windows. Поэтому, знать о его возможностях и использовать в своих повседневных задачах должен каждый системный администратор Windows. Для
Обзор цифровой ручки Wacom Inkling
Несомненно, компьютеры стали мобильными, и рабочее место теперь можно организовать где угодно, - да хоть в парке, сквере или во дворе на лавочке. Вот только полноценным рабочим местом оно все равно не станет. Сканеры и принтеры, увы, далеко не так мобильн
Вперед на максимальной скорости
TFT IPS - Высококачественная жидкокристаллическая матрица. Имеет широкие углы обзора, один из лучших показателей качества цветопередачи и контрастности среди всех, которые используются в производстве дисплеев для портативной техники. Super AMOLED - если