强制用户在Explorer加载之前login时更改AD密码?

背景

在我们的环境中,用户login到Windows 7 PC,然后启动全屏Citrix XenApp(与Microsoft RDSH相同)桌面。 带单点login的Citrix Reciever用于启动XenApp桌面。 所有工作都是在XenApp桌面上完成的。 XenApp服务器不一定与Windows 7计算机在同一个AD站点中。

我们每30天执行一次密码过期。 Windows 7及更高版本提示用户通过通知区域中的气球消息重置密码。 这导致我们两个问题如下所述:

问题

1)用户在Windows 7计算机上更改密码,同时已login到Citrix XenApp,例如通过按C + A + D。 XenApp桌面会话仍使用其旧密码进行身份validation。 然后,他们在XenApp中出现问题,显然他们无法通过IIS服务器,SQL Server等进行身份validation。

2)用户在其XenApp会话中更改密码。 这意味着他们的Windows 7机器仍然使用旧密码进行validation。 他们可以通过locking屏幕并使用新密码对其进行解锁来解决这个问题,然而不幸的是,这打破了Citrix客户端的单一login过程,因此如果他们需要重新启动Citrix XenApp,除非他们注销Windows 7然后回来(这家伙有同样的问题http://discussions.citrix.com/topic/333487-published-desktop-with-receiver-password-changing/ )。

问题的症结在于,一旦shell已经加载,用户可以更改密码。 当最终用户机器运行Windows XP时,我们没有这个问题。 我想这是因为Windows XP提示用户在启动explorer.exe之前立即更改密码。

问题(S):

  • 我们可以configurationWindows 7来提示用户在加载shell之前更改密码吗?
  • 如果没有,是否有第三方软件可以帮助我们呢? 据推测,任何使用Windows 7或更高版本以及RDSH / Citrix桌面的组织都会遇到类似的问题。

作为解决方法,您可以禁用即将过期的密码通知; 这样,只有在用户实际到期时才会通知用户过期的密码,因此在用户login到他们的系统时将被强制更改。

这可以通过GPOconfiguration: https : //technet.microsoft.com/en-us/library/ee829687%28v=ws.10%29.aspx 。

你可以使用下面的PowerShellfunction来完成这个任务。 桌面应用程序在我看来没有多大意义

 function ForcePasswordChange { [CmdletBinding()] Param ( [Parameter(Mandatory=$True)] [string]$ADGroup, [int]$Changes = "0" ) Begin { Write-Warning "Script start for Group: $ADGroup" } Process { Try { Get-ADUser -Filter * -SearchBase $ADGroup | ForEach { Set-ADUser -Identity $_.name -ChangePasswordAtNextLogon $true $Changes++ } } Catch [System.Management.Automation.CommandNotFoundException] { Throw "Script has to run on a Domain Controller or on a Client with ActiveDirectory PowerShell Module installed. Script disrupted" } Catch [System.ArgumentException] { Throw "Could not resolve SearchBase (ADGroup) - ADGroup was $ADGroup. Script disrupted" } Catch [System.Management.Automation.ParameterBindingException] { Write-Error "Could not resolve Name Identity of one or multiple Users in ADGroup. Maybe ADGroup is empty. Script continues" } } End { Write-Warning "Script has finished. $Changes Users must change their Password on next logon" } } 

只需将其保存为ForcePasswordChange.ps1并将其加载到域控制器上的PowerShell会话中即可

 . C:\yourpath\ForcePasswordChange.ps1 

那么你可以这样写

 ForcePasswordChange -ADGroup "OU=GroupName,OU=Users,DC=DomainPrefix,DC=Domain,DC=com" 

在domain internal.international.de的OU“用户欧洲”中称为“Powerusers”的组的示例

 ForcePasswordChange -ADGroup "OU=Powerusers,OU=Users Europe,DC=internal,DC=international,DC=de" 

您还可以创build一个计划任务,每隔三十天运行一次具有正确参数的脚本,然后您就不需要再执行任何操作了。