2013-02-04 3 views
2

Я использую WMI для подключения к моей лабораторной машине в качестве администратора домена. Затем я запускаю эту командную строку для создания принтера:Не удается установить принтер по умолчанию на удаленном компьютере с помощью prnmngr.vbs

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

} 

Может кто-нибудь сказать мне, почему вторая командная строка не настройки принтера на удаленном компьютере, принтер по умолчанию?

+0

У вас есть сообщения об ошибке? Я попытался бы сделать то же самое, используя PSTOOLS и Process Class. Это очень странно, но может иметь какое-то отношение к групповым политикам. У меня были аналогичные проблемы в прошлом с WMI при попытке запуска файлов установщика Windows удаленно. Это блокировало меня от этого, если профиль учетной записи администратора уже был на удаленном компьютере. Вы можете попробовать запустить пакетный файл на машине с помощью своих команд. Удачи. – Derek

+0

Спасибо за ответ Дерек. Я обновил свой оригинальный пост с ответом на ваш вопрос. Я не вижу никаких ошибок при запуске сценария удаленно. – Bruce

+0

Я проверил контроллер домена, но не смог найти групповые политики, которые объясняли бы то, что я вижу. Я попробовал нового пользователя с правами администратора, и сценарий все еще не удался. Сейчас я работаю над этой проблемой с консольным приложением, которое я скопировал на лабораторную машину. Я попробую PsTools, если никакое другое удаленное решение не представится в ближайшее время, но я действительно хотел бы понять, почему я это вижу. – Bruce

ответ

0

Надеюсь, что это поможет. Я бы посоветовал вам создать командный файл во время выполнения с вашими двумя командами и таким образом создать процесс. Но на данный момент проверить окончательную команду у вас есть проблемы с таким:

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

Двумя отличиями между вашим кодом и моими являются линии ObjectGetOptions и EnablePrivileges. К сожалению, в том числе эти строки не решают проблему. Это вывод при запуске кода - 'cscript C: \ Windows \ System32 \ Printing_Admin_Scripts \ en-US \ prnmngr.vbs -t -p Test002 Исходящие параметры: Идентификатор процесса: 5600 Создание возвращаемого процесса: 0 ' – Bruce

+0

Это означает, что процесс был создан без ошибок. Это действительно странно. Жаль, что это не сработало. – Derek

+0

Проверьте эту ссылку: - http://stackoverflow.com/questions/6388503/change-default-printer-within-wpf-application – Derek