Как изменить права доступа группы "все" на локальном принтере с помощью сценария? Я копался и что-то подсказывало мне использовать ACL с помощью powershell?
1 ответ
Пожалуйста, ознакомьтесь с приведенными ниже ресурсами и указанными шагами для получения подробных сведений о настройке разрешений принтера через командную строку в Windows (как PowerShell, так и Batch).
Пакетное изменение разрешений принтера
Если вы хотите сделать это с помощью инструмента командной строки, получите subinacl из Resource Kit:
subinacl /printer <\printer name> /grant=Everyone=F
или изменив сценарий Стива:
for /f %a in ('net share ^| find "Spooled"') do subinacl /printer %a /grant=Everyone=F
PowerShell - Добавить разрешение на принтер
Windows Server 2012 поставляется с модулем PrintManagement, который упрощает автоматизацию управления принтерами. Но, тестируя командлеты, такие как Add-Printer и Set-Printer, я заметил, что вы можете установить разрешение на принтер только с помощью параметра -PermissionSDDL. Эти параметры в обоих командлетах ожидают разрешения принтера с использованием языка описания определения безопасности (SDDL), который не так просто вводить в командной строке.
Function Add-LHSPrinterPermissionSDDL { [cmdletbinding( ConfirmImpact = 'Low', SupportsShouldProcess = $false )] [OutputType('System.String')] param( [Parameter(Position=0,Mandatory=$True,ValueFromPipeline=$False, HelpMessage='A Security Group or User like "Domain\GroupName" or "Domain\UserName"')] [String]$Account, [Parameter(Position=1,Mandatory=$True,ValueFromPipeline=$False)] [String]$existingSDDL ) BEGIN { Set-StrictMode -Version Latest ${CmdletName} = $Pscmdlet.MyInvocation.MyCommand.Name } # end BEGIN PROCESS { try { $isContainer = $false $isDS = $false $SecurityDescriptor = New-Object -TypeName ` Security.AccessControl.CommonSecurityDescriptor ` $isContainer, $isDS, $existingSDDL Write-Verbose "Adding Permission for Group $Account" #get the SID for the specified Group and add it to the SDDL $NTAccount = New-Object Security.Principal.NTAccount $Account $NTAccountSid = $NTAccount.Translate([Security.Principal.SecurityIdentifier]).Value $SecurityDescriptor.DiscretionaryAcl.AddAccess( [System.Security.AccessControl.AccessControlType]::Allow, $NTAccountSid, 268435456, #full control all operations [System.Security.AccessControl.InheritanceFlags]::None, [System.Security.AccessControl.PropagationFlags]::None) | Out-Null return $SecurityDescriptor.GetSddlForm("All") } catch [Exception] { Write-Error -Message "Failed To Generate SDDL (review inner exception):`n $_.Message" ` -Exception $_.Exception } } # end PROCESS END { Write-Verbose "Function ${CmdletName} finished." } } #end Function Add-LHSPrinterPermissionSDDL