我正在执行 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
类进行查询来检查 Windows 服务的状态,并且它在两种方法中都能完美运行。
在我可以让任何方法工作之前,我必须禁用远程 UAC。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
我的问题与权限/特权有关:
- 为什么管理员用户会出现 AccessDenied 异常?我该如何调试呢?
- 是否有必要禁用远程 UAC?
- 使用管理员帐户或管理员组中的用户是否不可避免?