Янв 092012
 
PowerShell

Очень часто приходиться работать на удаленных серверах и зачастую надо выполнить простые команды – посмотреть список процессов, загрузку CPU, свободное место на дисках запустить (закрыть) программу, выполнить настройку и т.д. Чаще всего под такие цели делают удаленный вход на сервер по средствам RDP, RAdmin и т.д. Это конечно хорошо, но надо тратить время на вход, запуск консоли, копания в настройках. Давайте рассмотрим еще один способ удаленной работы.

Одним из нововведений компании Microsoft стала система WinRM – это новая удобная служба удаленного управления для Windows Server 2003 R2, Windows Vista и Windows Server 2008. WinRM – это «серверный» компонент этого приложения удаленного управления, а WinRS (Windows Remote Shell – удаленная среда Windows) – это «клиент» для WinRM, которые запускается на удаленном компьютере, пытаясь удаленно управлять сервером WinRM. Более подробно о этой системе можно прочитать в интернете.
Для быстрой настройки WinRM необходимо выполнить всего 3 команды на стороне сервера:

rem Включаем WinRM
winrm quickconfig
rem Настраиваем прием команд по протоколам HTTP и HTTPS
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
winrm set winrm/config/service @{EnableCompatibilityHttpsListener="true"}

Настройка на клиенте:

winrm set winrm/config/client @{TrustedHosts="*"}

И еще одна полезная команда – проверка настроек:

winrm get winrm/config

разрешаем выполнения любых скриптов на сервере:

Set-ExecutionPolicy Unrestricted

Если сервер установлен за NAT, необходимо сделать проброс портов .
Более подробно о настройке можно прочитать  тут или тут. Хорошо, настроили, а что дальше и что это дает? А дает это вот что, давайте рассмотрим пример на PowerShell:

# Скрипт устанавливает на серверах (список должен быть в файле server.txt, каждый сервер в новой строке)
# Временную зону "UTC" и потом ее проверяет, результат выводит в файл report.txt
# Логин и пароль к серверам должен быть одинаковый.
 
$username = 'Administrator'
$password = 'Pa$$Word'
$srv = Get-Content server.txt
 
$report = "report.txt"
 
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,(ConvertTo-SecureString -String $password -AsPlainText -Force)
 
$session = New-PSSession -ComputerName $srv -Credential $cred
 
# Утанавливаем GMT
Invoke-Command -Session $session {tzutil /s "UTC"}
 
#Выходим из сессии.
Remove-PSSession -Session $session
 
# Проверяем
foreach ($server in $srv) {
  $session = New-PSSession -ComputerName $server -Credential $cred
  # выполняем запрос
  $result = Invoke-Command -Session $session {tzutil /g}
  # помещаем результат в файл
  Add-Content $Report "$server $result"
 
  #Выходим из сессии.
  Remove-PSSession -Session $session
}

Выполнение скриптов на удаленных серверах

 Posted by at 12:51

  One Response to “Настраиваем PowerShell для удаленной работы на серверах”

  1. Спасибо за статью очень достойный сайт.

Sorry, the comment form is closed at this time.