这是我的方案,到目前为止我还没有找到解决方法:该应用程序在Windows 2012 R2服务器(svr1,域成员)上运行,并且需要将域帐户添加到svr2上的本地组,也是域名成员。
到目前为止,使用ADSI对我没有用(仍在尝试)。 PSEXEC不是一种选择,因为通过网络发送明文凭证。
此行适用于远程Windows 2008 R2服务器,而不适用于远程Windows 2012 R2服务器,因为ConnectedServer属性会抛出“System.UnauthorizedAccessException”,但仅限于访问2012 R2服务器时。凭据是有效的域管理员信用(适用于2008 R2,我可以使用它们登录到开发服务器)
using ( PrincipalContext adDestMachinePrincContext = new PrincipalContext( AccountManagement.ContextType.Machine,"svr2",null,ada.ContextOptions.Negotiate,
"DomainName\\TheDomainAdminAccount","LegitPassword" ) )
{ ... etc etc etc ... }
到目前为止我发现的是:
当我登录开发服务器时 使用相同的域管理员凭据,它适用于当前 使用用户的凭据。这条线路每次都适用 当前用户是相同的域管理员
PrincipalContext x = new ada.PrincipalContext(AccountManagement.ContextType.Machine,“svr2”);
目标(此时,我并不关心如何完成它)很简单:使用.Net将域用户帐户添加到远程服务器上的本地组中。 PowerShell不是一个选项,但即使是一个工作片段也可以。远程盒子可以是2008年,2008年x86,20058 R2,2012年,2012年R2或2016年。
是否有人能够将域帐户添加到远程2012 R2服务器上的本地组?我还没有找到任何与实际例子相近的东西。如果是的话,对你有用吗?
我不确定ADSI调用是否可行,因为AD需要LDAP,本地访问需要WinNT,并且它们似乎与能够执行所需的操作不重叠。
我认为这就是我所拥有的一切......到目前为止。
我的下一步可能是在域管理员帐户下运行的WCF服务,但这对此必须是过度的。
答案 0 :(得分:0)
到目前为止,马特·约翰逊的帖子已经成功了,这很有效:
StackOverflow solution by Matt Johnson (he deserves his props!)
我原始帖子中的代码片段现在看起来像这样(简化):
using ( new Impersonation( "TheDomain", "TheDomainAdminAccount", "ItsValidPassword" ) )
{
using ( PrincipalContext adDestMachinePrincContext = new PrincipalContext( AccountManagement.ContextType.Machine,"svr2") ) { ... etc etc etc ... } }
它正在工作。