我需要从不同的 Windows 域获取用户的密码到期日期。
我的电脑上安装了 RSAT,使用正确的凭据,我确实可以使用 LDAP Admin 或类似工具读取所有目标域数据。
这是我的脚本,100%有效,但仅适用于本地域:
function getPasswordExpiryDateforUser($user){
$result = get-aduser $user -Server "other.domain.server:636" –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}
return $result
}
getPasswordExpiryDateforUser("myUserName")
如果我在 -Server 参数中放置另一个域,则会收到错误:
get-aduser : 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.
At C:\tests\checkUserPasswordExpiryDate.ps1:2 char:15
+ ... $result = get-aduser $user -Server "other.domain.server: ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (myUserName:ADUser) [Get-ADUser], ADServerDownException
+ FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADUse
您能否建议一种简单的方法来获得这个结果?
我可以成功 ping 另一个域,我可以使用 LDAP Admin 等工具成功查看其数据。
答案1
您可以在 Active Directory 服务器上运行该命令。使用 Enter-PSSession 和 Invoke-Command 建立的连接默认通过 HTTP 进行通信。但是,WinRM 会对传输的数据进行加密。
这是它的链接。
举个例子:
# Query a list of domain controllers using stored credentials (include functions above)
# List the Domain Admin group membership for all domains
$Servers = 'dc1.alpineskihouse.com',`
'dc2.wideworldimporters.com','dc3.contoso.com'
$ServerList = Split-FQDN -FQDN $Servers
$DomCreds = Get-DomainCreds -Path C:\deploy\creds.xml
ForEach ($Server in $ServerList) {
'*' * 40
$Server.Domain
Invoke-Command -ComputerName $Server.FQDN `
-Credential $DomCreds[$Server.Domain] -ScriptBlock {
Get-ADGroupMember -Identity 'Domain Admins' |
Select-Object -ExpandProperty distinguishedName
}
}
答案2
这是一个常见的误解,但本机 ActiveDirectory PowerShell 模块实际上并不使用 LDAP 与 AD 通信(尽管具有类似 的属性LDAPFilter
)。它使用基于 SOAP 的 HTTP 协议来对抗Active Directory Web 服务在端口 9389 上。
因此,如果您想使用该模块的功能对远程 AD 进行参数控制-Server
,只需指定不带端口的 FQDN。同时确保没有防火墙阻止 TCP 9389,并且 ADWS 服务正在目标服务器上运行。
你的其他选择是 PSRemoting 就像 @NicoKlaus 的答案中那样,或者如果你真的想通过 LDAP 来做,那么总是有分布式系统集成。