IISプールが実行されているかどうかを確認するためにwmiクエリを実行しています。クエリが管理者でroot MicrosoftIISV2へのwmiクエリでアクセスが拒否されました
Get-WmiObject `
-Credential (Get-Credential) `
-ComputerName MyMachine `
-Namespace root\MicrosoftIISV2 `
-Query "select * from IISApplicationPoolSetting where Name='W3SVC/APPPOLLS/MyPool'"
経由のC#を作品のPowerShell経由 は、私は両方のケースでは、ユーザーがマシンの管理者アカウントでのErrorCode 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
}
でManagementException
を取得します。私はこれが正しいアクセス権を設定することによって必要ではないことを望んでいる。
また、root\cimv2
名前空間とWin32_Service
クラスへのクエリを実行することによってWindowsサービスのステータスをチェックしています。これは両方のaproachesで完全に機能します。
私はアプローチがうまくいく前に、リモートUACを無効にする必要がありました。
Set-ItemProperty `
-Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System `
-Name LocalAccountTokenFilterPolicy -Value 1 -Type DWORD
私の質問は権限/特権に関連しています
- 私が管理者ユーザーにアクセス拒否例外を取得するのはなぜ?これをどのようにデバッグできますか?
- リモートUACを無効にすることは厳密に必要ですか?
- 管理者アカウントを使用しているか、管理者グループのユーザーはやむを得ないですか?
する必要があります:ms.Connect();それをManagementObjectSearcherに渡す前に、あなたのvarクエリラインの直前に置いておくのが理想的です。使用する資格情報を教えても、そのユーザーとして接続しようとするのを忘れました。 UACを無効にする必要はありません。可能であれば、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