在 C# 中将用户名转换为 SID
Converting username to SID in C#
我正在尝试使用此代码将 Windows 用户名(采用经典 .\username
形式)转换为 SID 对象:
NTAccount account = new NTAccount(".\MyUser");
SecurityIdentifier sid = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
但是,在执行最后一条指令时,我不断收到以下异常:
System.Security.Principal.IdentityNotMappedException: 'Some or all
identity references could not be translated.'
我做错了什么?
经过反复试验后回答我自己的问题:
代码是正确的,但翻译功能似乎不支持 shorthand .
以指示该帐户是本地帐户而不是域中的帐户。因此,如果您的用户名以 .\
开头,则需要将点替换为机器名称。以下代码工作正常:
public static SecurityIdentifier usernameToSid(string user)
{
if (user.StartsWith(@".\"))
{
user = user.Replace(@".\", Environment.MachineName + @"\");
}
NTAccount account = new NTAccount(user);
return (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
}
我正在尝试使用此代码将 Windows 用户名(采用经典 .\username
形式)转换为 SID 对象:
NTAccount account = new NTAccount(".\MyUser");
SecurityIdentifier sid = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
但是,在执行最后一条指令时,我不断收到以下异常:
System.Security.Principal.IdentityNotMappedException: 'Some or all identity references could not be translated.'
我做错了什么?
经过反复试验后回答我自己的问题:
代码是正确的,但翻译功能似乎不支持 shorthand .
以指示该帐户是本地帐户而不是域中的帐户。因此,如果您的用户名以 .\
开头,则需要将点替换为机器名称。以下代码工作正常:
public static SecurityIdentifier usernameToSid(string user)
{
if (user.StartsWith(@".\"))
{
user = user.Replace(@".\", Environment.MachineName + @"\");
}
NTAccount account = new NTAccount(user);
return (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
}