@demonca13

Как изменить права на печать через PowerShell Script?

Имею 25 терминальных серверов Windows Server 2012r2, периодически меняют принтеры и приходиться добавлять новые принтеры, и работка эта мягко сказать муторная)
Решил эту проблему скриптом PowerShell, которая добавляет во всех серверах принтеры, ни как не пойму как можно реализовать в скрипте права на печать и изменение документа для пользователей.

Скрипт
spoiler

$PrinterIP = "192.168.210.37"
$PrinterPort = "9100"
$PrinterPortName = $PrinterIP
$DriverName = "HP Universal Printing PCL 6"
$DriverPath = "\\ИП\print$\x64\3"
$DriverInf = "C:\Windows\System32\DriverStore\FileRepository\hpcu190u.inf_amd64_016ba0cfcf104d26\hpcu190u.inf"
$PrinterCaption = "XEROX-264"
$PrinterLocation = "IT"
$PrinterComment = "HP"


$ComputerList = @("Список серверов")


Function CreatePrinterPort {
param ($PrinterIP, $PrinterPort, $PrinterPortName, $ComputerName)
$wmi = [wmiclass]"\\$ComputerName\root\cimv2:win32_tcpipPrinterPort"
$wmi.psbase.scope.options.enablePrivileges = $true
$Port = $wmi.createInstance()
$Port.name = $PrinterPortName
$Port.hostAddress = $PrinterIP
$Port.portNumber = $PrinterPort
$Port.SNMPEnabled = $false
$Port.Protocol = 1
$Port.put()
}

Function InstallPrinterDriver {
Param ($DriverName, $DriverPath, $DriverInf, $ComputerName)
$wmi = [wmiclass]"\\$ComputerName\Root\cimv2:Win32_PrinterDriver"
$wmi.psbase.scope.options.enablePrivileges = $true
$wmi.psbase.Scope.Options.Impersonation = `
[System.Management.ImpersonationLevel]::Impersonate
$Driver = $wmi.CreateInstance()
$Driver.Name = $DriverName
$Driver.DriverPath = $DriverPath
$Driver.InfName = $DriverInf
$wmi.AddPrinterDriver($Driver)
$wmi.Put()
}

Function CreatePrinter {
param ($PrinterCaption, $PrinterPortName, $DriverName, $ComputerName)
$wmi = ([WMIClass]"\\$ComputerName\Root\cimv2:Win32_Printer")
$Printer = $wmi.CreateInstance()
$Printer.Caption = $PrinterCaption
$Printer.DriverName = $DriverName
$Printer.PortName = $PrinterPortName
$Printer.DeviceID = $PrinterCaption
$printer.Location = $printerLocation
$printer.Comment = $printerComment

$Printer.Put()


}

foreach ($computer in $ComputerList) {
CreatePrinterPort -PrinterIP $PrinterIP -PrinterPort $PrinterPort `
-PrinterPortName $PrinterPortName -ComputerName $computer
InstallPrinterDriver -DriverName $DriverName -DriverPath `
$DriverPath -DriverInf $DriverInf -ComputerName $computer
CreatePrinter -PrinterPortName $PrinterPortName -DriverName `
$DriverName -PrinterCaption $PrinterCaption -ComputerName $computer -Location $Printer.Location -Comment $Printer.Comment
}


Нужно убрать Everyone и добавить пользователя или группу пользователей с правами только печать и изменение документа.

Заранее спасибо всем.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@demonca13 Автор вопроса
Нашел очень простое решение утилитой SetACL.exe
Команды ниже дают право на печать и управление документом юзеру и удаляет Everyone.
SetACL.exe -on "\\servername\printname" -ot prn -actn ace -ace "n:domain\user;p:print,man_docs"
SetACL.exe -on "\\servername\printname" -ot prn -actn trustee -trst "n1:Everyone;ta:remtrst;w:dacl,sacl" -rec cont_obj -ignoreerr
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@MaxKozlov
wmi:
GetSecurityDescriptor()
SetSecurityDescriptor()

Но там если эти десткрипторы самому конструировать, мутно очень получается. Можно, но сложно :)
я бы предложил заюзать модуль
PowerShellAccessControl или что-нибудь аналогичное
Правда сам не пробовал
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы