Win32API函数LookupAccountSID()允许解析与SID对应的名称。根据文件: LookupAccountSid function
LookupAccountSid函数首先检查已知SID列表,尝试查找指定SID的名称。如果提供的SID与众所周知的SID不对应,则该函数会检查内置和管理定义的本地帐户。接下来,该函数检查主域。主域未识别的安全标识符将根据与其SID前缀对应的受信任域进行检查。
有没有办法只在本地寻找名字?也就是说,如果在调用该函数的PC中找不到该名称,则该函数将失败,而不是检查主域。
编辑:要清楚,我想解析非本地用户的名称,而不访问主域(只检查信息是否已存储在本地)
答案 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
}