Cum să protejezi documentele PDF împotriva copierii și printării: tehnici de watermark și securizare

Примеры PowerShell команд
  
   import fitz  # PyMuPDF
from PIL import Image, ImageDraw, ImageFont
import datetime

# Setări generale
input_pdf = "document2.pdf"
output_pdf = "document_fara_print.pdf"
watermark_text = "TEXT"
font_size_ratio = 0.01       # proporție din lățimea paginii
text_color = (255, 0, 0, 40) # roșu opac (maxim de protecție)

# Deschidem PDF-ul
pdf = fitz.open(input_pdf)
images = []

for page_num in range(len(pdf)):
    # Convertim pagina în imagine (300 dpi)
    pix = pdf[page_num].get_pixmap(dpi=300)
    img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples).convert("RGBA")

    # Pregătim fontul
    font_size = int(img.width * font_size_ratio)
    try:
        font = ImageFont.truetype("arial.ttf", font_size)
    except:
        font = ImageFont.load_default()

    # Layer transparent pentru watermark
    watermark_layer = Image.new("RGBA", img.size, (0, 0, 0, 0))
    draw_wm = ImageDraw.Draw(watermark_layer)

    # Dimensiune text
    bbox = draw_wm.textbbox((0, 0), watermark_text, font=font)
    text_width = bbox[2] - bbox[0]
    text_height = bbox[3] - bbox[1]

    # Pas între repetiții
    step_x = text_width + 200
    step_y = text_height + 200

    # Desen watermark repetat
    for y in range(-img.height, img.height * 2, step_y):
        for x in range(-img.width, img.width * 2, step_x):
            draw_wm.text((x, y), watermark_text, font=font, fill=text_color)

    # Rotim layer-ul
    rotated = watermark_layer.rotate(-45, expand=1)

    # Decupăm la dimensiunea originală
    x_center = rotated.width // 2
    y_center = rotated.height // 2
    half_w = img.width // 4
    half_h = img.height // 4
    cropped = rotated.crop((x_center - half_w, y_center - half_h,
                            x_center + half_w, y_center + half_h))

    # Asigurăm același mode și dimensiune
    cropped = cropped.convert("RGBA").resize(img.size)

    # Combinăm cu pagina originală
    watermarked = Image.alpha_composite(img, cropped)
    images.append(watermarked.convert("RGB"))

# Salvăm PDF final cu metadate
images[0].save(output_pdf, save_all=True, append_images=images[1:])

# Redeschidem pentru a adăuga metadatele
doc = fitz.open(output_pdf)
doc.set_metadata({
    "title": "Raport oficial",
    "author": "Nume Prenume",
    "subject": "Document protejat",
    "keywords": "Protecție, watermark, confidențial",
    "creator": "Sistem intern de generare PDF",
    "producer": "Denumire",
    "creationDate": datetime.datetime.now().strftime("D:%Y%m%d%H%M%S"),
    "modDate": datetime.datetime.now().strftime("D:%Y%m%d%H%M%S")
})
doc.saveIncr()
doc.close()

print(f"PDF creat cu watermark și metadate: {output_pdf}")



    

Cum să convertești rapid zeci de documente Word în PDF folosind PowerShell / Как быстро конвертировать десятки документов Word в PDF с помощью PowerShell

Примеры PowerShell команд
  
    $sourceFolder = "E:\DocumenteWord"
$destFolder   = "E:\DocumentePDF"

if (!(Test-Path $destFolder)) {
    New-Item -ItemType Directory -Path $destFolder | Out-Null
}

$wdFormatPDF = 17

$word = New-Object -ComObject Word.Application
$word.Visible = $false

$extensions = @("*.doc", "*.docx")

foreach ($ext in $extensions) {
    foreach ($file in Get-ChildItem -Path $sourceFolder -Filter $ext) {
        try {
            $pdfPath = Join-Path $destFolder ($file.BaseName + ".pdf")
            Write-Host "Convertim: $($file.FullName) -> $pdfPath"

            $doc = $word.Documents.Open($file.FullName, $false, $true)

            # Conversie cu string .NET pur
            $doc.SaveAs([string]$pdfPath, [ref]$wdFormatPDF)

            $doc.Close($false)
        }
        catch {
            Write-Host "Eroare la fișierul: $($file.FullName) - $($_.Exception.Message)" -ForegroundColor Red
        }
    }
}

$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null

Write-Host "Conversia a fost finalizată!"


    

Полезные команды PowerShell

Примеры PowerShell команд

Эти команды PowerShell помогут вам управлять файлами, директориями, службами и получать основную информацию о системе. Примеры подходят как для начинающих, так и для опытных пользователей.

 $sourceFolder = "E:\DocumenteWord"
$destFolder   = "E:\DocumentePDF"

if (!(Test-Path $destFolder)) {
    New-Item -ItemType Directory -Path $destFolder | Out-Null
}

$wdFormatPDF = 17

$word = New-Object -ComObject Word.Application
$word.Visible = $false

$extensions = @("*.doc", "*.docx")

foreach ($ext in $extensions) {
    foreach ($file in Get-ChildItem -Path $sourceFolder -Filter $ext) {
        try {
            $pdfPath = Join-Path $destFolder ($file.BaseName + ".pdf")
            Write-Host "Convertim: $($file.FullName) -> $pdfPath"

            $doc = $word.Documents.Open($file.FullName, $false, $true)

            # Conversie cu string .NET pur
            $doc.SaveAs([string]$pdfPath, [ref]$wdFormatPDF)

            $doc.Close($false)
        }
        catch {
            Write-Host "Eroare la fișierul: $($file.FullName) - $($_.Exception.Message)" -ForegroundColor Red
        }
    }
}

$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null

Write-Host "Conversia a fost finalizată!"

    

🔐 Блокировка установки и удаления программ в Windows 10

Блокировка установки программ в Windows 10

Ниже представлен PowerShell-скрипт, который позволяет ограничить установку и удаление программ на компьютере под управлением Windows 10. Скрипт следует запускать от имени администратора. Он вносит изменения в реестр, блокируя доступ к установщику MSI, Microsoft Store, панели управления и другим функциям.

# Сценарий для блокировки установки и удаления приложений в Windows 10
# Требуется запуск от имени администратора

# 1. Блокировка Windows Installer (MSI)
$RegistryPathInstaller = "HKLM:\Software\Policies\Microsoft\Windows\Installer"
New-Item -Path $RegistryPathInstaller -Force | Out-Null
Set-ItemProperty -Path $RegistryPathInstaller -Name "DisableMSI" -Value 1  # 1 - Отключить Windows Installer для стандартных пользователей

# 2. Блокировка доступа к "Добавить или удалить программы" в Панели управления
$RegistryPathUninstall = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Uninstall"
New-Item -Path $RegistryPathUninstall -Force | Out-Null
Set-ItemProperty -Path $RegistryPathUninstall -Name "NoAddRemovePrograms" -Value 1  # 1 - Скрыть "Добавить или удалить программы"

# 3. Блокировка доступа к Microsoft Store
$RegistryPathStore = "HKLM:\Software\Policies\Microsoft\WindowsStore"
New-Item -Path $RegistryPathStore -Force | Out-Null
Set-ItemProperty -Path $RegistryPathStore -Name "RemoveWindowsStore" -Value 1  # 1 - Отключить Microsoft Store

# 4. Блокировка UAC (Контроль учетных записей пользователей), чтобы ограничить установку
$RegistryPathUAC = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
Set-ItemProperty -Path $RegistryPathUAC -Name "EnableLUA" -Value 1  # 1 - Включить UAC

# 5. Блокировка изменения приложений через приложение "Настройки"
$RegistryPathSettings = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer"
New-Item -Path $RegistryPathSettings -Force | Out-Null
Set-ItemProperty -Path $RegistryPathSettings -Name "NoControlPanel" -Value 1  # 1 - Скрыть Панель управления и Настройки

Write-Output "Ограничения успешно применены. Обычные пользователи не могут устанавливать или удалять приложения.

🔐 Как изменить порт удалённого рабочего стола (RDP) с помощью PowerShell

Изменение порта RDP через PowerShell

Изменение стандартного порта RDP (3389) на произвольный — это распространённая мера безопасности среди системных администраторов. Ниже приведён PowerShell-скрипт, который автоматизирует процесс изменения порта, перезапуска службы RDP и настройки брандмауэра Windows.

# Укажите новый порт
$nouPort = 61322  # Замените на желаемый порт

# Изменение порта RDP в реестре Windows
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\' -Name 'PortNumber' -Value $nouPort

# Проверка изменения
$portSchimbat = Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\' -Name 'PortNumber'

if ($portSchimbat.PortNumber -eq $nouPort) {
    Write-Output "Порт RDP успешно изменён на $nouPort."
} else {
    Write-Output "Ошибка при изменении порта RDP."
}

# Перезапуск службы удалённого рабочего стола
Restart-Service -Name TermService -Force
Write-Output "Служба RDP перезапущена. Проверьте доступность нового порта."

# Открытие нового порта в брандмауэре Windows
New-NetFirewallRule -DisplayName "Allow RDP on Port $nouPort" -Direction Inbound -Protocol TCP -LocalPort $nouPort -Action Allow

Как настроить автоматический вход в Windows с помощью PowerShell: пошаговое руководство

Автоматический вход в Windows с помощью PowerShell — Полное пошаговое руководство

В этом руководстве вы узнаете, как настроить автоматический вход в систему Windows с помощью PowerShell. Это может быть полезно для серверов, тестовых машин или других устройств, где требуется автоматический доступ без ввода пароля.

Шаг 1: Укажите имя пользователя и пароль

На этом этапе задаётся имя пользователя и пароль, которые будут использоваться для автоматического входа. Если пароль не требуется — оставьте его пустым.

$UserName = "Admin"
$Password = "пароль_пользователя"  # Можно оставить пустым, если пароль не используется
    

Шаг 2: Укажите путь в реестре

Этот путь используется для хранения параметров автоматического входа.

$regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
    

Шаг 3: Настройка параметров входа

Теперь задаются параметры: включение автологина, имя пользователя и пароль.

Set-ItemProperty -Path $regKey -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $regKey -Name "DefaultUserName" -Value $UserName
Set-ItemProperty -Path $regKey -Name "DefaultPassword" -Value $Password
    

Шаг 4: Подтверждение

После выполнения настроек будет выведено сообщение об успешной настройке.

Write-Host "Автоматический вход для пользователя $UserName был успешно настроен."
    

Когда стоит использовать автологин?

  • На серверах или терминалах без физического доступа.
  • На тестовых или демонстрационных машинах.
  • В закрытых системах, где безопасность не является приоритетом.

Важно: автоматический вход снижает уровень безопасности. Любой, кто имеет физический доступ к ПК, сможет войти в систему без пароля.

$UserName = "Admin"
$Password = "пароль_пользователя"  # Можно оставить пустым, если пароль не используется
$regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $regKey -Name "AutoAdminLogon" -Value "1"
Set-ItemProperty -Path $regKey -Name "DefaultUserName" -Value $UserName
Set-ItemProperty -Path $regKey -Name "DefaultPassword" -Value $Password
Write-Host "Автоматический вход для пользователя $UserName был успешно настроен."
    

Cum aflăm și modificăm portul RDP pe Windows – pas cu pas și avantaje

1. De ce să schimbăm portul RDP?

  1. Securitate sporită: Portul standard 3389 este cunoscut și scanat frecvent de atacatori. Ascunderea RDP în spatele unui port alternativ ajută la evitarea unor atacuri automate (de tip „bot”), crescând șansele de a trece neobservat la scanările generice.
  2. Reducerea conflictelor: În anumite organizații sau rețele, portul 3389 poate fi deja rezervat ori blocat. Schimbarea portului rezolvă posibile conflicte și face configurația mai flexibilă.
  3. Obicei bun de administrare: În general, mutarea serviciilor importante de pe porturile implicite este o practică uzuală pentru a avea un plus de protecție și pentru a organiza mai eficient politicile de firewall

Как скачать видео с facecast.net | How download video from facecast.net

În timpul conferinței noastre, apăsăm butonul F12 și observăm că videoclipul este încărcat în segmente de o secundă. Atunci când facem clic pe unul dintre fișierele .ts, suntem întrebați unde dorim să salvăm. Această funcționalitate ne-a inspirat ideea de a descărca fiecare fișier .ts și de a le uni ulterior într-un singur videoclip complet.



Descărcarea manuală a fiecărui fișier .ts ar fi o sarcină foarte consumatoare de timp și nu este fezabilă în practică. Din acest motiv, am dezvoltat o aplicație care automatizează procesul de descărcare a tuturor fișierelor .ts în mod eficient și rapid.