0
我正在做一個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組中的用戶無法避免?
您需要: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