В нашей настройке Active Directory некоторые пользователи будут получать доступ к ресурсам домена (в частности, к общим папкам в сети) с компьютеров, не относящихся к домену. Только пользователи из домена имеют разрешение на доступ к этим общим папкам, поэтому Windows запрашивает учетные данные у пользователей вне домена, когда они пытаются получить доступ к указанным папкам. Затем пользователь может ввести имя пользователя и пароль своего домена, после чего он сможет без проблем получить доступ к своим файлам.
Все это работает нормально, за исключением случаев, когда пользователю требуется изменить свой пароль. Например: когда создается новый пользователь, я хотел бы предоставить ему случайный пароль, который они должны будут изменить перед аутентификацией. Если бы они использовали удаленный рабочий стол, клиент RDP автоматически запросил бы у них новый пароль перед их входом в систему, но при доступе к общему файловому ресурсу через проводник Windows Windows выдает им только сообщение с требованием изменить свой пароль перед использованием своей учетной записи. прежде чем незамедлительно отказать им в доступе без какой-либо возможности сделать это.
Возникает вопрос: как я могу предоставить пользователю возможность изменить свой пароль?
Примечание. В среде нет серверов удаленных рабочих столов, к которым они могли бы подключиться (только контроллер домена).
Вы можете использовать приведенный ниже сценарий 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 в виде обычного текста, но не будут отправлять новый пароль в виде обычного текста.
В качестве альтернативы, для более «удобного для пользователя» способа (сценарий выглядит отлично, но может показаться сложным для конечных пользователей), вы можете установить роль веб-службы удаленного рабочего стола.
Нет необходимости в полном комплекте удаленного рабочего стола. По умолчанию у него просто есть страница входа в систему. Это можно настроить с помощью ссылки для изменения пароля через веб-интерфейс.
Этот метод требует дополнительных накладных расходов, таких как необходимость установки IIS с новой ролью RDWeb. Для защиты веб-сайта с помощью HTTPS вам понадобится доверенный сертификат (он может быть получен от внутреннего центра сертификации) - вы не хотите, чтобы изменения пароля отправлялись в виде открытого текста. Но все это можно сделать менее чем за час.
Это руководство описывает это довольно четко, но не обсуждает сертификат SSL. http://woshub.com/allow-users-to-reset-expired-password-via-rd-webaccess-windows-server-2012/. Есть и другие руководства, если вы быстро погуглите.
Фактическая строка для изменения немного отличается в разных версиях Windows. Ищите окружающий код.