2

WMI を使用して、ドメイン管理者としてラボ マシンに接続しています。次に、次のコマンド ラインを実行してプリンターを作成します。

cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -a -p Test002 -m "Canon Inkjet iP100 series" -r FAKE002

それはうまくいきます。

次に、次のコマンド ラインを実行して、プリンターを既定として設定します。

cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -t -p Test002

それはまったく機能しません。

関連する詳細:

  • どちらのコマンドラインも同じ方法で実行されます
  • 2 番目のコマンド ラインは、WMI を使用してローカル スコープで実行すると正常に動作します
  • スクリプトを実行しているユーザーには、マシンの管理者権限があり、デフォルトのプリンターを手動で設定できます
  • リモートスコープを作成しているユーザーパラメーターは、ドメイン管理者に属しています。
  • スクリプトをリモートで実行すると、成功が報告されます。エラーは見られません。

リモート WMI を使用して呼び出されたときに、パラメーターが異なる同じスクリプトが機能しない理由について、私は完全に困惑しています。数時間かけて検索しましたが、適切な答えが見つかりませんでした。

リモートマシンに接続しているスコープを作成するために使用している方法は次のとおりです。

public static ManagementScope CreateScope() {
        string nameSpace = @"\\" + Parameters.FQDN + @"\root\cimv2";

        ManagementPath path = new ManagementPath(nameSpace);
        ConnectionOptions Connection = new ConnectionOptions();
        Connection.Username = Parameters.User;  // Username value includes the domain
        Connection.Password = Parameters.Password;
        Connection.Impersonation = ImpersonationLevel.Impersonate;

        return new ManagementScope(path, Connection);

}

2 番目のコマンド ラインでリモート マシンのプリンタがデフォルトのプリンタに設定されない理由を教えてください。

4

1 に答える 1

0

お役に立てれば。実行時に 2 つのコマンドを使用してバッチ ファイルを作成し、その方法でプロセスを作成することをお勧めします。しかし、今のところ、次のように問題を抱えている最終コマンドをテストしてください:-

string Command = @"cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -t -p Test002";

ManagemenConnectionOptions connOptions = new ConnectionOptions();
connOptions.Impersonation = ImpersonationLevel.Impersonate;
connOptions.EnablePrivileges = true;
tScope manScope = new ManagementScope
    (String.Format(@"\\{0}\ROOT\CIMV2", Parameters.FQDN), connOptions);
manScope.Connect();

ObjectGetOptions objectGetOptions = new ObjectGetOptions();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass
    (manScope, managementPath, objectGetOptions);
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = Command; 

ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
Console.WriteLine("Creation of the process returned: " + outParams["returnValue"]);
Console.WriteLine("Process ID: " + outParams["processId"]);
于 2013-02-05T08:50:55.080 に答える