Использование Powershell для удаленного вызова команд в Azure

66
4

Я пишу серию сценариев автоматизации, которые позволят нашим разработчикам встать в простой среде разработки в Azure. Эта среда имеет 3 основных свойства:

Существует клиентская машина (Windows 10), в которой будут работать инструменты разработчика, такие как их IDE и код. Существует серверная машина (Windows Server 2016), в которой будут нацелены их сценарии. Обе эти машины живут в одном домене, и один пользователь домена Admin доступен для использования.

У меня есть шаги 1 и 2 сценария, но 3 в настоящее время беспорядок. Поскольку сценарий предназначен для работы с локальной рабочей станцией Developer, мне нужно, чтобы сценарий был удален в Windows Server и выполнял несколько команд для настройки контроллера домена.

Вот мой код:

Invoke-Command -ComputerName "$RGName-$VMPurpose" -ScriptBlock 
{
$ADFeature = Install-WindowsFeature AD-Domain-Services
If ($ADFeature.Success -eq $true)
{
Import-Module ADDSDeployment
Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath
"C:\Windows\NTDS" -DomainMode "Win2016R2" -DomainName "$project.com" -
DomainNetbiosName "$project" -ForestMode "Win2016R2" -InstallDns:$true -
LogPath "C:\Windows\NTDS" -NoRebootOnCompletion $false -sysvolpath
"C:\Windows\SYSVOL" -force $true
$domUserPassword = ConvertTo-SecureString "Th1s is a bad password" -
AsPlainText -Force
New-ADUser -Name "$VMPurpose-DomAdm" -AccountPassword
$domUserPassword
Add-ADGroupMember -Name "Administrators" -Member {Get-ADUser
"$VMPurpose-DomAdm"}
}
} -Credential $Cred

Когда я пытаюсь запустить это, я получаю сообщение об ошибке, показывающее, что WinRM не может подключиться, в частности, эта ошибка:

[Foo] Connecting to remote server Foo failed with the following error 
message : WinRM cannot process the request. The following error with
errorcode 0x80090311
occurred while using Kerberos authentication: There are currently no logon
servers available to service the logon request.
Possible causes are:
-The user name or password specified are invalid.
-Kerberos is used when no authentication method and no user name are
specified.
-Kerberos accepts domain user names, but not local user names.
-The Service Principal Name (SPN) for the remote computer name and port
does not exist.
-The client and remote computers are in different domains and there is no
trust between the two domains.
After checking for the above issues, try the following:
-Check the Event Viewer for events related to authentication.
-Change the authentication method; add the destination computer to the
WinRM TrustedHosts configuration setting or use HTTPS transport.
Note that computers in the TrustedHosts list might not be authenticated.
-For more information about WinRM configuration, run the following
command: winrm help config. For more information, see the
about_Remote_Troubleshooting Help topic.
+ CategoryInfo : OpenError: (Foo:String) [],
PSRemotingTransportException
+ FullyQualifiedErrorId : AuthenticationFailed,PSSessionStateBroken

Я добавил целевую машину (Foo) в настройку конфигурации TrustedHosts в WinRM (я фактически добавил IP-адрес, чтобы убедиться, что не было никакой проблемы с DNS), а затем я получаю эту ошибку:

[Foo IP] Connecting to remote server <Foo IP> failed with the following 
error message : 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. For
more information, see the about_Remote_Troubleshooting Help topic.
+ CategoryInfo : OpenError: (Foo Ip[:String) [],
PSRemotingTransportException
+ FullyQualifiedErrorId : WinRMOperationTimeout,PSSessionStateBroken

Любые мысли здесь? Я пытаюсь просто не работать с Powershell?

спросил(а) 2017-09-29T01:20:00+03:00 2 года, 9 месяцев назад
1
Решение
55

Согласно вашему сообщению об ошибке, мы можем использовать этот сценарий PowerShell для вызова команды Azure:

$username = 'jason'
$pass = ConvertTo-SecureString -string 'password' -AsPlainText -Force
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $pass
$s = New-PSSession -ConnectionUri 'http://23.99.82.2:5985' -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)
Invoke-Command -Session $s -ScriptBlock {Get-Process PowerShell}

PowerShell будет выглядеть следующим образом:

enter image description here

Дополнительную информацию о команде invoke см. В этом ответе.

ответил(а) 2017-09-29T06:09:00+03:00 2 года, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема