4

Windows 7 の Python で (win32com 経由で) WMI を使用すると厄介な問題に遭遇しました。これに対する解決策を見つけることができませんでした。

これが私のコードです:

from win32com.client import GetObject

def get_printers(computer):
    """ Get a list of printers from the specified computer name. """
    wmiservice = GetObject(r"winmgmts:{impersonationLevel=impersonate}!\\" + computer + r"\root\cimv2")
    return wmiservice.ExecQuery("Select * from Win32_Printer")

for printer in get_printers("ps2"):
    print printer.Name

これは、Windows XP でうまく機能します。しかし、これを Windows 7 で実行すると、惨めに失敗します。

Traceback (most recent call last):
  File "C:\Python27\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Python27\sample\temp2.py", line 8, in <module>
    for printer in get_printers("ps2"):
  File "C:\Python27\sample\temp2.py", line 5, in get_printers
    wmiservice = GetObject(r"winmgmts:{impersonationLevel=impersonate}!\\" + computer + r"\root\cimv2")
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 72, in GetObject
    return Moniker(Pathname, clsctx)
  File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 87, in Moniker
    moniker, i, bindCtx = pythoncom.MkParseDisplayName(Pathname)
com_error: (-2147024891, 'Access is denied.', None, None)

Win 7 で考えられるすべてを試しました。ファイアウォールを無効にし (ウイルス スキャナーなし)、DCOM が有効であることを確認し、WMI が有効であることを確認し、UAC を無効にしました。どんな助けでも大歓迎です。

注: Windows 7 Ultimate x86 (および Windows XP SP3) の下で、pywin32 ビルド 215 で Python 2.7.1 を使用しています。

4

2 に答える 2

2

結局のところ、問題は DCOM/WMI/UAC/ファイアウォールとは関係ありませんでした。本当に驚いたのは、これらの障害が発生したときに Win 7 PC のイベント ログに何も報告されなかったことです。

私が気付いたのは、元の問題と同様に、Win 7 からの発信接続が Access Denied を報告したことです。しかし、Win 7 PC (上記と同じ python スクリプト) への着信接続が RPC サーバーを利用できないと報告していることにも気付きました。他の PC (Win 7 以外) の PC も、イベント ログに kerberos エラー (ID 4) を報告します。

問題は、私たちのドメイン、特にこの Win 7 PC の Active Directory に異常があることが判明しました。何らかの理由で、Active Directory はこの名前の PC が複数あると誤って認識しました。これが kerberos イベント ログのソースです。

うまくいった修正は、Win 7 PC をドメインから外し、PC を新しい名前に変更してから、PC をドメインに戻すことでした。

于 2011-02-11T19:53:49.083 に答える
0

エラー コード-2147024891は DCOM の障害によるものです。WMI に接続する Windows Vista 以降では、Windows ファイアウォール、ユーザー アカウント制御 (UAC)、および DCOM の設定を変更する必要があります。これらの問題に対処するには、これらの記事を参照してください。

于 2011-02-11T19:40:34.177 に答える