クライアントの認証とネットワークトポロジのために、Active DirectoryまたはドメインコントローラのないDMZに多数のWindowsサーバがあります。企業方針では、パスワードは月に一度変更する必要があると規定されています。私たちの開発マシンはAD(DMZではなく)に入っていますので、各DMZマシンのユーザー名とパスワードを毎月AD資格と同期させる必要があります。多くのDMZマシンがあります。リモートパスワードの変更(コードでは、.Net 3.5)
単純なコンソールアプリケーションを使用して、特定のユーザーのすべてのDMZマシンのユーザーパスワードを変更する必要があります。これまでのところ、私は、次のコードを持っている:
using System.Collections.Generic;
using System.DirectoryServices.AccountManagement;
class Program{
static void Main(){
List<string> remoteHosts = new List<string> { "RemoteHostA", "RemoteHostB", "RemoteHostC" };
remoteHosts.ForEach(host => ChangePassword(host, "username", "oldPassword", "newPassword"));
}
static void ChangePassword(string host, string username, string oldPassword, string newPassword){
using (var context = new PrincipalContext(ContextType.Machine, host, username, newPassword))
using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username))
user.ChangePassword(oldPassword, newPassword);
}
}
問題はパスワードがすでにそれから実行されているのdevのマシン上で変更されていない場合にのみ動作することです。使用されているコンテキストは、最初にネットワークにアクセスするためにdevマシンで認証されているため、パスワードを変更する前に同じコンテキストを使用してリモート(DMZ)マシンにアクセスする必要があります。
新しいパスワードコンテキストを使用してネットワークにアクセスし、古いパスワードコンテキストを使用してリモートホストにアクセスする方法を変更するにはどうすればよいですか。
タイトル編集者への注:コードは、3.0ではなくFX 3.5アセンブリであるSystem.DirectoryServices.AccountManagementに依存します。
@手榴弾 - 私は編集戦争を開始したくないので、これをあなたに任せて、C#と.NETの違いがあります。おそらくあなたのタイトルにはC#3ではなく_.NET 3.5_が含まれているはずです:) –
Cheers Andrew、それは私が一緒に暮らすことができる編集です... – grenade