我正在执行wmi查询以检查IIS池是否正在运行。 通过powershell,查询工作
Get-WmiObject `
-Credential (Get-Credential) `
-ComputerName MyMachine `
-Namespace root\MicrosoftIISV2 `
-Query "select * from IISApplicationPoolSetting where Name='W3SVC/APPPOLLS/MyPool'"
通过C#,我得到一个带有ErrorCode 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
类来检查Windows服务的状态,它在两种方法中都能很好地工作。
在我开始使用任何方法之前,我必须禁用远程UAC。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
我的问题与权限/特权有关:
答案 0 :(得分:0)
我想我得到了它的一部分。
new ConnectionOptions
{
Username = ".\\localAdministrator",
SecurePassword = Secure("localAdminPwd"),
Authentication = AuthenticationLevel.PacketPrivacy
}
使用PacketPrivacy选项,不再有例外,我可以使用本地管理员(只是Administrators组中的用户)。
我不确定这个选项是做什么的,为什么需要它,但它解决了我的主要问题。如果有人能够理解这一点,那么我仍然可以将答案标记为已接受。
我将继续探索权限,以确切了解所需的权限。