计算 WMI 中的位图位值 class
Calculating BitMaps BitValues in a WMI class
我正在使用 "Win32_NetworkLoginProfile " class 在我的本地系统上提取用户信息。当我在我的机器的 Powershell 中执行 "Get-WmiObject -class Win32_NetworkLoginProfile | Select * " 时,我得到 Flags = 513。我已经检查了 MSDN link (https://msdn.microsoft.com/en-us/library/aa394221%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) 以获得此 class 的详细信息。我在这里有一个问题:
Flags = 513 与 Flags 的 BitValues 中的任何值都不匹配。我怎么知道513代表什么?
谢谢。
Flags = 513
二进制格式是10 0000 0001
,所以可以看到第0和第9位是on,根据link映射如下:
bit 0 = Script
bit 1 = Account Disabled
bit 3 = Home Dir Required
bit 4 = Lockout
bit 5 = Password Not Required
bit 6 = Paswword Can't Change
bit 7 = Encrypted Test Password Allowed
bit 8 = Temp Duplicate Account
bit 9 = Normal Account
bit 11 = InterDomain Trust Account
bit 12 = WorkStation Trust Account
bit 13 = Server Trust Account
bit 16 = Don't Expire Password
bit 17 = MNS Logon Account
bit 18 = Smartcard Required
bit 19 = Trusted For Delegation
bit 20 = Not Delegated
bit 21 = Use DES Key Only
bit 22 = Don't Require Preauthorization
bit 23 = Password Expired
最后513
对应Script
(执行的登录脚本。LAN Manager 2.0必须设置此值,Windows NT/Windows 2000)和Normal Account
(代表典型用户的默认帐户类型)。
顺便说一句,您可以从 属性 限定词中检索地图,看看 .
您可以按照以下步骤实现一个功能,根据传入的数字从地图返回值。假设已经创建了一个包含位数字作为键和相应值的字典。 WMI returns 值 513
为字符串,您应该将其转换为数字,假设它是 v
变量。创建一个从 31
到 0
的循环,比方说 i
变量。在每次迭代中,如果 v
大于或等于 2 ^ i
,则将带有 i
键的项从字典添加到输出数组,并将 v
减少 2 ^ i
.结果,输出数组包含字典中的项目,这些项目的键对应于传入值中打开的位数。
我必须在 python 中完成同样的任务,但您可以轻松地将其转换为其他语言:
def bit_mapper(flag,goal="translate",check_bit=int):
bit_map_dic = {
"0":"Script",
"1":"Account Disabled",
"3":"Home Dir Required",
"4":"Lockout",
"5":"Password Not Required",
"6":"Paswword Can't Change",
"7":"Encrypted Test Password Allowed",
"8":"Temp Duplicate Account",
"9":"Normal Account",
"11":"InterDomain Trust Account",
"12":"WorkStation Trust Account",
"13":"Server Trust Account",
"16":"Don't Expire Password",
"17":"MNS Logon Account",
"18":"Smartcard Required",
"19":"Trusted For Delegation",
"20":"Not Delegated",
"21":"Use DES Key Only",
"22":"Don't Require Preauthorization",
"23":"Password Expired"
}
flag=int(flag)
map="{0:b}".format(flag)
if goal == "translate":
temp = []
for bit in enumerate(map):
if bit[1] is "1":
temp.append(str(bit_map_dic[str(bit[0])]))
return temp
elif goal == "check":
for bit in enumerate(map):
if bit[0] == int(check_bit) and bit[1] is "1":
return True
return False
调用此函数的两种方法..
1.) 如果你想将 Flag 映射到单词:
print bit_mapper("513")
2.) 检查是否设置了一个位
print bit_mapper("513",goal="check",check_bit="9")
我正在使用 "Win32_NetworkLoginProfile " class 在我的本地系统上提取用户信息。当我在我的机器的 Powershell 中执行 "Get-WmiObject -class Win32_NetworkLoginProfile | Select * " 时,我得到 Flags = 513。我已经检查了 MSDN link (https://msdn.microsoft.com/en-us/library/aa394221%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) 以获得此 class 的详细信息。我在这里有一个问题:
Flags = 513 与 Flags 的 BitValues 中的任何值都不匹配。我怎么知道513代表什么?
谢谢。
Flags = 513
二进制格式是10 0000 0001
,所以可以看到第0和第9位是on,根据link映射如下:
bit 0 = Script
bit 1 = Account Disabled
bit 3 = Home Dir Required
bit 4 = Lockout
bit 5 = Password Not Required
bit 6 = Paswword Can't Change
bit 7 = Encrypted Test Password Allowed
bit 8 = Temp Duplicate Account
bit 9 = Normal Account
bit 11 = InterDomain Trust Account
bit 12 = WorkStation Trust Account
bit 13 = Server Trust Account
bit 16 = Don't Expire Password
bit 17 = MNS Logon Account
bit 18 = Smartcard Required
bit 19 = Trusted For Delegation
bit 20 = Not Delegated
bit 21 = Use DES Key Only
bit 22 = Don't Require Preauthorization
bit 23 = Password Expired
最后513
对应Script
(执行的登录脚本。LAN Manager 2.0必须设置此值,Windows NT/Windows 2000)和Normal Account
(代表典型用户的默认帐户类型)。
顺便说一句,您可以从 属性 限定词中检索地图,看看
您可以按照以下步骤实现一个功能,根据传入的数字从地图返回值。假设已经创建了一个包含位数字作为键和相应值的字典。 WMI returns 值 513
为字符串,您应该将其转换为数字,假设它是 v
变量。创建一个从 31
到 0
的循环,比方说 i
变量。在每次迭代中,如果 v
大于或等于 2 ^ i
,则将带有 i
键的项从字典添加到输出数组,并将 v
减少 2 ^ i
.结果,输出数组包含字典中的项目,这些项目的键对应于传入值中打开的位数。
我必须在 python 中完成同样的任务,但您可以轻松地将其转换为其他语言:
def bit_mapper(flag,goal="translate",check_bit=int):
bit_map_dic = {
"0":"Script",
"1":"Account Disabled",
"3":"Home Dir Required",
"4":"Lockout",
"5":"Password Not Required",
"6":"Paswword Can't Change",
"7":"Encrypted Test Password Allowed",
"8":"Temp Duplicate Account",
"9":"Normal Account",
"11":"InterDomain Trust Account",
"12":"WorkStation Trust Account",
"13":"Server Trust Account",
"16":"Don't Expire Password",
"17":"MNS Logon Account",
"18":"Smartcard Required",
"19":"Trusted For Delegation",
"20":"Not Delegated",
"21":"Use DES Key Only",
"22":"Don't Require Preauthorization",
"23":"Password Expired"
}
flag=int(flag)
map="{0:b}".format(flag)
if goal == "translate":
temp = []
for bit in enumerate(map):
if bit[1] is "1":
temp.append(str(bit_map_dic[str(bit[0])]))
return temp
elif goal == "check":
for bit in enumerate(map):
if bit[0] == int(check_bit) and bit[1] is "1":
return True
return False
调用此函数的两种方法..
1.) 如果你想将 Flag 映射到单词:
print bit_mapper("513")
2.) 检查是否设置了一个位
print bit_mapper("513",goal="check",check_bit="9")