Public/Set-specPrinterPermissions.ps1

Function Set-specPrinterPermissions {
    <#
        Version 1.0 - Initial Release
                1.1 - Added if / else to check if the printer name is empty
    #>

    [cmdletBinding()]

    param (
        [Parameter()]
        [System.Object[]]$usbAssignedPrinters,

        [Parameter()]
        [System.Object[]]$ipAssignedPrinters
    )

    #region 5. Printer Permissions
    Write-Host "`nAdding printer permissions if required" -ForegroundColor DarkCyan

    # define permissions to be added to the printer
    $SDDL_User = 'Authenticated Users'

    # Grant 'print' and 'Manage documents' to authenticated users
    $SDDL_Permissions = '(A;CIIO;RC;;;AU)(A;OIIO;RPWPSDRCWDWO;;;AU)(A;;SWRC;;;AU)'

    # Get all printers to configure permissions for
    $printersToConfigure = $usbAssignedPrinters + $ipAssignedPrinters

    foreach ($printerToConfigure in $printersToConfigure) {
        if ([string]::IsNullOrEmpty($printerToConfigure.Printer_Name)) {
            $printerName = $printerToConfigure.Name
        } else {
            $printerName = $printerToConfigure.Printer_Name
        }

        # Instantiate the Printer object using New-specPrinterObject
        $printer = New-specPrinterObject -Name $printerName

        try {
            $currentPermissions = $printer.GetPrinterPermissions()

            # Checks if current permissions are in place
            if ($currentPermissions -notlike "*$SDDL_Permissions*") {

                # Construct the new SDDL string by concatenating the original and the new permissions
                $newSDDL = $currentPermissions + $SDDL_Permissions

                $printer.SetPrinterPermissions($newSDDL)

                Write-Host "Printer [$PrinterName] permissions updated." -ForegroundColor DarkGreen
            } else {
                Write-Host "Printer [$PrinterName] already has the correct permissions for user [$SDDL_User]" -ForegroundColor DarkGray
            }

        } catch {
            Write-Warning "Failed to get or set printer permissions for '$printerName': $_"
        }
        Write-Host
    }
    #endregion 5. Printer Permissions
}