我想创建一个应用程序以编辑服务器上的用户帐户。
服务器不使用仅限AD的本地帐户。
我使用以下代码连接远程服务器:
try
{
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Machine, "192.168.123.110", null, ContextOptions.Negotiate, "Administrator", "password");
try
{
MessageBox.Show(oPrincipalContext.ConnectedServer);
GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, "Goetter");
try
{
// perform operations here
}
finally
{
oGroupPrincipal.Dispose();
}
}
finally
{
oPrincipalContext.Dispose();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
每当我尝试这样做的时候,我都会得到一个异常,即用户和/或密码没有被授权,与我使用的用户无关。PrincipalContext
只适用于AD还是本地帐户?我的代码有什么问题吗?
1条答案
按热度按时间ss2ws0br1#
更改代码并将其 Package 在using语句周围,否则在尝试调用Dispose()方法时可能会出现一些错误,原因是在尝试释放连接时,连接可能已经关闭。
如果您使用ActiveDirectory,则可以在此处使用此代码并尝试其中一个示例
实施例1:
如果您使用的是.NET 3.5,则可以使用System.DirectoryServices.AccountManagement命名空间并轻松地验证您的凭据:
实施例二
上面的公共bool IsValid()方法应该可以满足您的要求。
Have a look at PrincipalContext.ValidateCredentials
对于FindByIdentity部分,可以尝试以下替换代码
ContextType.Machine后附加参考链路堆栈溢出