管理员对 root\MicrosoftIISV2 的 wmi 查询拒绝访问
Access denied on wmi query to root\MicrosoftIISV2 with Administrator
我正在执行 wmi 查询以检查 IIS 池是否 运行。
通过 powershell,查询有效
Get-WmiObject `
-Credential (Get-Credential) `
-ComputerName MyMachine `
-Namespace root\MicrosoftIISV2 `
-Query "select * from IISApplicationPoolSetting where Name='W3SVC/APPPOLLS/MyPool'"
通过 C#,我得到一个 ManagementException
,错误代码为 AccessDenied
var ms = new ManagementScope($@"\{myMachine}\root\MicrosoftIISV2", new ConnectionOptions
{
Username = $".\Administrator",
SecurePassword = Secure("adminPwd")
});
var query = "SELECT * FROM IISApplicationPoolSetting where name='W3SVC/APPPOLLS/MyPool'";
using (var searcher = new ManagementObjectSearcher(ms, new SelectQuery(query)))
{
var objects = searcher.Get(); // throws here
}
两种情况下的用户都是机器管理员帐户。我希望通过设置正确的权限就不需要这样做。
我还通过对 root\cimv2
命名空间和 Win32_Service
class 进行查询来检查 windows 服务的状态,它在两种方法中都能完美运行.
在我使任何方法起作用之前,我不得不禁用远程 UAC。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
我的问题与permissions/privileges有关:
- 为什么我的 Administrator 用户会出现 AccessDenied 异常?我该如何调试它?
- 绝对有必要禁用远程 UAC 吗?
- 使用管理员帐户或管理员组中的用户是不可避免的吗?
我想我得到了一部分。
new ConnectionOptions
{
Username = ".\localAdministrator",
SecurePassword = Secure("localAdminPwd"),
Authentication = AuthenticationLevel.PacketPrivacy
}
有了 PacketPrivacy 选项,没有例外了,我可以使用本地管理员(只是 Administrators 组中的用户)。
我不确定这个选项的作用以及为什么需要它,但它解决了我的主要问题。如果有人对此有足够的理解来解释我仍然可以将答案标记为已接受。
我会继续探索权限,以找出究竟需要什么权限。
我正在执行 wmi 查询以检查 IIS 池是否 运行。 通过 powershell,查询有效
Get-WmiObject `
-Credential (Get-Credential) `
-ComputerName MyMachine `
-Namespace root\MicrosoftIISV2 `
-Query "select * from IISApplicationPoolSetting where Name='W3SVC/APPPOLLS/MyPool'"
通过 C#,我得到一个 ManagementException
,错误代码为 AccessDenied
var ms = new ManagementScope($@"\{myMachine}\root\MicrosoftIISV2", new ConnectionOptions
{
Username = $".\Administrator",
SecurePassword = Secure("adminPwd")
});
var query = "SELECT * FROM IISApplicationPoolSetting where name='W3SVC/APPPOLLS/MyPool'";
using (var searcher = new ManagementObjectSearcher(ms, new SelectQuery(query)))
{
var objects = searcher.Get(); // throws here
}
两种情况下的用户都是机器管理员帐户。我希望通过设置正确的权限就不需要这样做。
我还通过对 root\cimv2
命名空间和 Win32_Service
class 进行查询来检查 windows 服务的状态,它在两种方法中都能完美运行.
在我使任何方法起作用之前,我不得不禁用远程 UAC。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
我的问题与permissions/privileges有关:
- 为什么我的 Administrator 用户会出现 AccessDenied 异常?我该如何调试它?
- 绝对有必要禁用远程 UAC 吗?
- 使用管理员帐户或管理员组中的用户是不可避免的吗?
我想我得到了一部分。
new ConnectionOptions
{
Username = ".\localAdministrator",
SecurePassword = Secure("localAdminPwd"),
Authentication = AuthenticationLevel.PacketPrivacy
}
有了 PacketPrivacy 选项,没有例外了,我可以使用本地管理员(只是 Administrators 组中的用户)。
我不确定这个选项的作用以及为什么需要它,但它解决了我的主要问题。如果有人对此有足够的理解来解释我仍然可以将答案标记为已接受。
我会继续探索权限,以找出究竟需要什么权限。