С помощью PowerShell можно выполнить удаленные команды, как на одном компьютере, так и на нескольких компьютерах. Использовать как временное, так и постоянное подключение. Можно так же запустить интерактивный сеанс с одним удаленным компьютером.
В этом разделе приводится ряд примеров, показывающих, как работать с разными типами удаленных команд. Рекомендуется так же прочесть разделы справки, которые описывают каждый командлет, который используется в статье. Эта статья представляет подробную информацию и объясняет, как можно изменять команды под ваши потребности.
Примечание: Для использования Windows PowerShell Remoting, локальные и удаленные компьютеры должны быть настроены на удаленное взаимодействие. Для получения дополнительной информации см about_Remote_Requirements.
Как начать интерактивный сеанс (ENTER-PSSESSION)
Самый простой способ выполнять удаленные команды — это начать интерактивный сеанс с удаленным компьютером.
Когда начинается сессия, команды которые вы вводите, выполняются на удаленном компьютере, как если бы вы набрали их непосредственно на удаленном компьютере. Вы можете подключиться только к одному компьютеру в каждом интерактивном сеансе.
Чтобы начать интерактивный сеанс, используйте командлет Enter-PSSession.
Следующая команда начинает интерактивный сеанс с компьютером Server01:
1 |
Enter-PSSession Server01 |
Командная строка изменяется, чтобы указать, что вы подключены к компьютеру Server01.
1 |
Server01 \ PS> |
Теперь можно вводить команды на компьютере Server01.
Чтобы завершить интерактивный сеанс, надо ввести:
1 |
Exit-PSSession |
Для получения дополнительной информации см Enter-PSSession.
Как работать с командлетами, которые имеют параметр ComputerName для дистанционного получения данных
Некоторые командлеты имеют параметр ComputerName, он позволяет получать объекты с удаленных компьютеров.
Поскольку эти командлеты не используют WS-Management на базе Windows PowerShell Remoting, вы можете использовать параметр ComputerName этих командлетов на любом компьютере под управлением Windows PowerShell. Компьютеры могут быть не настроены для работы Windows PowerShell Remoting, и компьютеры могут не отвечать требованиям к системам для удаленного доступа.
Ниже приведён список командлетов имеющих параметр ComputerName:
Clear-EventLog
Get-Counter
Get-EventLog
Get-HotFix
Get-Process
Get-Service
Get-WinEvent
Get-WmiObject
Limit-EventLog
New-EventLog
Remove-EventLog
Restart-Computer
Stop-Computer
Show-EventLog
Test-Connection
Write-EventLog
Для примера, следующая команда получает службы на удаленном компьютере Server01:
1 |
Get-Service -ComputerName Server01 |
Обычно командлеты, поддерживающие удаленную работу без специальной настройки, имеют параметр ComputerName и не имеют параметра Session. Чтобы отобразить эти командлеты надо выполнить следующую команду:
1 |
Get-Command | where { $_.Parameters.Keys -contains "ComputerName" -and $_.Parameters.Keys -NotContains "Session"} |
Как запустить команды удалённо
Для запуска команд, не поддерживающих параметр ComputerName, на удаленных компьютерах. Можно использовать командлет Invoke-Command.
Для указания списка компьютеров или одного компьютера можно воспользоваться параметром ComputerName. Для задания одной или несколько команд надо воспользоваться парамертом ScriptBlock.
Например, следующая команда выполняет команду Get-Culture на компьютере Server01.
1 |
Invoke-Command -ComputerName Server01 -scriptblock {Get-Culture} |
Параметр ComputerName предназначен для ситуаций, в которых выполняется одна команда или несколько несвязанных команд, на одном или нескольких компьютерах. Чтобы установить постоянное подключение к удаленному компьютеру, надо использовать параметр Session.
Как создать постоянное соединение (PSsession)
При использовании параметра ComputerName и командлета Invoke-Command, оболочка Windows PowerShell устанавливает подключение только для данной команды. Затем, когда команда завершена, оболочка закрывает соединение. Любые переменные или функции, которые были определены в команде, будут потеряны.
Чтобы создать постоянное подключение к удаленному компьютеру, надо воспользоваться командлетом New-PSSession. Например, следующая команда создает сеансы PSSession на компьютерах Server01 и Server02, а затем сохраняет эти сеансы в переменной $s.
1 |
$s = New-PSSession -ComputerName Server01, Server02 |
Как выполнять команд в PSsession
Воспользовавшись PSSession, можно запустить серию удаленных команд, которые будут иметь одно общее окружение. И соответственно иметь общий доступ к таким данным, как функции, псевдонимы и значения переменных. Для запуска команды в PSSession, используется параметр Session в командлете Invoke-Command.
Например, следующая команда использует командлет Invoke-Command для выполнения командлета Get-Process в сеансах PSSession $s на компьютерах Server01 и Server02. Команда сохраняет процессы в переменной $р в каждом из сеансов PSSession.
1 |
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process} |
Так как PSSession использует постоянное подключение, вы можете запустить другую команду в той же сессии PSSession, в которой уже задана переменная $р. Следующая команда подсчитывает количество процессов, сохраненных в переменной $р.
1 |
Invoke-Command -Session $s -ScriptBlock {$p.count} |
Как запустить удалённые команды на нескольких компьютерах
Для запуска удаленной команды на нескольких компьютерах, необходимо ввести все имена компьютеров в значении параметра ComputerName командлета Invoke-Command. Разделите имена компьютеров запятыми.
Например, следующая команда запускает команду Get-Culture на трех компьютерах:
1 |
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture} |
Можно так же запустить команду в нескольких сеансах PSSession. Следующие команды создают сеансы PSSession на компьютерах Server01, Server02, Server03 и затем выполняется команда Get-Culture в каждом из сеансов.
1 2 |
$s = New-PSSession -ComputerName Server01, Server02, Server03 Invoke-Command -Session $s -ScriptBlock {Get-Culture} |
Чтобы указать в списке компьютеров локальный компьютер надо ввести имя локального компьютера, точку (.) или localhost.
1 |
Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture} |
Как запустить скрипт на удаленных компьютерах
Чтобы запустить скрипт с локального компьютера, на удаленных компьютерах, надо использовать параметр FilePath командлета Invoke-Command.
Например, следующая команда запускает сценарий sample.ps1 на компьютерах S1 и S2:
1 |
Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1 |
Результат работы скрипта отображается на локальном компьютере. Для выполнения данного скрипта нет необходимости распространять файлы скрипта.
Как остановить удалённые команды
Чтобы прервать команду, надо нажать «CTRL» + «C». Запрос прерывания передастся на удаленный компьютер и завершит работу удаленного управления.
Комментарии: