执行特权操作
特权操作需要安全特权,例如 SeLoadDriverPrivilege(脚本 API 常量中的 wbemPrivilegeLoadDriver),必须为加载设备驱动程序的帐户启用该特权。 无法通过 WMI 向管理员或用户添加特权,只能启用帐户已有的特权。 有关特权列表,请参阅 Privilege_Constants。
默认情况下,计算机上的本地用户可从 WMI 存储库读取静态数据,写入提供程序提供的实例,并执行提供程序方法,除非提供程序强制执行自己的特殊安全要求。 仅管理员可以连接到远程计算机、更改安全描述符或更改静态 WMI 存储库数据,例如 WMI 类定义。 为远程连接启用所有特权。 有关详细信息,请参阅保护远程 WMI 连接。
C++ 的特权常量与自动化语言(如 Visual Basic)使用的特权常量不同。 脚本必须使用常量的值而非名称。 有关详细信息,请参阅使用 C++ 执行特权操作或使用 VBScript 执行特权操作。
使用 WMI 时出现拒绝访问错误的一个常见原因是缺少操作的启用特权,例如获取 Win32_NTEventlogFile 的所有实例。 不启用 SeSecurity 特权,便无法访问安全日志文件。
以下 VBScript 代码示例演示如何在名字对象字符串中设置 SeSecurity 特权。 在名字对象中使用时,括号中的特权名会去掉开头的“Se”。 有关详细信息,请参阅构造名字对象字符串。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Security)}!\\" _
& strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile " _
& "Where LogFileName='Security'")
For Each LogFile in colFiles
Wscript.Echo LogFile.NumberOfRecords
Next
相关主题