簡體   English   中英

無法使用prnmngr.vbs在遠程計算機上設置默認打印機

[英]Unable to set the default printer on a remote machine using prnmngr.vbs

我正在使用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

那根本不起作用。

一些相關的細節:

  • 這兩個命令行都通過相同的方法執行
  • 如果我通過具有本地范圍的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);

}

誰能告訴我為什么第二個命令行未將遠程計算機上的打印機設置為默認打印機?

希望這可以幫助。 我建議您在運行時使用兩個命令創建一個批處理文件,並以這種方式創建一個進程。 但是現在測試最終命令,您將遇到以下麻煩:-

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"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM