如何使用 Powershell(来自不同的域,使用 SSL)获取用户密码到期日期

如何使用 Powershell(来自不同的域,使用 SSL)获取用户密码到期日期

我需要从不同的 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 会对传输的数据进行加密。

这是它的链接。

https://blogs.technet.microsoft.com/ashleymcglone/2016/11/30/how-to-run-a-powershell-script-against-multiple-active-directory-domains-with-different-credentials/

举个例子:

# 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 来做,那么总是有分布式系统集成

相关内容