我正在使用VbScript来检索Win32_Service的安全描述符。 我正在使用下面的代码:
SE_DACL_PRESENT = &h4 ACCESS_ALLOWED_ACE_TYPE = &h0 ACCESS_DENIED_ACE_TYPE = &h1 strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_Service") For Each objPrinter in colInstalledPrinters Wscript.Echo "Name: " & objPrinter.Name ' Get security descriptor for printer Return = objPrinter.GetSecurityDescriptor( objSD ) If ( return <> 0 ) Then WScript.Echo "Could not get security descriptor: " & Return wscript.Quit Return End If ' Extract the security descriptor flags intControlFlags = objSD.ControlFlags If intControlFlags AND SE_DACL_PRESENT Then ' Get the ACE entries from security descriptor colACEs = objSD.DACL For Each objACE in colACEs ' Get all the trustees and determine which have access to printer WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then WScript.Echo vbTab & "User has access to printer" ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then WScript.Echo vbTab & "User does not have access to the printer" End If Next Else WScript.Echo "No DACL found in security descriptor" End If Next
但是,每次运行它时,都会收到消息,说明生成的代码是-2147023582,而不是手册中定义的错误代码。
任何人有任何想法? 我正在使用Windows 7专业版64位。
更新:号码是-2147023582。 这可能是某种64位的问题? 这看起来不像一个无符号的整数存储为一个有符号的整数?
-2147023582是错误0x80070522,或“所需的特权不是由客户端持有”。
我怀疑你的脚本是用有限的用户标记而不是用Adminsitrator标记运行的。 您可以从“pipe理员”令牌(即“以pipe理员身份运行”,从pipe理员CMD会话等)尝试脚本,看看它是如何发生的。 我想你会发现你有更多的成功。
我有一个想法…出于某种原因,“模拟人生=模拟,(安全)”特权子句不适用于Windows 7。
尝试使用服务器2003或XP的脚本,看看会发生什么!
我在备份服务器窗口安全日志方面遇到了类似的问题,发现至less在纸面上,所有内容都是根据需要configuration的。 但是,与Win7一起使用时,它不起作用,不build议为什么。
据我所知,没有办法绕过这个。
唯一可能的工作是通过使用pipe理员级用户帐户打开CMD提示/batch file来调用脚本来调用脚本。
我已经在网上查了几个小时,还没有find任何build议如何解决这个问题。 把它放在“用户自定义”Windows上的M $ haft。
希望这可以帮助!