如何使用脚本更改本地打印机上的用户组“所有人”权限?我一直在研究,有东西告诉我使用 powershell 使用 ACL?
答案1
有关在 Windows 中通过命令行(PowerShell 和 Batch)设置打印机权限的详细信息,请参阅以下资源和引用的步骤。
批量修改打印机权限
如果您想使用命令行工具执行此操作,请从资源工具包中获取 subinacl:
subinacl /printer <\printer name> /grant=Everyone=F
或者修改 Steve 的脚本:
for /f %a in ('net share ^| find "Spooled"') do subinacl /printer %a /grant=Everyone=F
PowerShell - 添加打印机权限
Windows Server 2012 附带 PrintManagement 模块,这使得打印机的自动化管理更加容易。但在测试 Add-Printer 和 Set-Printer 等 cmdlet 时,我注意到您只能使用参数 -PermissionSDDL 设置打印机权限。这两个 cmdlet 中的这些参数都需要使用安全定义描述语言 (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