Управління принтерами у PowerShell (частина 3, заключна) - PKI Extensions
Як основу я використав свої попередні напрацювання з SecurityDescriptor у попередньому блозі, коли розбирав питання управління SharePermissions із PowerShell:
Матеріалу у мене на цю тему набралося досить багато, щоб перейнятися в ідею роботи класів WMI і SecurityDescriptor, який не раз намагався посадити мене в калюжу Недоліки, т.к. це був мій перший досвід роботи із функціями. Зараз я значно переробив структуру роботи скрипта (залишивши тільки Core роботи з SecurityDescriptor), додавши віддалене управління (в розумних межах) і, головне (як мені здається), реалізував роботу функцій у конвеєрі. Приклади використання скрипта розпишу трохи нижче. Отже, представляю набір функцій, які реалізовані у скрипті:
- Підключення (мапінг) мережного принтера до користувача;
- Вимкнення мапінгу мережного принтера від користувача;
- Отримання інформації про принтери;
- Встановлення стандартного принтера;
- встановлення принтера для загального користування (розшарування принтера);
- Скасування принтера для загального користування;
Ця секція є базовими можливостями управління принтерами і повністю працездатна в середовищі Windows XP/Windows Server 2003. А ось секція управління ACL списками принтерів доступна тільки в середовищі Windows Vista/Windows Server 2008.
- отримання інформації про права доступу на конкретний принтер, конкретний принтсервер або за списком комп'ютерів;
- Імпорт інформації про права доступу із зовнішнього джерела. Це може бути CSV і XML або інший формат;
- Додавання користувача або групи до ACL список принтераабо всіх принтерів, підключених до принтсервера;
- Видалення користувача або групи з списку ACL принтера або всіх принтерів, які підключені до принтсервера;
- Встановіть користувача або групи в ACL список принтера або всіх принтерів, які підключені до принтера. При цьому всі наявні права доступу будуть видалені та замінені лише одним ACE із правом ManagePrinters.
Для цих функцій повністю реалізовано підтримку віддаленої роботи та роботу в конвеєрі. Синтаксис команд використовується приблизно таке:
- New-NetworkPrinter -Computer -name деComputer - ім'я комп'ютера, до якого підключений мережевий принтерName - ім'я мережі принтера, який слід підключити до користувача
- Remove-NetworkPrinter -Name деName - ім'я примапленого мережного принтера (не обов'язковий параметр). Якщо параметр Name не вказано, всі примаплені мережні принтери будуть відключені.
- Get-PrinterInfo -Computer -Name деComputer - ім'я комп'ютера, до якого підключений принтер (не обов'язковий параметр. Якщо не вказано, буде використовуватися локальна машина),Name - ім'я принтера на віддаленій або локальній машині, залежить від попереднього параметра (не обов'язковий параметр. Якщо не вказано, буде виведено коротку довідку про всі принтери вказаного комп'ютера. Якщо вказано, буде виведена докладна інформація про принтер). Виведення цієї команди не міститиме відомостей про права доступу на принтер.
- Set-DefaultPrinter -Name деName - ім'я (або шлях) принтера, який має стати для користувача принтером за промовчанням.
- New-PrinterShare -Computer -Name -ShareName деComputer - ім'я комп'ютера, до якого підключено принтер (не обов'язковий параметр).Якщо не вказано, використовуватиметься локальна машина)Name - ім'я принтера, який потрібно надати для спільного доступуShareName - ім'я принтера, тобто. ім'я, під яким принтер буде видно з мережі
- Remove-PrinterShare -Computer -Name деComputer - ім'я комп'ютера, до якого підключено принтер (не обов'язковий параметр. Якщо не вказано, використовуватиметься локальна машина)Name - ім'я принтера, для якого необхідно вимкнути спільний доступ (не обов'язковий параметр. Якщо не вказано, загальний доступ буде скасовано для всіх розшарованих принтерів на вибраному попередньому параметрі комп'ютері)
- Get-Printer -Computer -Name деComputer - ім'я комп'ютера, до якого підключений принтер (не обов'язковий параметр. Якщо не вказано, використовуватиметься локальна машина)Name - ім'я принтера, для якого слід отримати відомості про права доступу (не обов'язковий параметр. Якщо не вказано, будуть отримані відомості про ACL всіх принтерів на вибраному попереднім параметром комп'ютера) Генерує на виході масив об'єктів з необхідними відомостями про кожен ACE. Цей масив можна використовувати як для зміни прав доступу, так і для експорту до зовнішнього файлу.
- Set-Printer не приймає жодних аргументів, лише отримує дані по конвеєру. Як вхідні дані повинні використовуватися об'єкти, які за властивостями відповідають об'єктам, які генерує команда Get-Printer. Команда не може бути на початку рядка, а лише на виході конвеєра, з якого надходять об'єкти. Також по конвеєру можна передавати об'єкти із зовнішніх файлів (наприклад, CSV, XML)
- Add-PrinterPermission -User -AceType -AccessMask деUser - ім'я користувача/групи, якого слід додати доACL список принтераAceType - тип доступу. МожливоAllow абоDenyAccessMask - маска доступу. Може мати такі значення:ManagePrinters,ManageDocuments,Print,TakeOwnership,ReadPermissions,ChangePermissionsЦя команда так само не може бути на початку рядка, а повинна знаходитися на виході конвеєра, з якого надходять об'єкти. Як вхідні дані повинні використовуватися об'єкти, які за властивостями відповідають об'єктам, які генерує команда Get-Printer. Команда не може бути на початку рядка, а лише на виході конвеєра, з якого надходять об'єкти. Також по конвеєру можна передавати об'єкти із зовнішніх файлів (наприклад, CSV, XML)
- Remove-PrinterPermission -User деUser - ім'я користувача/групи, якого слід видалити зі списку ACL принтераЦя команда так само не може бути на початку рядка, а повинна перебувати на виході конвеєра, з якого надходять об'єкти. Як вхідні дані повинні використовуватися об'єкти, які за властивостями відповідають об'єктам, які генерує команда Get-Printer. Команда не може бути на початку рядка, а лише на виході конвеєра, з якого надходять об'єкти. Також по конвеєру можна передавати об'єкти із зовнішніх файлів (наприклад, CSV, XML)
- Set-PrinterPermission -User деUser - ім'я користувача/групи, для якого слід надати привілейований доступ.Важливо:при використанні команди Set-PrinterPermission слід пам'ятати, що вказаний користувач/група матиме єдиний доступ до принтера з правом ManagePrinters. При цьому ймовірно, що ви після виконання команди втратите доступ до принтераЦя команда так само не може бути на початкурядки, а повинна перебувати на виході конвеєра, з якого надходять об'єкти. Як вхідні дані повинні використовуватися об'єкти, які за властивостями відповідають об'єктам, які генерує команда Get-Printer.
Команда не може бути на початку рядка, а лише на виході конвеєра, з якого надходять об'єкти. Також по конвеєру можна передавати об'єкти із зовнішніх файлів (наприклад, CSV, XML)
та кілька прикладів використання:
Get-Printer PrintSrv "MyPrinter" export-csv C:\LaserJet.csv - експортує ACL списки принтера MyPrinter до CSV файлу
Get-Printer PrintSrv Remove-PrinterPermission Everyone – видаляє групу Everyone зі списків ACL усіх принтерів сервера PrintSrv
Import-Clixml C:\Printers.xml Set-Printer – відновлює права для принтерів на ті, що містяться у XML файлі. При цьому поточні списки ACL вказаних у файлі принтерів будуть повністю перезаписані списком ACL із файлу.
Get-Content C:\Computers.txt % - дає право друку на всіх принтерах, підключених до комп'ютерів зі списку computers.txt
New-NetworkPrinter PrintSrv "HP LaserJet 2100" - підключає користувача в контексті якого виконується скрипт мережного принтера HP LaserJet 2100, який фізично підключений до комп'ютера PrintSrv
забагато, звичайно ж, але нічого космічно складного для розбору я тут не бачу. Головне – чітке розуміння структури SecurityDescriptor і хоча б базові навички роботи з ним.
Важливо:якщо не вказуєте необов'язкові параметри, то зазначення наступних параметрів у вигляді іменованих (не позиційних) є обов'язковим!
Навіть не знаю, що ще сюди додати. Начебто всі питання розібрав раніше, зараз просто це все зібрав докупи. Втім, як завжди, якщо єпитання, зауваження - кнопка Comments вам в помощь ;-)