Для подключения к удалённым компьютерам для выполнения команд PowerShell в Windows есть специальная служба WinRM (Windows Remote Management). WinRM работает через протокол WS-Management.
Чтобы узнать стастус службы WinRM (включена/выключена):
Get-Service -Name "*WinRM*" | fl
Если служба WinRM не запущена, то запустить её можно командой (на удалённом компьютере):
Enable-PSRemoting
Для проверки подключения к удалённому компьютеру можно выполнить команду (командлет):
Test-WSMan имя/ip-адрес_компьютера
При проблемах с подключением из-за SSL-сертификата необходимо добавить подключаемый компьютер в список доверенных:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value ip-адрес_компьютера
Чтобы посмотреть список доверенных хостов можно выполнить:
Get-Item WSMan:\localhost\Client\TrustedHosts
Для принятия изменений необходимо перезагрузить службу WinRM:
Restart-Service WinRM
Сейчас рассмотрим непосредственное выполнение командлетов на удалённом компьютере. Для этого в PowerShell есть два компандлета: Enter-PSSession и Invoke-Command.
Enter-PSSession устанавливает сессию с удалённым компьютером и последующие комадлеты выполняются уже на нём. При подключении необходимо указать учётную запись, имеющую административные права на удалённом компьютере через -Credential. Например, можно указать учётную запись Администратора домена:
Enter-PSSession ip-адрес_компьютера -Credential ДОМЕН\учётная_запись
Invoke-Command позволяет выполнить сразу блок команд на удалённом компьютере. Данный блок отделяется фигурными скобками ("{" в начале и "}" в конце), а также может иметь множество строк, объединённых с помощью "@(...)". Например:
Invoke-Command -ComputerName ip-адрес_компьютера -ScriptBlock {@(
$org = "CN=Users,DC=DOMAIN,DC=LOCAL"
$username = Read-Host "Введите имя"
$password = Read-Host "Введите пароль"
$descr = "Пользователь"
New-AdUser -Name $username -UserPrincipalName $username"@DOMAIN.LOCAL" -Path $org -GivenName $username -DisplayName $username -Description $descr -Enabled $true -CannotChangePassword $true -PasswordNeverExpires $true -AccountPassword (ConvertTo-SecureString $password -AsPlainText -force) -passThru;
)} -Credential ДОМЕН\учётная_запись
В принципе, на этом всё!