我们正在尝试通过 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>
Christopher,我们在该域中运行了 2 个 2008 R2 域控制器。Active Directory Web 服务在两个域中都运行(“Import-Module ActiveDirectory”在服务器控制台上运行良好 - 顺便说一下,它不是域控制器
答案1
在这种情况下,有人需要 CREDSSP 吗?
答案2
以下是使用 CredSSP 解决类似问题的示例。我对此进行了测试,它可以解决您在问题中发布的 AD Web 服务错误。
总结一下这篇文章,首先您需要在客户端和服务器上启用 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
是与帐户关联的密码的安全字符串。
答案3
我在我们的几个环境中遇到了同样的问题,而改变防火墙是有效的。显然 ADWS 使用端口 9389这是不允许的,因为服务器试图使用 powershell 远程管理 DC。一旦我们允许端口,一切都会顺利进行。
答案4
您使用 IP 地址连接到服务器。这样,Kerberos 就无法用于身份验证(这就是您必须使用凭据的原因)。因此,当服务器尝试代表您进行身份验证时,您会遇到第二跳问题。服务器无法将凭据交给第三方,因此您会收到错误。
您的方案要求您通过 Kerberos 将客户端连接到服务器。只有当您的客户端是域成员并且您使用服务器名称而不是其 IP 地址时,这才有可能。
托比亚斯 www.powershell.com