使用脚本更改打印机组权限?

使用脚本更改打印机组权限?

如何使用脚本更改本地打印机上的用户组“所有人”权限?我一直在研究,有东西告诉我使用 powershell 使用 ACL?

答案1

有关在 Windows 中通过命令行(PowerShell 和 Batch)设置打印机权限的详细信息,请参阅以下资源和引用的步骤。

批量修改打印机权限

如果您想使用命令行工具执行此操作,请从资源工具包中获取 subinacl:

http://www.microsoft.com/downloads/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en

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

来源


其他资源

相关内容