web-dev-qa-db-ja.com

スクリプトでプリンタグループの権限を変更しますか?

スクリプトを使用して、ローカルプリンターのユーザーグループの「全員」のアクセス許可を変更するにはどうすればよいですか?私は掘り下げていて、PowerShellを使用してACLを使用するように指示されていますか?

1
Isaac F

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

またはスティーブのスクリプトを変更することによって:

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

ソース


追加リソース

1
Pimp Juice IT