获取visual basic脚本上最后一次设置密码的日期



我正在试图获取vbs上的最后一个密码日期。我正在使用这个代码

On Error Resume Next
Wscript.Echo Day(now) & "/" & Month(Now) & "/" & Year(Now)
strComputer = "."
Set objWMIService= GetObject("winmgmts:"  & "{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery  ("Select * from Win32_UserAccount Where LocalAccount = True")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("D:users.txt", True)
For Each objItem in colItems
Do While True
if objItem.Name= "Administrator" then Exit Do
if objItem.Name= "Guest" then Exit Do
if objItem.Name= "Admin" then Exit Do
if objItem.PasswordChangeable= "False" then Exit Do
'Wscript.Echo "Name: " & objItem.Name
objFile.Write objItem.Name & vbCrlf
objFile.Write objItem.PasswordChangeable & vbCrlf
Exit Do
Loop
Next

但我无法访问这些数据,

有两种方法。似乎您正试图通过循环遍历WMI查询的某些结果并传递一组条件来筛选或排除这些结果。这就是应该的样子。

On Error Resume Next
WScript.Echo Day(Now) & "/" & Month(Now) & "/" & Year(Now)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_UserAccount")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("D:users.txt", True)
For Each objItem in colItems
If objItem.Name = "Administrator" Then Continue
If objItem.Name = "Guest" Then Continue
If objItem.Name = "Admin" Then Continue
If objItem.PasswordChangeable = "False" Then Continue
'WScript.Echo "Name: " & objItem.Name
objFile.WriteLine(objItem.Name)
objFile.WriteLine(objItem.PasswordChangeable)
Next
objFile.Close
Set objFSO = Nothing
Set colItems = Nothing
Set objWMIService = Nothing

然而,你在这里做了很多额外的工作。如果真的想要获取整个WMI类,那么应该跳过ExecQuery,从一开始就获取整个类。看起来像这样。

On Error Resume Next
WScript.Echo Day(Now) & "/" & Month(Now) & "/" & Year(Now)
strComputer = "."
Set colUsers = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2:Win32_UserAccount")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("D:users.txt", True)
For Each objUser in colUsers
If objUser.Name = "Administrator" Then Continue
If objUser.Name = "Guest" Then Continue
If objUser.Name = "Admin" Then Continue
If objUser.PasswordChangeable = "False" Then Continue
'WScript.Echo "Name: " & objUser.Name
objFile.WriteLine(objUser.Name)
objFile.WriteLine(objItem.PasswordChangeable)
Next
objFile.Close
Set objFSO = Nothing
Set colUsers = Nothing
Set objWMIService = Nothing

正如您所看到的,您节省了一些按键和一些CPU周期,但您仍然让WMI为您提供了整个类中充满您不想要的数据。这就是查询真正发挥作用的地方。您应该使用查询将结果集限制为仅包含您要查找的信息。

On Error Resume Next
WScript.Echo Day(Now) & "/" & Month(Now) & "/" & Year(Now)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" &_
"{impersonationLevel=impersonate}!\" & strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery( _
"Select * from Win32_UserAccount " &_
"Where LocalAccount = True " &_
"And PasswordChangeable = True " &_
"And Name <> 'Administrator' " &_
"And Name <> 'Guest' " &_
"And Name <> 'Admin'")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("D:users.txt", True)
For Each objItem in colItems
'WScript.Echo "Name: " & objItem.Name
objFile.WriteLine(objItem.Name)
objFile.WriteLine(objItem.PasswordChangeable)
Next
objFile.Close
Set objFSO = Nothing
Set colItems = Nothing
Set objWMIService = Nothing

这是一种更好的方法,您可以让WMI而不是脚本解释器来处理繁重的工作。此外,您应该利用File对象的WriteLine方法。它为您处理行尾。

最新更新