用户如何在没有远程桌面的情况下更改其 Active Directory 密码?

用户如何在没有远程桌面的情况下更改其 Active Directory 密码?

在我们的 Active Directory 设置中,一些用户将从非域计算机访问域资源(具体来说是网络上的共享文件夹)。只有来自域的用户才有权访问这些共享文件夹,因此当非域用户尝试访问上述文件夹时,Windows 会提示他们输入凭据。然后,用户可以输入他们的域用户名和密码,之后他们就可以毫无问题地访问他们的文件。

这一切都很好,除非用户需要更改密码。例如:当设置新用户时,我想为他们提供一个随机密码,要求他们在进行身份验证之前更改该密码。如果他们使用远程桌面,RDP 客户端会在他们登录之前自动提示他们输入新密码,但是当通过 Windows 资源管理器访问文件共享时,Windows 只会向他们发送一条消息,坚持要求他们必须在使用帐户之前更改密码,然后立即拒绝他们访问,而没有任何方法可以这样做。

所以问题是:我如何为用户提供更改自己密码的权限?

注意:环境中没有他们可以连接的远程桌面服务器(只有域控制器)。

答案1

您可以使用以下 PowerShell 脚本允许用户远程更改密码。用户只需执行此脚本并完成提示即可。要使以下脚本正常工作,您需要以管理员身份打开 PowerShell 并运行命令Set-ExecutionPolicy RemoteSigned以允许执行本地创建的未签名脚本。

function Set-PasswordRemotely {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)][string] $UserName,
        [Parameter(Mandatory = $true)][string] $OldPassword,
        [Parameter(Mandatory = $true)][string] $NewPassword,
        [Parameter(Mandatory = $true)][alias('DC', 'Server', 'ComputerName')][string] $DomainController
    )
    $DllImport = @'
[DllImport("netapi32.dll", CharSet = CharSet.Unicode)]
public static extern bool NetUserChangePassword(string domain, string username, string oldpassword, string newpassword);
'@
    $NetApi32 = Add-Type -MemberDefinition $DllImport -Name 'NetApi32' -Namespace 'Win32' -PassThru
    if ($result = $NetApi32::NetUserChangePassword($DomainController, $UserName, $OldPassword, $NewPassword)) {
        Write-Output -InputObject 'Password change failed. Please try again.'
    } else {
        Write-Output -InputObject 'Password change succeeded.'
    }
}

它会提示用户输入用户名、旧密码、新密码和域控制器。请注意,密码将以纯文本形式显示在 PowerShell 窗口中,但不会以纯文本形式发送新密码。

答案2

或者,为了更“用户友好”的方式(脚本看起来很棒,但对最终用户来说可能令人生畏),您可以安装远程桌面 Web 服务角色

无需完整的远程桌面套件。默认情况下,它只有一个登录页面。可以配置一个链接,单击该链接即可通过 Web 界面更改密码。

这种方法的开销更大,例如需要安装具有新 RDWeb 角色的 IIS。您需要一个受信任的证书(可以来自内部 CA)来使用 HTTPS 保护网站 - 您不希望以明文形式发送密码更改。但这一切都可以在一小时内完成。

本指南对此进行了非常清楚的描述,但没有讨论 SSL 证书。http://woshub.com/允许用户重置过期密码-via-rd-webaccess-windows-server-2012/。如果你快速谷歌一下,还会发现其他指南。

在不同版本的 Windows 中,实际要修改的行略有不同。查找周围的代码。

相关内容