2011-08-05 18 views
8

WMIコード作成ツールを使用して、ネットワークプリンタを追加するコードを作成しています。C#/。NET:ローカルPCアカウントにネットワークプリンタを追加する方法?

http://img13.imageshack.us/img13/9847/wmicodecreatorwin32prin.png

(とにかく私のドメインアカウントの下で)素晴らしい作品を、生成されたコード:

using System; 
using System.Management; 
using System.Windows.Forms; 

namespace WMISample 
{ 
    public class CallWMIMethod 
    { 
     public static void Main() 
     { 
      try 
      { 
       ManagementClass classInstance = 
        new ManagementClass("root\\CIMV2", 
        "Win32_Printer", null); 

       // Obtain in-parameters for the method 
       ManagementBaseObject inParams = 
        classInstance.GetMethodParameters("AddPrinterConnection"); 

       // Add the input parameters. 
       inParams["Name"] = "\\\\PrintServer\\PrinterName"; 

       // Execute the method and obtain the return values. 
       ManagementBaseObject outParams = 
        classInstance.InvokeMethod("AddPrinterConnection", inParams, null); 

       // List outParams 
       Console.WriteLine("Out parameters:"); 
       Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]); 
      } 
      catch(ManagementException err) 
      { 
       MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message); 
      } 
     } 
    } 
} 

しかし、私はローカルPCアカウントにネットワークプリンタを追加する必要があり、すなわち\ PrintServerにアクセスできないドメイン以外のアカウント。

上記のコードには、ドメインユーザー(サービスアカウント)のユーザー名とパスワードはどこに置くことができますか?

私は何時間もグーグルで行ってきましたが、私が探しているものではないリモートマシンにプリンタを追加する方法を示す愚かな記事があります。

(私は現在 PCに、いないリモートPCにリモートプリンタを追加する必要があります。)(警告がログオンユーザーがローカルPCのアカウントであることである。)

誰がどのように知っていますこれは達成できますか?

+0

PrintServerでゲストアカウントを有効にすると便利です。 – Skomski

答えて

1

あなたがそうすることによって、ピア・ツー・ピアの認証を有効にする、プリントサーバー上の同じローカルアカウントを作成することができます...

すなわち、PC1は、ローカルユーザーbob1を持っています。 bob1をプリントサーバー上のユーザーにします。

マッププログラムをpc1のbob1として実行すると、プリンタにアクセスできるはずです。

それは役に立ちますか?

それ以外の場合は、ネットワークプリンタはユーザーごとです...アクセス権のあるドメインユーザー(runas)としてプログラムを実行すると、実際に必要なユーザーセッションではなくユーザーセッションにマップされます。

...これはどうですか? http://www.codescript.co.uk/wmi_connect_as_another_user.htm

...またはscriptomatic? http://www.microsoft.com/download/en/details.aspx?DisplayLang=en&id=12028 (たとえC#ではなく、wmi synatxのものを与えることができます)

+0

残念ながら、プリントサーバー上のユーザーやユーザーのアクセスを変更するアクセス権がありません。私は(私のドメインアカウントへの)読み取りアクセス権しか持っていません。 私はこれらのリンクをチェックしますが、それに応答してその間に他の提案があったかどうかを確認したいだけです。 – JohnnyRockets

+0

おそらくnet useは別のユーザーとしてプリンタマッピングで動作しますか? http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Windows/2000/Q_23440726もしあなたがリンクにアクセスできない場合は、html –

+0

を使用してください - NET USE lpt1 "\\ ws44a03 \ HP Lj1300"/user:ユーザーuser/PERSISTENT:YES –

0

他の回答が削除されています。私はちょうどこれをテストし、それは働いた。ここで私が使用しているクラスを取得するためのリンクですhttps://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User 私のために働いた以下のコードがあります。あなたが見ていると、そこにはユーザーを偽装するためのクラスの実装がさらにいくつかあります。

static void Main(string[] args) 
    { 

     using (new Impersonator("username", "domainName", "myPassword")) 
     { 
      // The following code is executed under the impersonated user. 
      AddPrinterUnc(@"\\PrintServer\printershare"); 
     } 


    } 

    public static void AddPrinterUnc(string printUncPath) 
    { 

      using (ManagementClass oPrinterClass = new ManagementClass(new ManagementPath("Win32_printer"), null)) 
      { 
       using (ManagementBaseObject oInputParameters = oPrinterClass.GetMethodParameters("AddPrinterConnection")) 
       { 
        oInputParameters.SetPropertyValue("Name", printUncPath); 

        oPrinterClass.InvokeMethod("AddPrinterConnection", oInputParameters, null); 

       } 
      } 

    } 
関連する問題