访问被拒绝wmi查询root \ MicrosoftIISV2与管理员
问题描述:
我正在做一个wmi查询来检查IIS池是否正在运行。 通过PowerShell中,查询工作访问被拒绝wmi查询root MicrosoftIISV2与管理员
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([email protected]"\\{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
类进行查询来检查windows服务的状态,并且它在两个方面都能很好地工作。
在我能得到任何方法的工作之前,我必须禁用远程UAC。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
我的问题是有关权限/特权:
- 为什么我得到存取遭拒例外与管理员用户?我怎样才能调试呢?
- 是否严格禁用远程UAC?
- 正在使用管理员帐户或Administrators组中的用户无法避免?
答
我想我有一部分。
new ConnectionOptions
{
Username = ".\\localAdministrator",
SecurePassword = Secure("localAdminPwd"),
Authentication = AuthenticationLevel.PacketPrivacy
}
随着数据包保密选项,没有异常没有了,我可以使用本地管理员(Administrators组中只是一个用户)。
我不确定这个选项有什么作用,为什么需要它,但它解决了我的主要问题。如果任何人都明白这一点足以解释我仍然可以将答案标记为已接受。
我会继续探索权限以准确找出需要什么权限。
您需要:ms.Connect();在将它传递到ManagementObjectSearcher之前 - 理想情况下就在var查询行之前。你已经告诉它使用哪些凭证,但忘记尝试以该用户身份进行连接。禁用UAC不应该是必要的 - 如果可能的话,您应该避免这样做。最后,这取决于呼叫机器登录为的用户。如果应用程序以域名/管理员身份登录(不是本地管理员) - 那么“管理员”将能够呼叫远程PC,并且不需要传递凭证。 – Scott
当然,任何其他有权访问这两台机器的用户也应该可以工作,但这将是网络AD安全许可的事情。 https://msdn.microsoft.com/en-us/library/system.management.managementscope(v=vs.110).aspx – Scott
@Scott, 1.调用ms.Connect()对异常没有影响。此外,它在root \ cimv2命名空间中没有它。 2.的确,机器管理员不需要禁用远程UAC,但管理员组中的其他本地用户确实需要它。 3.我已经注意到这是安全许可的事情 – pitermarx