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 ),  1 1 )) * 268435456 +  (HexToDec( Mid (SID( 15 ),  2 2 )) * 16777216 +  (HexToDec( Mid (SID( 14 ),  1 1 )) * 1048576 +  (HexToDec( Mid (SID( 14 ),  2 2 )) * 65536 +  (HexToDec( Mid (SID( 13 ),  1 1 )) * 4096 +  (HexToDec( Mid (SID( 13 ),  2 2 )) * 256 +  (HexToDec( Mid (SID( 12 ),  1 1 )) * 16 +  HexToDec( Mid (SID( 12 ),  2 2 ))
SID2 
=  (HexToDec( Mid (SID( 19 ),  1 1 )) * 268435456 +  (HexToDec( Mid (SID( 19 ),  2 2 )) * 16777216 +  (HexToDec( Mid (SID( 18 ),  1 1 )) * 1048576 +  (HexToDec( Mid (SID( 18 ),  2 2 )) * 65536 +  (HexToDec( Mid (SID( 17 ),  1 1 )) * 4096 +  (HexToDec( Mid (SID( 17 ),  2 2 )) * 256 +  (HexToDec( Mid (SID( 16 ),  1 1 )) * 16 +  HexToDec( Mid (SID( 16 ),  2 2 ))
SID3 
=  (HexToDec( Mid (SID( 23 ),  1 1 )) * 268435456 +  (HexToDec( Mid (SID( 23 ),  2 2 )) * 16777216 +  (HexToDec( Mid (SID( 22 ),  1 1 )) * 1048576 +  (HexToDec( Mid (SID( 22 ),  2 2 )) * 65536 +  (HexToDec( Mid (SID( 21 ),  1 1 )) * 4096 +  (HexToDec( Mid (SID( 21 ),  2 2 )) * 256 +  (HexToDec( Mid (SID( 20 ),  1 1 )) * 16 +  HexToDec( Mid (SID( 20 ),  2 2 ))
RID 
=  (HexToDec( Mid (SID( 27 ),  1 1 )) * 268435456 +  (HexToDec( Mid (SID( 27 ),  2 2 )) * 16777216 +  (HexToDec( Mid (SID( 26 ),  1 1 )) * 1048576 +  (HexToDec( Mid (SID( 26 ),  2 2 )) * 65536 +  (HexToDec( Mid (SID( 25 ),  1 1 )) * 4096 +  (HexToDec( Mid (SID( 25 ),  2 2 )) * 256 +  (HexToDec( Mid (SID( 24 ),  1 1 )) * 16 +  HexToDec( Mid (SID( 24 ),  2 2 ))

'  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,如需转载请自行联系原作者

目录
相关文章
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
736 0
|
11月前
|
机器学习/深度学习 前端开发 JavaScript
230+本图灵编程高清文字版无水印电子书合集【制作不易,点赞收藏❤️】
今日精选,200余本图灵出版的高质量编程电子书,覆盖编程、系统架构、算法及机器学习等热门领域,助你全面提升技术能力。无论你是初学者还是资深开发者,都能从中找到适合自己的学习资源,从《Python编程:从入门到实践》到《深度学习入门》,每一本书都将是你技术成长道路上的良师益友,帮助你在瞬息万变的技术浪潮中站稳脚跟,稳步前行。
411 2
|
SQL 存储 Ubuntu
打开general_log对性能的影响
打开general_log对性能的影响
1591 0
打开general_log对性能的影响
|
物联网 Java 数据格式
阿里云物联网消息透传设备端payLoad设置问题
由于低配置且资源受限,或者对网络流量有要求的设备,不适合直接构造JSON数据与物联网平台通信,可将原数据透传到物联网平台。本文主要针对文档中未对设备端payLoad的设置进行介绍,初次使用容易出错,结合官方示例对payLoad对象的处理进行介绍。
14864 0
阿里云物联网消息透传设备端payLoad设置问题
|
编解码
笔记本的常见分辨率
笔记本的常见分辨率
阿里云短信服务:国内和国际短信验证码收费价格表
阿里云短信服务:国内和国际短信验证码收费价格表,阿里云短信服务价格表,阿里云短信0.032元一条,阿里云短信价格?阿里云短信怎么收费?阿里云短信多少钱一条,阿里云短信价格0.032元一条。新用户购买阿里云短信套餐包6.9元200条起,价格低至0.032元/条,阿里云短信可用于短信验证码、短信通知和推广短信等,短信套餐包可选200条、2000条、5000条、1.5万条、5万条、20万条、50万条、100万条和300万条
2361 0
阿里云短信服务:国内和国际短信验证码收费价格表
|
编译器
立创EDA一些基础操作
立创EDA一些基础操作
741 0
|
存储 NoSQL Java
阿里云短信服务接入和购买流程
很多用户不知道怎么接入短信,那么接下来就有小编跟大家讲解一下吧
4199 0
阿里云短信服务接入和购买流程
|
存储 弹性计算 Linux
登录阿里云,注册账号|学习笔记
快速学习登录阿里云,注册账号
登录阿里云,注册账号|学习笔记
|
存储 安全 区块链
元宇宙链游系统Dapp开发(NFT GameFi)
NFT作为游戏内资产的一种独一无二的表示,随着时间的推移获得价值,之后可以出售以获取利润。通过支持NFT形式的游戏内收藏品的铸造、购买和交易,数字游戏可以为其消费者提供更逼真的游戏体验。在去中心化交易所,用户可以收集和出售Gaming NFT,获得奖品,甚至兑现他们的代币。
元宇宙链游系统Dapp开发(NFT GameFi)