仅使用本地信息从SID解析用户名

时间:2016-11-08 15:49:55

标签: c# windows powershell sid

Win32API函数LookupAccountSID()允许解析与SID对应的名称。根据文件: LookupAccountSid function

  

LookupAccountSid函数首先检查已知SID列表,尝试查找指定SID的名称。如果提供的SID与众所周知的SID不对应,则该函数会检查内置和管理定义的本地帐户。接下来,该函数检查主域。主域未识别的安全标识符将根据与其SID前缀对应的受信任域进行检查。

有没有办法只在本地寻找名字?也就是说,如果在调用该函数的PC中找不到该名称,则该函数将失败,而不是检查主域。

编辑:要清楚,我想解析非本地用户的名称,而不访问主域(只检查信息是否已存储在本地)

2 个答案:

答案 0 :(得分:0)

不确定这是否属于你之后但值得一试:

byte[] sid = // your SID byte array
// Convert SID byte array to readable SID string
var sidString = (new SecurityIdentifier(sid, 0)).Value;
var securityIdentifier = new SecurityIdentifier(sidString);
var identity = securityIdentifier.Translate(typeof(NTAccount)).Value;
// ... identity should be domain\user (string)

答案 1 :(得分:0)

您可以使用相关SID查询Win32_UserAccount WMI class本地帐户 - 如果没有返回任何内容,则该帐户在本地计算机上不存在:

$SID = 'S-1-5-21-510807130-1270608819-2073245338-500'
if($user = Get-WmiObject -Class Win32_UserAccount -Filter  "LocalAccount='True' AND SID = '$SID'")
{
    $user.Name
}
相关问题