Я делаю запрос wmi, чтобы проверить, работает ли пул IIS. Через powershell запрос работает
Get-WmiObject `
-Credential (Get-Credential) `
-ComputerName MyMachine `
-Namespace root\MicrosoftIISV2 `
-Query "select * from IISApplicationPoolSetting where Name='W3SVC/APPPOLLS/MyPool'"
Через С# я получаю ManagementException
с ErrorCode 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
}
В обоих случаях пользователем является учетная запись администратора машины. Я надеюсь, что это не понадобится, установив правильные разрешения.
Я также проверяю состояние служб Windows, выполняя запрос к пространству имен root\cimv2
и классу Win32_Service
, и он отлично работает в обоих подходах.
Прежде чем я смог заставить работать какой-либо подход, мне пришлось отключить удаленный UAC.
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
Мои вопросы связаны с разрешениями/привилегиями:
- Почему я получаю исключение AccessDenied Exception с пользователем-администратором? Как я могу отладить это?
- Отключение удаленного UAC строго необходимо?
- Является ли использование учетной записи администратора или пользователя в группе администраторов неизбежным?