WMIでリモート端末の情報を取得したいのですが、以下の接続方法だと7割位の
端末でしか接続できず、残り3割は
UnauthorizedAccessException:アクセスが拒否されました。
というエラーによりアクセスが拒否されてしまいます。
拒否されるのはワークグループ環境でもAD環境でも同様のエラーで、
何が原因なのか解らずに途方にくれている状態です。
現状のソースを修正すれば回避できるのか、もしくは別の接続方法が
あるのか、どなたかご教示ください。
Public Function WMI_CONFIG(ByVal strHost As String, ByVal strUser As String, _
ByVal strPass As String, ByRef strErrMsg As String) As Boolean
ReDim WMI_ItemsList(17)
Dim bRet As Boolean = True
'ローカルPCのホスト名取得
Dim strLcHost As String = Dns.GetHostName()
Dim objScope As ManagementScope
'リモートPCへの接続情報設定
Dim conOptions As New ConnectionOptions
With conOptions
.Username = strUser
.Password = strPass
.Authentication = AuthenticationLevel.Default
.Impersonation = ImpersonationLevel.Impersonate
End With
Dim strWMIPath As String = "\\" & strHost & "\root\cimv2"
'ローカル端末かリモート端末かを判別
If String.Compare(strLcHost, 0, strHost, 0, Len(strLcHost)) <> 0 Then
'リモート用の処理
objScope = New ManagementScope(strWMIPath, conOptions)
Else
'ローカル用の処理
objScope = New ManagementScope(strWMIPath)
End If
Try
'端末に接続
objScope.Connect()
Catch ane As ArgumentNullException
strErrMsg = "エラー ArgumentNullException:" & ane.Message
bRet = False
Catch se As Runtime.InteropServices.COMException
strErrMsg = "エラー COMException:" & se.Message
bRet = False
Catch ue As UnauthorizedAccessException
strErrMsg = "エラー UnauthorizedAccessException:" & ue.Message
bRet = False
Catch ex As Exception
strErrMsg = "エラー Exception:" & ex.Message
bRet = False
Finally
objScope = Nothing
conOptions = Nothing
End Try
エラー箇所は、端末接続部分のobjScope.Connect()です。
WinXP で、SP2 とか導入されていませんか?
もしくは、ウィルス関係でソフトウェアのファイアウォールが入って
いるとか・・・
繋がらないマシンは、大抵RPCのポートが塞がっている為だと思います。
OS等環境を見直してください。
以上。
おしょう様
ファイアーウォールは、Symantec Client Firewallを全端末に
導入しています。これがかなりの曲者で導入時から正常に動作しない端末が
複数あり、一度正常にセットアップされても使用中にある日突然動作がおか
しくなったり等あり全然使い物にならないソフトになっている状態です。
繋がらない端末を何台かファイアーウォールを無効にして試してみようと
思います。
レスありがとうございました。
クライアント環境
Windows2000SP4+最新パッチ
WindowsXPproSP1+最新パッチ
情報が取得できない端末でポートの状態を調べてみました。
ファイアーウォールを無効にした状態で、
135番ポートRemote Procedure CallはステータスがListenなので
通信を受けられる状態なので問題ないと思います。
この状態でリモートで端末情報を取得すると、同じエラーで
アクセスが拒否されました エラー番号:5
にて接続することができません。
多分クライアント側の何かが原因になっていると思うので、
引き続き調べてみます。
ツイート | ![]() |