IIS プールが実行されているかどうかを確認するために wmi クエリを実行しています。PowerShellを介して、クエリが機能します
Get-WmiObject `
-Credential (Get-Credential) `
-ComputerName MyMachine `
-Namespace root\MicrosoftIISV2 `
-Query "select * from IISApplicationPoolSetting where Name='W3SVC/APPPOLLS/MyPool'"
C# 経由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
}
どちらの場合も、ユーザーはマシンの管理者アカウントです。正しい権限を設定することで、これが不要になることを願っています。
root\cimv2
また、名前空間とクラスにクエリを実行して Windows サービスのステータスを確認していますがWin32_Service
、両方のアプローチで完全に機能します。
アプローチを機能させる前に、リモート UAC を無効にする必要がありました。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
私の質問は許可/特権に関連しています:
- 管理者ユーザーで AccessDenied 例外が発生するのはなぜですか? どうすればこれをデバッグできますか?
- リモート UAC を無効にすることは厳密に必要ですか?
- 管理者アカウントまたは管理者グループのユーザーを使用することは避けられませんか?