1

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

私の質問は許可/特権に関連しています:

  1. 管理者ユーザーで AccessDenied 例外が発生するのはなぜですか? どうすればこれをデバッグできますか?
  2. リモート UAC を無効にすることは厳密に必要ですか?
  3. 管理者アカウントまたは管理者グループのユーザーを使用することは避けられませんか?
4

1 に答える 1