2017-08-03 66 views
0

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 

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

  1. 私が管理者ユーザーにアクセス拒否例外を取得するのはなぜ?これをどのようにデバッグできますか?
  2. リモートUACを無効にすることは厳密に必要ですか?
  3. 管理者アカウントを使用しているか、管理者グループのユーザーはやむを得ないですか?
+0

する必要があります:ms.Connect();それをManagementObjectSearcherに渡す前に、あなたのvarクエリラインの直前に置いておくのが理想的です。使用する資格情報を教えても、そのユーザーとして接続しようとするのを忘れました。 UACを無効にする必要はありません。可能であれば、UACを実行しないでください。最後に、これは、呼び出し側のマシンがログインしているユーザーに依存します。アプリケーションがドメイン/管理者(ローカル管理者ではない)としてログインしている場合、「管理者」はリモートPCを呼び出すことができ、認証情報を渡す必要はありません。 – Scott

+0

もちろん、両方のマシンにアクセスする権限を持つ他のユーザーも動作するはずですが、これはネットワークのADセキュリティ権限の問題になります。 https://msdn.microsoft.com/en-us/library/system.management.managementscope(v=vs.110).aspx – Scott

+0

@Scott、 1. ms.Connect()を呼び出すと、例外に影響しません。さらに、それはroot \ cimv2名前空間上で動作しません。 2.マシン管理者はリモートUACを無効にする必要はありませんが、管理者グループの他のローカルユーザーにはそれが必要です。 3.私はすでにセキュリティ権限のものであることに気づきました – pitermarx

答えて

0

私はその一部を持っていると思います。 PacketPrivacyオプションを使用すると

new ConnectionOptions 
{ 
    Username = ".\\localAdministrator", 
    SecurePassword = Secure("localAdminPwd"), 
    Authentication = AuthenticationLevel.PacketPrivacy 
} 

は、何よりも例外が存在しない、と私はローカルの管理者(Administratorsグループのユーザーだけ)を使用することができます。

私はこのオプションが何をしているのか、それがなぜ必要なのかよく分かりませんが、私の主な問題を解決しました。誰かがこのことを十分に理解して説明するなら、私は答えを受け入れたものとしてマークすることができます。

どのようなアクセス許可が必要であるかを正確に調べるためのアクセス許可については引き続き検討します。

関連する問題