Получение принтеров, на которые у меня есть права доступа

У меня есть сервер, когда пользователь входит в систему, выполняется сценарий входа, который загружает принтеры, на которые пользователь имеет права. Это делается с помощью GPO. Таким образом, когда пользователь входит в систему, он может видеть принтеры, которые ему разрешено использовать.

Что мне нужно сделать, так это загрузить эти принтеры в приложение C#. Я пытался перечислить свойства контейнера групповой политики с помощью фильтра (objectClass=groupPolicyContainer), но не могу найти принтеры, к которым у меня (текущего пользователя) есть доступ.


person imrn    schedule 28.02.2012    source источник
comment
Кажется очень непрактичным. Возможно, вы сможете найти объект принтера, но как пользователь сможет найти принтер обратно?   -  person Hans Passant    schedule 28.02.2012
comment
На самом деле я могу получить принтеры, используя активный каталог, но чтобы быть уверенным, что только те принтеры, на которые у меня есть права, я хочу получить информацию GPO о принтерах для моего пользователя.   -  person imrn    schedule 28.02.2012


Ответы (1)


Вы можете использовать WMI для этого и особенно WIN32_Printer класс:

using System.Management;

namespace WMIQuery
{
  class WmiQuery
  {
    static void Main(string[] args)
    {
      /* On the local computer loged as current user
       */
      ObjectQuery oQuery0 = new ObjectQuery(@"select * from Win32_printer where shared=true");
      ManagementObjectSearcher searcher0 = new ManagementObjectSearcher(oQuery0);

      foreach (ManagementObject queryObj in searcher0.Get())
      {
        Console.WriteLine(String.Format("--> {0} ({1})", queryObj["Name"], queryObj["ShareName"]));
      }
    }
  }
}
person JPBlanc    schedule 28.02.2012
comment
Спасибо за ваш ответ. У меня возникла ситуация, когда мне нужно перечислить принтеры из активного каталога, которые также имеют права доступа для меня, тогда как этот код дает мне список установленных сетевых принтеров. - person imrn; 28.02.2012
comment
Извините, но, насколько я понимаю, содержимое GPO не хранится в Active-Directory. Внутри AD хранятся только ссылки. Содержимое хранится в файловой системе сервера и загружается в реестр (или что-то еще) при входе в систему. - person JPBlanc; 28.02.2012
comment
Итак, как я могу получить информацию реестра о разрешенных принтерах. - person imrn; 01.03.2012
comment
Есть что-то, чего я не понимаю. В вашей среде, как пользователь узнает, разрешен ли ему установленный сетевой принтер или нет. - person JPBlanc; 01.03.2012