VBS脚本获取安全标识符SID(Security Identifiers)的方法-阿里云开发者社区

开发者社区> zting科技> 正文

VBS脚本获取安全标识符SID(Security Identifiers)的方法

简介:
+关注继续查看

一、SID简介   
    SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,原因是该帐户 具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。
    一个完整的SID包括:
    • 用户和组的安全描述 
    • 48-bit的ID authority 
    • 修订版本 
    • 可变的验证值Variable sub-authority values 
例:S-1-5-21-343818398-299502267-839522115-500
参考资料:http://www.5dmail.net/html/2004-8-1/200481181008.htm

二、VBS脚本获取SID
    方法一:

Set objNetwork = CreateObject("Wscript.Network")
strComputer 
= objNetwork.ComputerName'获取当前的机器名
strUserName=objNetwork.UserName'获取当前的用户名
Set objLocalSam =GetObject("WinNT://" & strComputer & "/" & strUserName)'这里做了修改,scottlocke中默认strUserName为"Administrator"是不保险的
Wscript.echo SIDArray(objLocalSam.objectSID)

Function SIDArray(bar)
  
' Converts Binary Array into Human readable eg: S-1-5-21-XXXXX-XXXXX-XXXXX-XXX
  dim seperator,sid,length
  seperator 
= ""
  sid 
= ""
  
for length = 1 to lenb(bar)
    sid 
= sid & seperator & right("0" & hex(ascb(midb(bar,length,1))),2)
    seperator 
= ","
  
Next
  SIDArray 
= sid
  SID 
= Split(SIDArray,",")

' Convert into standard viewable format - little endian format for 4 byte groups
SID1 = (HexToDec(Mid(SID(15), 11))*268435456+ (HexToDec(Mid(SID(15), 22))*16777216+ (HexToDec(Mid(SID(14), 11))*1048576+ (HexToDec(Mid(SID(14), 22))*65536+ (HexToDec(Mid(SID(13), 11))*4096+ (HexToDec(Mid(SID(13), 22))*256+ (HexToDec(Mid(SID(12), 11))*16+ HexToDec(Mid(SID(12), 22))
SID2 
= (HexToDec(Mid(SID(19), 11))*268435456+ (HexToDec(Mid(SID(19), 22))*16777216+ (HexToDec(Mid(SID(18), 11))*1048576+ (HexToDec(Mid(SID(18), 22))*65536+ (HexToDec(Mid(SID(17), 11))*4096+ (HexToDec(Mid(SID(17), 22))*256+ (HexToDec(Mid(SID(16), 11))*16+ HexToDec(Mid(SID(16), 22))
SID3 
= (HexToDec(Mid(SID(23), 11))*268435456+ (HexToDec(Mid(SID(23), 22))*16777216+ (HexToDec(Mid(SID(22), 11))*1048576+ (HexToDec(Mid(SID(22), 22))*65536+ (HexToDec(Mid(SID(21), 11))*4096+ (HexToDec(Mid(SID(21), 22))*256+ (HexToDec(Mid(SID(20), 11))*16+ HexToDec(Mid(SID(20), 22))
RID 
= (HexToDec(Mid(SID(27), 11))*268435456+ (HexToDec(Mid(SID(27), 22))*16777216+ (HexToDec(Mid(SID(26), 11))*1048576+ (HexToDec(Mid(SID(26), 22))*65536+ (HexToDec(Mid(SID(25), 11))*4096+ (HexToDec(Mid(SID(25), 22))*256+ (HexToDec(Mid(SID(24), 11))*16+ HexToDec(Mid(SID(24), 22))

' Cheating here by just prepending the S-1-5-21-
SIDArray = "S-1-5-21-" & SID1 & "-" & SID2 & "-" & SID3 & "-" & RID
End Function 

Function HexToDec(ByVal sHex)
HexToDec 
= "" & CLng("&H" & sHex)
End Function


参考资料:http://www.scottlocke.net/vbscript-to-retrieve-sid.html

方法二:

Function ShowSID(strUser)
    
On Error Resume Next
    
Dim oWMI, oAs, oA, sSid
    
Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
    
If strUser <> "" Then
        
Set oAs = oWMI.ExecQuery("Select SID From Win32_Account" & _
                  
" WHERE SIDType=1 AND Name='" & strUser & "'")
        
For Each oA In oAs
            sSid
= Mid(oA.SID, InStrRev(oA.SID, "-"+ 1)
            WScript.Echo 
"Short SID: " & sSid & " (" & HEX(sSid) & "H)"
        
Next
    
Else
        
Set oAs = oWMI.ExecQuery("Select Name, SID From Win32_Account WHERE SIDType=1")
        
For Each oA In oAs
            WScript.Echo 
"User: " & oA.Name & _
                    vbCrLf 
& vbTab & "SID: " & oA.SID
        
Next
    
End If

    
Set oA = Nothing
    
Set oAs = Nothing
    
Set oWMI = Nothing
    
If Err.Number <> 0 Then
        WScript.Echo 
"Error ocurred: " & Err.Description
        Err.Clear
    
End If
End Function



本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2007/10/17/927315.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python零基础学习笔记(五)—— 标识符
简单的说就是一串字符串(但字符串未必是标识符) 规则: 只能由子母/数字/下划线组成 开头不能是数字 不能是关键字['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'conti...
1427 0
Java基础-02总结关键字,标识符,注释,常量进制,变量数据类型
你需要的是什么,直接评论留言。 获取更多资源加微信公众号“Java帮帮” (是公众号,不是微信好友哦) 还有“Java帮帮”今日头条号,技术文章与新闻,每日更新,欢迎阅读 学习交流请加Java帮帮交流QQ群553841695 分享是一种美德,分享更快乐! 1:关键字(掌握) (1)被Java语言赋予特定含义的单词(2)特点:全部小写。(3)注意事项:
1349 0
VBScript脚本运用(脚本程序与宿主程序的交互)
    做过工控的人都知道,对脚本语言的支持是标准组态软件应具备的一个基本功能(如iFix,组态王等)。
608 0
+关注
2971
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载