Мы пытаемся подключиться к удаленному серверу через Powershell и использовать модуль ActiveDirectory. При попытке сделать это локально вроде все нормально.
PS C:\Users\bar> Import-Module ActiveDirectory
PS C:\Users\bar> Get-ADUser 'baz'
DistinguishedName : CN=Foo Baz,OU=baz.myhost.com,OU=FooMachine,DC=foo,DC=blah,DC=loc
Enabled : True
GivenName : Baz
Name : Foo Baz
ObjectClass : user
ObjectGUID : <some guid>
SamAccountName : baz
SID : <more info here>
Surname : Baz
UserPrincipalName : baz@foo
Когда мы делаем то же самое удаленно, нам не так везет.
C:\> Enter-PSSession -ComputerName 172.1.2.3 -Credential foo\bar
[172.1.2.3]: PS C:\Users\bar\Documents> Import-Module ActiveDirectory
WARNING: Error initializing default drive: 'Unable to contact the server. This
may be because this server does not exist, it is currently down, or it does not
have the Active Directory Web Services running.'.
[172.1.2.3]: PS C:\Users\bar\Documents> Get-ADUser 'baz'
Unable to contact the server. This may be because this server does not exist, i
t is currently down, or it does not have the Active Directory Web Services runn
ing.
+ CategoryInfo :
+ FullyQualifiedErrorId : Unable to contact the server. This may be becaus
e this server does not exist, it is currently down, or it does not have th
e Active Directory Web Services running.,Microsoft.ActiveDirectory.Managem
ent.Commands.GetADUser
[172.1.2.3]: PS C:\Users\bar\Documents>
Кристофер, в этом домене работают 2 контроллера домена 2008 R2. Веб-служба Active Directory работает на обоих ("Import-Module ActiveDirectory" отлично работает на консоли сервера - кстати, это не контроллер домена
Вот пример использования CredSSP для решения подобной проблемы. Я проверил это, и он помогает устранить ошибку веб-служб AD, которую вы указали в своем вопросе.
Подводя итоги статьи, сначала вам нужно включить CredSSP как на клиенте, так и на сервере.
На клиенте: Enable-WSManCredSSP -Role Client -DelegateComputer [computer name] -Force
На сервере: Enable-WSManCredSSP -Role Server –Force
Затем вам нужно получить или создать учетные данные для подключения к другому компьютеру и создать сеанс, использующий эти учетные данные. Тогда вы можете использовать Invoke-Command
для запуска команд / сценария PowerShell в блоке сценария в этом новом сеансе. Вот частичный пример из статьи с использованием команд из вашего вопроса:
$credential = Get-Credential -Credential iammred\administrator
$session = New-PSSession -cn SQL1.Iammred.Net -Credential $credential -Authentication Credssp
Invoke-Command -Session $session -ScriptBlock { Import-Module ActiveDirectory; Get-ADUser 'baz' }
Однако это интерактивно запрашивает ваши учетные данные, поэтому, если вы хотите избежать этого, вам нужно сделать что-то вроде этого для $credential
вместо:
$credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "DOMAIN\username",$pass;
где $pass
безопасная строка пароля, связанного с учетной записью.
У меня была такая же проблема с несколькими нашими средами, и что сработало, так это изменение брандмауэра. Судя по всему, ADWS использует порт 9389 что было запрещено с сервера, который пытался удаленно администрировать DC с помощью PowerShell. Как только мы разрешили порт, все работает нормально.
Потребуется ли CREDSSP в этом сценарии?
По этой ссылке - http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/094f9dd3-669a-4bea-9f81-f2ea009384d1
Чтобы использовать модуль AD, помимо компьютера Server 2008 R2 или Windows 7 с модулем AD PowerShell, если вы не используете серверы AD Server 2008 R2, вам потребуется следующее:
Если вы выберете сервер AD Server 2003 или 2008 с указанным выше надстройкой, вам все равно потребуется система Server 2008 R2 или Windows 7, чтобы можно было использовать модуль AD. Используя удаленное взаимодействие PowerShell, вы сможете использовать любую систему с установленной PowerShell v2 для удаленного вызова командлетов модуля AD, как описано здесь:
вы подключились к серверу, используя IP-адрес. Таким образом, Kerberos нельзя использовать для аутентификации (вот почему вам пришлось использовать учетные данные). Поэтому, когда сервер пытается аутентифицироваться от вашего имени, вы сталкиваетесь со вторым прыжком. Сервер не может передать учетные данные третьему лицу, поэтому вы получаете ошибки.
Ваш сценарий требует, чтобы вы подключили клиента к серверу через Kerberos. Это возможно только в том случае, если ваш клиент является членом домена и вы используете имя сервера, а не его IP-адрес.
Тобиас www.powershell.com